diff --git a/.github/workflows/create-nightly-installer.yaml b/.github/workflows/create-nightly-installer.yaml index 9defaee46..2731219a6 100644 --- a/.github/workflows/create-nightly-installer.yaml +++ b/.github/workflows/create-nightly-installer.yaml @@ -1,73 +1,164 @@ -name: Create Nightly Installer +name: Build and publish DISMTools release on: - push: - branches: - - dt_prerel_* - - dt_rel* - paths-ignore: - - '.github/**' - - '**/README.md' - - 'res/**' workflow_dispatch: + inputs: + release_type: + description: Release type + required: true + default: prerelease + type: choice + options: + - prerelease + - release + - draft + release_tag: + description: Optional release tag (leave empty to generate one) + required: false + type: string + release_name: + description: Optional release name (leave empty to use the tag) + required: false + type: string + +permissions: + contents: write + env: ACTIONS_ALLOW_UNSECURE_COMMANDS: true - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: - build-runspace: + build-release: runs-on: windows-latest + steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.head_ref }} - submodules: 'true' - - name: Set up MSBuild - uses: microsoft/Setup-MSBuild@v2 - - name: Prepare NuGet packages - run: .\nugetpkgprep.bat - continue-on-error: false - - name: Generate installer - run: | - $ghAction = "yes" - $solutionDir = "$((Get-Location).Path)\" - $projectDir = "$((Get-Location).Path)\" - $targetDir = (Get-Location).Path + "\bin\Debug\" - iex "$($solutionDir)CheckMissingDlls.ps1" - msbuild DISMTools.vbproj /p:Configuration=Debug /p:DeployOnBuild=true /p:SolutionDir=$solutionDir /p:ProjectDir=$projectDir /p:TargetDir=$targetDir - - name: Upload Artifact - uses: actions/upload-artifact@v4 - with: - name: build-result - path: ${{ github.workspace }}\Installer\Output\dt_setup.exe - upload-installer: - runs-on: ubuntu-latest - needs: build-runspace - steps: - - uses: actions/checkout@v4 - - name: Grab Artifacts - uses: actions/download-artifact@v4 + - name: Check out selected branch + uses: actions/checkout@v4 with: - name: build-result - path: ./downloaded_artifacts - - name: Prepare directory + submodules: "true" + lfs: "true" + fetch-depth: 0 + + - name: Verify Git LFS package archive + shell: pwsh run: | - mkdir -p "./${{ GITHUB.REF_NAME }}" - mv -f "./downloaded_artifacts/dt_setup.exe" "./${{ GITHUB.REF_NAME }}/dt_setup.exe" - rm -rf "./downloaded_artifacts" - - name: Fix OpenSSL Issues + $packageArchive = Get-Item ".\pkgsrc.zip" + if ($packageArchive.Length -lt 1MB) { + throw "pkgsrc.zip is not the Git LFS archive. File size: $($packageArchive.Length) bytes." + } + $signature = [System.IO.File]::ReadAllBytes($packageArchive.FullName)[0..1] + if ($signature[0] -ne 0x50 -or $signature[1] -ne 0x4B) { + throw "pkgsrc.zip does not have a valid ZIP signature." + } + + - name: Set up MSBuild + uses: microsoft/Setup-MSBuild@v2 + + - name: Prepare NuGet packages + shell: pwsh + run: .\nugetpkgprep.bat + + - name: Build application and installer + shell: pwsh run: | - sudo apt remove openssh-server openssh-client - sudo apt install openssh-server openssh-client - - name: Upload Installer - env: - SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }} - API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} - uses: cpina/github-action-push-to-another-repository@main + New-Item -ItemType Directory -Path ".\artifacts" -Force | Out-Null + $ghAction = "yes" + $solutionDir = "$((Get-Location).Path)\" + $projectDir = "$((Get-Location).Path)\" + $targetDir = (Get-Location).Path + "\bin\Debug\" + iex "$($solutionDir)CheckMissingDlls.ps1" + $logPath = Join-Path (Get-Location).Path "artifacts\msbuild.log" + msbuild DISMTools.vbproj ` + /p:Configuration=Debug ` + /p:DeployOnBuild=true ` + /p:SolutionDir=$solutionDir ` + /p:ProjectDir=$projectDir ` + /bl:artifacts\build.binlog ` + "/flp:logfile=$logPath;verbosity=diagnostic" + if ($LASTEXITCODE -ne 0) { + throw "MSBuild failed with exit code $LASTEXITCODE." + } + + - name: Create release files + shell: pwsh + run: | + $portableOutput = ".\bin\Debug" + $installerOutput = ".\Installer\Output\dt_setup.exe" + if (-not (Test-Path "$portableOutput\DISMTools.exe")) { + throw "DISMTools.exe was not produced." + } + if (-not (Test-Path $installerOutput)) { + throw "dt_setup.exe was not produced." + } + if ((Test-Path ".\portable") -and -not (Test-Path "$portableOutput\portable")) { + Copy-Item ".\portable" "$portableOutput\portable" -Force + } + Compress-Archive ` + -Path "$portableOutput\*" ` + -DestinationPath ".\artifacts\DISMTools.zip" ` + -CompressionLevel Optimal ` + -Force + Copy-Item $installerOutput ".\artifacts\dt_setup.exe" -Force + + - name: Upload workflow artifacts + uses: actions/upload-artifact@v4 with: - source-directory: '${{ GITHUB.REF_NAME }}' - destination-github-username: 'CodingWonders' - destination-repository-name: 'dt-nightly-installers' - user-email: '101426328+CodingWonders@users.noreply.github.com' - target-directory: '${{ GITHUB.REF_NAME }}' - target-branch: main + name: DISMTools-release-assets-${{ github.run_number }} + path: | + artifacts\DISMTools.zip + artifacts\dt_setup.exe + artifacts\msbuild.log + artifacts\build.binlog + if-no-files-found: error + + - name: Publish GitHub release + shell: pwsh + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TYPE: ${{ inputs.release_type }} + REQUESTED_TAG: ${{ inputs.release_tag }} + REQUESTED_NAME: ${{ inputs.release_name }} + run: | + $assemblyInfo = Get-Content ".\My Project\AssemblyInfo.vb" -Raw + if ($assemblyInfo -notmatch 'AssemblyFileVersion\("([^"]+)"\)') { + throw "Could not determine the DISMTools file version." + } + $fileVersion = $Matches[1] + $versionParts = $fileVersion.Split(".") + $publicVersion = ($versionParts[0..2] -join ".") + $datePart = Get-Date -Format "yyMMdd" + $generatedTag = "v$($publicVersion)_$($datePart).${{ github.run_number }}" + $tag = if ([string]::IsNullOrWhiteSpace($env:REQUESTED_TAG)) { + $generatedTag + } else { + $env:REQUESTED_TAG.Trim() + } + $releaseName = if ([string]::IsNullOrWhiteSpace($env:REQUESTED_NAME)) { + $tag + } else { + $env:REQUESTED_NAME.Trim() + } + $releaseArgs = @( + "release", "create", $tag, + ".\artifacts\DISMTools.zip", + ".\artifacts\dt_setup.exe", + "--repo", $env:GITHUB_REPOSITORY, + "--target", $env:GITHUB_SHA, + "--title", $releaseName, + "--notes", "Automated DISMTools build from branch $env:GITHUB_REF_NAME at commit $env:GITHUB_SHA. Application file version: $fileVersion." + ) + switch ($env:RELEASE_TYPE) { + "prerelease" { $releaseArgs += "--prerelease" } + "draft" { $releaseArgs += "--draft" } + "release" { } + default { throw "Unsupported release type: $env:RELEASE_TYPE" } + } + & gh @releaseArgs + if ($LASTEXITCODE -ne 0) { + throw "GitHub release creation failed with exit code $LASTEXITCODE." + } + $releaseUrl = gh release view $tag --repo $env:GITHUB_REPOSITORY --json url --jq ".url" + "### Published release" >> $env:GITHUB_STEP_SUMMARY + "- Release: [$tag]($releaseUrl)" >> $env:GITHUB_STEP_SUMMARY + "- Application version: $fileVersion" >> $env:GITHUB_STEP_SUMMARY + "- Assets: DISMTools.zip, dt_setup.exe" >> $env:GITHUB_STEP_SUMMARY diff --git a/.gitmodules b/.gitmodules index 91dcc5b29..f67549afc 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "tour"] path = tour url = https://github.com/CodingWonders/dt_tour +[submodule "Helpers/extps1/PE_Helper/tools/BDE-GUI"] + path = Helpers/extps1/PE_Helper/tools/BDE-GUI + url = https://github.com/CodingWonders/BDE-GUI diff --git a/7z/amd64/7z.dll b/7z/amd64/7z.dll index 4c31d63d0..859c48bcc 100644 Binary files a/7z/amd64/7z.dll and b/7z/amd64/7z.dll differ diff --git a/7z/amd64/7z.exe b/7z/amd64/7z.exe index 2bab9d23b..064a1359f 100644 Binary files a/7z/amd64/7z.exe and b/7z/amd64/7z.exe differ diff --git a/7z/i386/7z.dll b/7z/i386/7z.dll index ddea24d14..efc6c81a0 100644 Binary files a/7z/i386/7z.dll and b/7z/i386/7z.dll differ diff --git a/7z/i386/7z.exe b/7z/i386/7z.exe index 3c075fd31..9dd9b7da3 100644 Binary files a/7z/i386/7z.exe and b/7z/i386/7z.exe differ diff --git a/ApplicationEvents.vb b/ApplicationEvents.vb index 8ecea4100..6848831a9 100644 --- a/ApplicationEvents.vb +++ b/ApplicationEvents.vb @@ -19,6 +19,7 @@ Namespace My Private debounceInterval As TimeSpan = TimeSpan.FromSeconds(2) Private Sub Start(sender As Object, e As EventArgs) Handles Me.Startup + LocalizationService.Initialize() DynaLog.LogMessage("Adding startup event handlers...") AddHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, AddressOf SysEvts_UserPreferenceChanged AddHandler Microsoft.Win32.SystemEvents.DisplaySettingsChanging, AddressOf SysEvts_DisplaySettingsChanging @@ -184,4 +185,3 @@ Namespace My End Namespace - diff --git a/CheckMissingDLLs.ps1 b/CheckMissingDLLs.ps1 index 32fdbc247..008d1ab40 100644 --- a/CheckMissingDLLs.ps1 +++ b/CheckMissingDLLs.ps1 @@ -10,7 +10,7 @@ if (-not (Test-Path ".\bin\Debug")) } if (-not (Test-Path ".\bin\Debug\System.IO.dll" -PathType Leaf)) { - Copy-Item "$($SolutionDir)\packages\System.IO.4.3.0\lib\net462\System.IO.dll" "$($TargetDir)\System.IO.dll" + Copy-Item "$($SolutionDir)\packages\System.IO.4.3.*\lib\net462\System.IO.dll" "$($TargetDir)\System.IO.dll" } if (-not (Test-Path ".\bin\Debug\System.Net.Http.dll" -PathType Leaf)) { @@ -18,13 +18,13 @@ if (-not (Test-Path ".\bin\Debug\System.Net.Http.dll" -PathType Leaf)) { } if (-not (Test-Path ".\bin\Debug\System.Runtime.dll" -PathType Leaf)) { - Copy-Item "$($SolutionDir)\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll" "$($TargetDir)\System.Runtime.dll" + Copy-Item "$($SolutionDir)\packages\System.Runtime.4.3.*\lib\net462\System.Runtime.dll" "$($TargetDir)\System.Runtime.dll" } if ((-not (Test-Path ".\bin\Debug\System.Security*.dll" -PathType Leaf)) -or ((Get-ChildItem ".\bin\Debug\System.Security*.dll").Count -lt 4)) { - Copy-Item "$($SolutionDir)\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll" "$($TargetDir)\System.Security.Cryptography.Algorithms.dll" - Copy-Item "$($SolutionDir)\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll" "$($TargetDir)\System.Security.Cryptography.Encoding.dll" - Copy-Item "$($SolutionDir)\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll" "$($TargetDir)\System.Security.Cryptography.Primitives.dll" - Copy-Item "$($SolutionDir)\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll" "$($TargetDir)\System.Security.Cryptography.X509Certificates.dll" + Copy-Item "$($SolutionDir)\packages\System.Security.Cryptography.Algorithms.4.3.*\lib\net463\System.Security.Cryptography.Algorithms.dll" "$($TargetDir)\System.Security.Cryptography.Algorithms.dll" + Copy-Item "$($SolutionDir)\packages\System.Security.Cryptography.Encoding.4.3.*\lib\net46\System.Security.Cryptography.Encoding.dll" "$($TargetDir)\System.Security.Cryptography.Encoding.dll" + Copy-Item "$($SolutionDir)\packages\System.Security.Cryptography.Primitives.4.3.*\lib\net46\System.Security.Cryptography.Primitives.dll" "$($TargetDir)\System.Security.Cryptography.Primitives.dll" + Copy-Item "$($SolutionDir)\packages\System.Security.Cryptography.X509Certificates.4.3.*\lib\net461\System.Security.Cryptography.X509Certificates.dll" "$($TargetDir)\System.Security.Cryptography.X509Certificates.dll" } diff --git a/DISMTools.sln b/DISMTools.sln index b6c61fbe6..9330f903b 100644 --- a/DISMTools.sln +++ b/DISMTools.sln @@ -34,6 +34,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Background Services", "Back EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AutoReloadSvc", "Tools\AutoReloadService\AutoReloadSvc.vbproj", "{8EE934A6-F66E-4389-BE06-A737E9012F77}" EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "BDELib", "Tools\BDELib\BDELib.vbproj", "{4F91E8CD-220B-4882-9228-B30B7F32C4A9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -256,6 +258,24 @@ Global {8EE934A6-F66E-4389-BE06-A737E9012F77}.Release|Win32.ActiveCfg = Release|Any CPU {8EE934A6-F66E-4389-BE06-A737E9012F77}.Release|x64.ActiveCfg = Release|Any CPU {8EE934A6-F66E-4389-BE06-A737E9012F77}.Release|x86.ActiveCfg = Release|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Debug|ARM64EC.ActiveCfg = Debug|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Debug|Win32.ActiveCfg = Debug|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Debug|x64.ActiveCfg = Debug|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Debug|x86.ActiveCfg = Debug|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Release|Any CPU.Build.0 = Release|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Release|ARM64.ActiveCfg = Release|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Release|ARM64EC.ActiveCfg = Release|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Release|Win32.ActiveCfg = Release|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Release|x64.ActiveCfg = Release|Any CPU + {4F91E8CD-220B-4882-9228-B30B7F32C4A9}.Release|x86.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -268,6 +288,7 @@ Global {1A6D20C4-4CF3-478F-A292-21A90B64C1B6} = {577F2635-34B0-4E7E-9CEB-4680D2F0E09D} {AA1BE743-8846-4B70-BFE0-C10F355563D3} = {577F2635-34B0-4E7E-9CEB-4680D2F0E09D} {FF315C4A-2668-4E7A-8885-00C2F806945C} = {577F2635-34B0-4E7E-9CEB-4680D2F0E09D} + {4F91E8CD-220B-4882-9228-B30B7F32C4A9} = {577F2635-34B0-4E7E-9CEB-4680D2F0E09D} {ADFA0CB4-E66F-4956-937E-1B2C4AAF3092} = {73D2865D-C927-423D-AF86-DD905DC747D5} {8EE934A6-F66E-4389-BE06-A737E9012F77} = {DDECAF97-4047-49A2-A31C-9A5CF04A4CC0} EndGlobalSection diff --git a/DISMTools.vbproj b/DISMTools.vbproj index 08632620d..68095c4cb 100644 --- a/DISMTools.vbproj +++ b/DISMTools.vbproj @@ -84,10 +84,13 @@ packages\ini-parser.2.5.2\lib\net20\INIFileParser.dll - packages\Markdig.1.3.1\lib\net462\Markdig.dll + packages\Markdig.1.3.2\lib\net462\Markdig.dll + + + packages\Microsoft.Bcl.AsyncInterfaces.10.0.9\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll - packages\Microsoft.Dism.6.0.0\lib\net472\Microsoft.Dism.dll + packages\Microsoft.Dism.6.1.0\lib\net472\Microsoft.Dism.dll packages\WindowsAPICodePack.8.0.15.2\lib\net48\Microsoft.WindowsAPICodePack.dll @@ -144,6 +147,9 @@ True True + + packages\System.IO.Pipelines.10.0.9\lib\net462\System.IO.Pipelines.dll + True @@ -193,6 +199,20 @@ True + + packages\System.Text.Encodings.Web.10.0.9\lib\net462\System.Text.Encodings.Web.dll + + + packages\System.Text.Json.10.0.9\lib\net462\System.Text.Json.dll + + + packages\System.Threading.Tasks.Extensions.4.6.3\lib\net462\System.Threading.Tasks.Extensions.dll + + + packages\System.ValueTuple.4.6.2\lib\net462\System.ValueTuple.dll + True + True + True @@ -227,6 +247,7 @@ + ADDSJoinDialog.vb @@ -254,6 +275,7 @@ + @@ -278,6 +300,8 @@ + + @@ -315,6 +339,18 @@ Settings.settings True + + LockVolumeDialog.vb + + + Form + + + UnlockVolumeDialog.vb + + + Form + AddListEntryDlg.vb @@ -424,6 +460,12 @@ Form + + AppxFilterAssistantDialog.vb + + + Form + CapabilityFilterAssistantDialog.vb @@ -1005,7 +1047,8 @@ - + + @@ -1045,6 +1088,12 @@ My.Resources Designer + + LockVolumeDialog.vb + + + UnlockVolumeDialog.vb + AddListEntryDlg.vb @@ -1099,6 +1148,9 @@ GetFeatureInfo.vb + + AppxFilterAssistantDialog.vb + CapabilityFilterAssistantDialog.vb @@ -1409,13 +1461,21 @@ + + + + + + + + @@ -1573,6 +1633,24 @@ Designer + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + Always @@ -2171,7 +2249,7 @@ - + @@ -2186,10 +2264,16 @@ false + + + {4f91e8cd-220b-4882-9228-b30b7f32c4a9} + BDELib + + SET DELETELOGDIR="Yes" -SET ISPREVIEW="No" +SET ISPREVIEW="Yes" SET GEN_INSTALLER="Yes" SET COPY_DOCS="Yes" SET CREATE_SAMPLE_USERDATA="Yes" @@ -2290,6 +2374,12 @@ IF EXIST "$(SolutionDir)Helpers\extps1\PE_Helper\tools\PEHelperMainMenu\out\*.ex xcopy "$(SolutionDir)Helpers\extps1\PE_Helper\tools\PEHelperMainMenu\out\*.*" "bin\extps1\PE_Helper\tools\MainMenu" /CEHYI ) +:: Copy BDE-GUI utilities +IF EXIST "$(SolutionDir)Helpers\extps1\PE_Helper\tools\BDE-GUI" ( + MD "bin\extps1\PE_Helper\tools\BDE-GUI" + FOR %25%25A IN (ps1 bat cmd png) DO xcopy "$(SolutionDir)Helpers\extps1\PE_Helper\tools\BDE-GUI\*.%25%25A" "bin\extps1\PE_Helper\tools\BDE-GUI" /CEHYI +) + :: Copy Tour IF EXIST "$(SolutionDir)tour" ( xcopy "$(SolutionDir)tour\*.*" "$(TargetDir)docs\tour" /cehyi @@ -2325,7 +2415,7 @@ IF %25COPY_DOCS%25=="Yes" ( IF %25CREATE_SAMPLE_USERDATA%25=="Yes" ( echo Creating sample userdata structure... IF NOT EXIST "userdata" (md "userdata") - FOR %25%25A IN (dtpe_backgrounds themes starter_scripts) DO ( + FOR %25%25A IN (dtpe_backgrounds themes starter_scripts sse_config_rules) DO ( IF NOT EXIST "userdata\%25%25A" (md "userdata\%25%25A") ) ) @@ -2402,4 +2492,4 @@ IF EXIST "report.html" (del "report.html") - \ No newline at end of file + diff --git a/Elements/AutoUnattend/ActiveDirectory/ADDSJoinDialog.vb b/Elements/AutoUnattend/ActiveDirectory/ADDSJoinDialog.vb index fbc383eff..16cc3ccb4 100644 --- a/Elements/AutoUnattend/ActiveDirectory/ADDSJoinDialog.vb +++ b/Elements/AutoUnattend/ActiveDirectory/ADDSJoinDialog.vb @@ -1,4 +1,4 @@ -Imports System.Threading +Imports System.Threading Imports System.Net.NetworkInformation Imports Microsoft.VisualBasic.ControlChars Imports System.Text.RegularExpressions @@ -261,7 +261,7 @@ Public Class ADDSJoinDialog CurrentWizardPage = NewPage Back_Button.Enabled = Not (NewPage = WizardPage.DnsConfigPage) - Next_Button.Text = If(NewPage = WizardPage.DsConfigPage, "Finish", "Next") + Next_Button.Text = If(NewPage = WizardPage.DsConfigPage, LocalizationService.ForSection("ADDSJoinDialog.ChangePage")("Finish.Label"), LocalizationService.ForSection("ADDSJoinDialog.ChangePage")("Next.Button")) DNS_Explanation_Link.Visible = (NewPage = WizardPage.DnsConfigPage) End Sub @@ -272,44 +272,43 @@ Public Class ADDSJoinDialog Select Case page Case WizardPage.DnsConfigPage If TextBox1.Text = "" Then - MsgBox("A primary domain suffix must be provided for DNS", vbOKOnly + vbCritical) + MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("PrimarySuffix.Required"), vbOKOnly + vbCritical) Return False End If If dnsAliasName = "" Then - MsgBox("An interface alias must be provided for DNS. These are the names of the network adapters installed on your system", vbOKOnly + vbCritical) + MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("InterfaceAlias.Message"), vbOKOnly + vbCritical) Return False End If If RichTextBox1.Text = "" Then - MsgBox("No DNS server addresses have been provided", vbOKOnly + vbCritical) + MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("No.DNSServer.None.Label"), vbOKOnly + vbCritical) Return False End If Case WizardPage.DsConfigPage If TextBox4.Text = "" Then - MsgBox("A domain name must be specified", vbOKOnly + vbCritical) + MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("DomainName.Label"), vbOKOnly + vbCritical) Return False End If If initialUserName = "" Then - MsgBox("A user name must be specified", vbOKOnly + vbCritical) + MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("User.Name.Label"), vbOKOnly + vbCritical) Return False End If If TextBox6.Text = "" Then Try If DomainServicesModule.DSAccountRequiresPassword(dsDomainName, initialUserName) Then - MsgBox(String.Format("A password for the specified user, {0}{1}{0}, must be specified as per security policies imposed by the domain controller.", Quote, initialUserName), vbOKOnly + vbCritical) + MsgBox(LocalizationService.ForSection("DomainJoin.Messages").Format("Password.User.Message", initialUserName), vbOKOnly + vbCritical) Return False End If Catch ex As Exception - MsgBox(String.Format("A password for the specified user, {0}{1}{0}, must be specified as per security policies imposed by the domain controller.", Quote, initialUserName), vbOKOnly + vbCritical) + MsgBox(LocalizationService.ForSection("DomainJoin.Messages").Format("Password.User.Message", initialUserName), vbOKOnly + vbCritical) Return False End Try End If If dsIsInDomain AndAlso Not DomainServicesModule.DSAccountExists(dsDomainName, initialUserName) Then - If MsgBox(String.Format("The specified user, {1}, does not appear to exist in the provided domain. You may not be able to sign in with this user unless you create it first.{0}{0}" & - "Do you want to continue?", Environment.NewLine, initialUserName), vbYesNo + vbExclamation, Text) = MsgBoxResult.No Then + If MsgBox(LocalizationService.ForSection("DomainJoin.Messages").Format("User.Appear.Exist.Message", initialUserName), vbYesNo + vbExclamation, Text) = MsgBoxResult.No Then Return False End If End If - Return MsgBox("Please verify the information that you typed. If you incorrectly typed a field, the client device may not join the domain." & CrLf & CrLf & "The client device will also not join the domain if it will run home editions of Windows." & CrLf & CrLf & "Are you sure that these settings are correct?", vbYesNo + vbQuestion, "Verify Settings") = MsgBoxResult.Yes + Return MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("Verify.Typed.Message"), vbYesNo + vbQuestion, LocalizationService.ForSection("DomainJoin.Messages")("VerifySettings.Title")) = MsgBoxResult.Yes End Select Return True End Function @@ -327,11 +326,11 @@ Public Class ADDSJoinDialog dsInfo = New DomainInformation(TextBox4.Text, initialUserName, TextBox6.Text) End If If ApplyDsSettings() Then - MsgBox("Domain settings were added successfully to the answer file. You can further modify these components in the System components section.") + MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("Domain.Settings.Message")) SetDefaultSettings() Close() Else - MsgBox("Could not add domain settings.") + MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("Add.Domain.Settings.Label")) End If Else ChangePage(CurrentWizardPage + 1) @@ -409,8 +408,7 @@ Public Class ADDSJoinDialog End Sub Private Sub DNS_Explanation_Link_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles DNS_Explanation_Link.LinkClicked - MsgBox("DNS (short for Domain Name System) is a server role that automatically translates IP addresses to human-readable names." & CrLf & CrLf & - "When you use this wizard, DISMTools assumes that either you or your system administrator have set up DNS on your network. If not, cancel this wizard and set it up.", + MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("Dnsshort.DomainName.Message"), vbOKOnly + vbInformation) End Sub @@ -472,7 +470,7 @@ Public Class ADDSJoinDialog LinkLocalIPv6Addresses += 1 ElseIf Regex.IsMatch(dnsAddress, "^fec.*") Then ' Site-Local pattern. Invalid address in the program's perspective, and as per RFC 3879: https://datatracker.ietf.org/doc/html/rfc3879 DynaLog.LogMessage("Address Type: Site-Local. For compatibility reasons, it will be treated as invalid") - InvalidAddressList.Add(String.Format("- {0} -- Site-Local Address; it is no longer in use", dnsAddress)) + InvalidAddressList.Add(LocalizationService.ForSection("DomainJoin.DNS").Format("Site.Local.Address.Label", dnsAddress)) InvalidAddresses += 1 ElseIf Regex.IsMatch(dnsAddress, "^f(c|d).*") Then ' Unique Local address pattern. It's our Site-Local replacement as per RFC 4193: https://datatracker.ietf.org/doc/html/rfc4193 ' It can be either fc or fd depending on whether the prefix is locally assigned @@ -485,7 +483,7 @@ Public Class ADDSJoinDialog Else DynaLog.LogMessage("This is an unrecognized address") InvalidAddresses += 1 - InvalidAddressList.Add(String.Format("- {0} -- Malformed Address", dnsAddress)) + InvalidAddressList.Add(LocalizationService.ForSection("DomainJoin.DNS").Format("MalformedAddress.Label", dnsAddress)) End If current += 1 Next @@ -493,26 +491,11 @@ Public Class ADDSJoinDialog ValidToInvalidAddressRatio = Math.Round(((IPv4Addresses + GlobalIPv6Addresses + LinkLocalIPv6Addresses + UniqueLocalIPv6Addresses) / total) * 100, 2) ' Now let's report our info to the user - dnsAddressValidationInfo = String.Format("Address Syntax Validation Results:" & CrLf & - "- Invalid Addresses: {0}" & CrLf & - "- IPv4 Addresses: {1}" & CrLf & - "- Global IPv6 Addresses: {2}" & CrLf & - "- Link-Local IPv6 Addresses: {3}" & CrLf & - "- Unique Local IPv6 Addresses: {4}" & CrLf & CrLf & - "- Valid/Invalid Address Ratio: {5}%" & CrLf & - "{6}" & CrLf & - "These addresses will be configured in the unattended answer file.", - InvalidAddresses, - IPv4Addresses, - GlobalIPv6Addresses, - LinkLocalIPv6Addresses, - UniqueLocalIPv6Addresses, - ValidToInvalidAddressRatio, - If(InvalidAddresses > 0, - CrLf & "Some addresses are invalid. Here's why: " & CrLf & CrLf & String.Join(CrLf, InvalidAddressList) & CrLf, + dnsAddressValidationInfo = LocalizationService.ForSection("DomainJoin.DNS").Format("AddressSyntax.Message", InvalidAddresses, IPv4Addresses, GlobalIPv6Addresses, LinkLocalIPv6Addresses, UniqueLocalIPv6Addresses, ValidToInvalidAddressRatio, If(InvalidAddresses > 0, + LocalizationService.ForSection("DomainJoin.DNS").Format("InvalidAddresses.Label", String.Join(CrLf, InvalidAddressList)), "")) - Throw New Exception("The verification has finished." & CrLf & CrLf & dnsAddressValidationInfo) + Throw New Exception(LocalizationService.ForSection("DomainJoin.DNS").Format("Verification.Done.Message", dnsAddressValidationInfo)) End Sub Private Sub DnsValidatorBW_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles DnsValidatorBW.ProgressChanged @@ -523,9 +506,9 @@ Public Class ADDSJoinDialog ProgressReporter.Hide() If e.Error IsNot Nothing Then MessageBox.Show(e.Error.Message, - "DNS Address Validation Results", + LocalizationService.ForSection("DomainJoin.DNS")("AddressValidation.Title"), MessageBoxButtons.OK, - If(e.Error.Message.StartsWith("The verification has finished."), MessageBoxIcon.Information, MessageBoxIcon.Error)) + If(e.Error.Message.StartsWith(LocalizationService.ForSection("DomainJoin.DNS")("Verification.Done.Label")), MessageBoxIcon.Information, MessageBoxIcon.Error)) End If DnsSyntaxCheckerBtn.Enabled = True End Sub @@ -564,7 +547,7 @@ Public Class ADDSJoinDialog initialUserName = referenceUser.SamAccountName If Not DomainServicesModule.DSAccountIsEnabled(dsDomainName, referenceUser.SamAccountName) Then - MsgBox("The selected user is not enabled in the domain. The user will not be able to sign into target devices unless it's re-enabled.", vbOKOnly + vbExclamation, "Account Disabled") + MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("UserDisabled.Message"), vbOKOnly + vbExclamation, LocalizationService.ForSection("DomainJoin.Messages")("AccountDisabled.Title")) End If End Sub @@ -574,7 +557,7 @@ Public Class ADDSJoinDialog Private Sub DsAccountObjectPickerBtn_Click(sender As Object, e As EventArgs) Handles DsAccountObjectPickerBtn.Click If Not dsIsInDomain Then - MessageBox.Show("This computer does not belong to a domain.", Text, MessageBoxButtons.OK, MessageBoxIcon.Stop) + MessageBox.Show(LocalizationService.ForSection("DomainJoin.Messages")("Computer.Belong.Domain.Label"), Text, MessageBoxButtons.OK, MessageBoxIcon.Stop) Exit Sub End If Dim dsaPicker As New DirectoryObjectPickerDialog() With { @@ -635,7 +618,7 @@ Public Class ADDSJoinDialog Private Sub DnsResolutionTSMI_Click(sender As Object, e As EventArgs) Handles DnsResolutionTSMI.Click If String.IsNullOrEmpty(TextBox1.Text) OrElse String.IsNullOrWhiteSpace(TextBox1.Text) Then - MsgBox("Please provide a domain for which to test domain name resolution.", vbOKOnly + vbExclamation, Text) + MsgBox(LocalizationService.ForSection("DomainJoin.Messages")("Provide.Domain.Label"), vbOKOnly + vbExclamation, Text) Exit Sub End If @@ -665,7 +648,7 @@ Public Class ADDSJoinDialog nslookupOut = nslookupProc.StandardOutput.ReadToEnd() & nslookupProc.StandardError.ReadToEnd() nslookupProc.WaitForExit() Cursor = Cursors.Arrow - MsgBox(String.Format("NSLOOKUP output:{0}{0}{1}", Environment.NewLine, nslookupOut), vbOKOnly + vbInformation, "Domain name resolution results") + MsgBox(LocalizationService.ForSection("DomainJoin.Messages").Format("Nslookupoutput.Label", nslookupOut), vbOKOnly + vbInformation, LocalizationService.ForSection("DomainJoin.Messages")("DomainResolution.Title")) End Sub Private Sub DnsZoneTSMI_Click(sender As Object, e As EventArgs) Handles DnsZoneTSMI.Click diff --git a/Elements/AutoUnattend/ActiveDirectory/DnsZoneChooserDialog.vb b/Elements/AutoUnattend/ActiveDirectory/DnsZoneChooserDialog.vb index 7dc7cdade..3542673ea 100644 --- a/Elements/AutoUnattend/ActiveDirectory/DnsZoneChooserDialog.vb +++ b/Elements/AutoUnattend/ActiveDirectory/DnsZoneChooserDialog.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Public Class DnsZoneChooserDialog @@ -6,11 +6,11 @@ Public Class DnsZoneChooserDialog Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click If SelectedDnsZone = "" Then - MessageBox.Show("Please select a DNS zone and try again.", Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + MessageBox.Show(LocalizationService.ForSection("ActiveDirectory.DnsZone")("SelectZone.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If If IsDnsZoneShutdown(SelectedDnsZone) Then - MessageBox.Show("The selected DNS zone is no longer active because of either an expiration or a shut down. Choose another zone and try again.", Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + MessageBox.Show(LocalizationService.ForSection("ActiveDirectory.DnsZone")("Selected.Too.Long.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If Me.DialogResult = System.Windows.Forms.DialogResult.OK @@ -75,7 +75,7 @@ Public Class DnsZoneChooserDialog String.Format("{0} ({1} Lookup)", GetDnsZoneTypeString(DnsZoneProperties("ZoneType")), If(DnsZoneProperties("Reverse"), "Reverse", "Forward"))})) Next Else - MessageBox.Show("DNS zones could not be obtained.", Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + MessageBox.Show(LocalizationService.ForSection("ActiveDirectory.DnsZone")("ZonesLoaded.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) Close() End If End Sub diff --git a/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Change PowerShell Execution Policy.dtss b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Change PowerShell Execution Policy.dtss index ffc1c60c3..59da69a94 100644 --- a/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Change PowerShell Execution Policy.dtss +++ b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Change PowerShell Execution Policy.dtss @@ -12,7 +12,7 @@ REM - RemoteSigned REM - Bypass REM - AllSigned REM Note that this will only take effect on Windows PowerShell (version 5.1, or the -REM built-in version of PowerShell), but not on the modern .NET-based PowerShell 7. +REM built-in version of PowerShell), but not on PowerShell 7. SET "_PWSHExecutionPolicy=Unrestricted" @@ -20,10 +20,13 @@ REM To learn more about PowerShell execution policies for any version of PowerSh REM (not just Windows PowerShell), refer to the following Help documentation page: REM https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-5.1 -REM Any value other than those defined above will still be set, but it will not be valid -REM for PowerShell. In that case, you can either run the script again as an administrator, -REM or run Set-ExecutionPolicy from within PowerShell as an administrator. +REM To configure policies at any time, run Set-ExecutionPolicy from within +REM PowerShell as an administrator. IF NOT DEFINED _PWSHExecutionPolicy SET "_PWSHExecutionPolicy=Unrestricted" -REG ADD "HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" /F /V "ExecutionPolicy" /T REG_SZ /D "%_PWSHExecutionPolicy%" \ No newline at end of file +FOR %%A IN (Unrestricted Undefined Restricted RemoteSigned Bypass AllSigned) DO ( + IF /I "%_PWSHExecutionPolicy%" == "%%A" ( + REG ADD "HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" /F /V "ExecutionPolicy" /T REG_SZ /D "%_PWSHExecutionPolicy%" + ) +) \ No newline at end of file diff --git a/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Configure Server Processor Scheduling.dtss b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Configure Server Processor Scheduling.dtss new file mode 100644 index 000000000..a0424fb6b --- /dev/null +++ b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Configure Server Processor Scheduling.dtss @@ -0,0 +1,23 @@ +Language: Batch +Name: Configure Windows Server processor scheduling +Description: This script allows you to configure how a server system allocates hardware resources +Customizable: Yes +@ECHO OFF + +REM This script allows you to configure processor scheduling on Windows Server systems +REM to prioritize either foreground applications or background services. + +REM Set the following variable to one of the following values: +REM - 0 -- foreground applications have the most priority +REM - 1 -- background services have the most priority (default on Server installations) +SET _ApplicationPriority=0 + +REM leave the rest of the script as is +IF NOT DEFINED _ApplicationPriority SET _ApplicationPriority=0 + +IF %_ApplicationPriority% LSS 0 SET _ApplicationPriority=0 +IF %_ApplicationPriority% GTR 1 SET _ApplicationPriority=1 + +REM for foreground apps, value is 38; for background svcs, value is 24 +IF %_ApplicationPriority% EQU 0 REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl" /F /V Win32PrioritySeparation /T REG_DWORD /D 38 +IF %_ApplicationPriority% EQU 1 REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl" /F /V Win32PrioritySeparation /T REG_DWORD /D 24 \ No newline at end of file diff --git a/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Control Terminal Services Settings.dtss b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Control Terminal Services Settings.dtss new file mode 100644 index 000000000..b0b92e8a0 --- /dev/null +++ b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Control Terminal Services Settings.dtss @@ -0,0 +1,51 @@ +Language: Batch +Name: Control Remote Desktop parameters +Description: This script allows you to pre-load configurations for Remote Desktop/Terminal Services sessions +Customizable: Yes +@ECHO OFF + +REM This script allows you to configure Remote Desktop settings for new systems, +REM based on the following settings: + +REM Determines whether to enable Remote Desktop: +REM - 1 -- Enabled +REM - 0 -- Disabled +SET _RdpEnabled=1 +REM Determines whether to enable Network Level Authentication for Remote Desktop +REM sessions: +REM - 1 -- Enabled +REM - 0 -- Disabled +REM Disable this only if you experience connection issues with the hosts you connect to +REM that are fixed by disabling Network Level Authentication. +SET _RDS_NLA=1 + +REM Keep in mind that, for Windows systems with cumulative updates from April 2026 +REM and later, you will see warnings if you connect to RDP files that either you or +REM a colleague or associate have made. If you rely on these connections and have +REM verified that they point to secure hosts, either use the "Disable warnings for +REM unsigned RDP files" Starter Script alongside this one, or sign your RDP files with +REM a self-signed certificate. Grab the RDP file signing script (RDPSIGN.ps1) from the +REM following site to get started with signing RDP files: +REM https://github.com/CodingWonders/MyScripts/blob/main/Windows/rdpsign.ps1 + +REM leave the rest of the script as is + +IF NOT DEFINED _RdpEnabled SET _RdpEnabled=1 +IF NOT DEFINED _RDS_NLA SET _RDS_NLA=1 + +IF %_RdpEnabled% LSS 0 SET _RdpEnabled=0 +IF %_RdpEnabled% GTR 1 SET _RdpEnabled=1 +IF %_RDS_NLA% LSS 0 SET _RDS_NLA=0 +IF %_RDS_NLA% GTR 1 SET _RDS_NLA=1 + +REG ADD "HKLM\System\CurrentControlSet\Control\Remote Assistance" /F /V fAllowToGetHelp /T REG_DWORD /D 0 + +REM Enable RDP +IF %_RdpEnabled% EQU 0 REG ADD "HKLM\System\CurrentControlSet\Control\Terminal Server" /F /V fDenyTSConnections /T REG_DWORD /D 1 +IF %_RdpEnabled% EQU 1 REG ADD "HKLM\System\CurrentControlSet\Control\Terminal Server" /F /V fDenyTSConnections /T REG_DWORD /D 0 + +REM Enable NLA +REG ADD "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /F /V UserAuthentication /T REG_DWORD /D %_RDS_NLA% + +REG ADD "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /F /V SecurityLayer /T REG_DWORD /D 2 +REG ADD "HKLM\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /F /V fAllowSecProtocolNegotiation /T REG_DWORD /D 1 diff --git a/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Disable Automatic BitLocker Encryption.dtss b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Disable Automatic BitLocker Encryption.dtss new file mode 100644 index 000000000..acb2e7f8f --- /dev/null +++ b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Disable Automatic BitLocker Encryption.dtss @@ -0,0 +1,6 @@ +Language: Batch +Name: Prevent Automatic BitLocker Drive Encryption +Description: This script disables automatic device encryption during system setup. +Customizable: No +@ECHO OFF +REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\BitLocker" /F /V PreventDeviceEncryption /T REG_DWORD /D 1 \ No newline at end of file diff --git a/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Disable Fast Startup.dtss b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Disable Fast Startup.dtss new file mode 100644 index 000000000..09e5f1268 --- /dev/null +++ b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Disable Fast Startup.dtss @@ -0,0 +1,6 @@ +Language: Batch +Name: Disable Fast Startup +Description: This script disables Fast Startup, which causes systems to never shut down fully when shutting them down. +Customizable: No +@ECHO OFF +REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /F /V HiberbootEnabled /T REG_DWORD /D 0 \ No newline at end of file diff --git a/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Disable Windows Plaform Binary Table.dtss b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Disable Windows Plaform Binary Table.dtss new file mode 100644 index 000000000..c754ef673 --- /dev/null +++ b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Disable Windows Plaform Binary Table.dtss @@ -0,0 +1,6 @@ +Language: Batch +Name: Disable Windows Platform Binary Table (WPBT) +Description: This script disables the Windows Platform Binary Table, which can be used by computer manufacturers to preload applications that you may not need. +Customizable: No +@ECHO OFF +REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager" /F /V DisableWpbtExecution /T REG_DWORD /D 1 \ No newline at end of file diff --git a/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Empty Start Menu Pins.dtss b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Empty Start Menu Pins.dtss new file mode 100644 index 000000000..4cbc8d166 --- /dev/null +++ b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Empty Start Menu Pins.dtss @@ -0,0 +1,10 @@ +Language: Batch +Name: Empty Start Menu Pins for Windows 11 +Description: This script clears start menu pins on Windows 11 systems. +Customizable: No +@ECHO OFF +REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f +REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_ProviderSet /t REG_DWORD /d 1 /f +REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\current\device\Start" /v ConfigureStartPins_WinningProvider /t REG_SZ /d B5292708-1619-419B-9923-E5D9F3925E71 /f +REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins /t REG_SZ /d "{ \"pinnedList\": [] }" /f +REG ADD "HKLM\SOFTWARE\Microsoft\PolicyManager\providers\B5292708-1619-419B-9923-E5D9F3925E71\default\Device\Start" /v ConfigureStartPins_LastWrite /t REG_DWORD /d 1 /f \ No newline at end of file diff --git a/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Prevent Installation of Expedited Device Applications.dtss b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Prevent Installation of Expedited Device Applications.dtss new file mode 100644 index 000000000..d02ce9718 --- /dev/null +++ b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Prevent Installation of Expedited Device Applications.dtss @@ -0,0 +1,16 @@ +Language: Batch +Name: Prevent Installation of Expedited Device Applications +Description: This script prevents installation of device companion software when plugging in a new device or receiving a new driver. +Customizable: No +@ECHO OFF +REM This script turns off the ability for the operating system to install +REM device companion software when plugging in a new device or when updating a driver +REM from Windows Update. For example, if you have a LG monitor, add this +REM script to prevent installation of LG software and promoted applications, such +REM as McAfee. + +REM Note that this will not prevent you from receiving hardware drivers; it will +REM only prevent installing manufacturer-provided applications that act as companions +REM to the device driver. + +REG ADD "HKLM\Software\Microsoft\Windows\CurrentVersion\Device Metadata" /F /V PreventDeviceMetadataFromNetwork /T REG_DWORD /D 1 \ No newline at end of file diff --git a/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Set a custom lock screen image.dtss b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Set a custom lock screen image.dtss new file mode 100644 index 000000000..53db27b7d --- /dev/null +++ b/Elements/AutoUnattend/StarterScripts/DuringSystemConfiguration/Set a custom lock screen image.dtss @@ -0,0 +1,14 @@ +Language: Batch +Name: Set a custom lock screen background +Description: This script configures a lock screen background in the target system environment. +Customizable: Yes +@ECHO OFF + +REM The variable below points to the path, relative to where the image is mounted at, +REM of the image to set as a lock screen background. It must be a JPG file; PNG files +REM are not supported. If the file does not exist in the target image, the lock screen +REM background will not be applied. + +SET "_LockScreenBackground=" + +IF EXIST "%_LockScreenBackground%" REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\PersonalizationCSP" /F /V LockScreenImagePath /T REG_SZ /D "%_LockScreenBackground%" \ No newline at end of file diff --git a/Elements/AutoUnattend/StarterScripts/StarterScriptLibraryItem.vb b/Elements/AutoUnattend/StarterScripts/StarterScriptLibraryItem.vb new file mode 100644 index 000000000..2363e7287 --- /dev/null +++ b/Elements/AutoUnattend/StarterScripts/StarterScriptLibraryItem.vb @@ -0,0 +1,15 @@ +Public Class StarterScriptLibraryItem + + Public Property Language As String + Public Property Name As String + Public Property Description As String + Public Property Customizable As Boolean + Public Property FileName As String + +End Class + +Public Class StarterScriptIndex + + Public Property scripts As List(Of StarterScriptLibraryItem) + +End Class diff --git a/Elements/AutoUnattend/StarterScripts/WhenFirstUserLogsOn/Set up a custom wallpaper.dtss b/Elements/AutoUnattend/StarterScripts/WhenFirstUserLogsOn/Set up a custom wallpaper.dtss index 3fa2c66f4..beece1ebb 100644 --- a/Elements/AutoUnattend/StarterScripts/WhenFirstUserLogsOn/Set up a custom wallpaper.dtss +++ b/Elements/AutoUnattend/StarterScripts/WhenFirstUserLogsOn/Set up a custom wallpaper.dtss @@ -13,6 +13,9 @@ Add-Type -Language CSharp -TypeDefinition @" } "@ +# Disable Windows Spotlight +reg add "HKCU\SOFTWARE\Policies\Microsoft\Windows\CloudContent" /F /V DisableWindowsSpotlightFeatures /T REG_DWORD /D 1 + $SPI_SETDESKWALLPAPER = 0x0014 # This sets the desktop wallpaper $SPIF_UPDATEINIFILE = 0x01 # This writes the change to the user profile $SPIF_SENDCHANGE = 0x02 # This broadcasts a WM_SETTINGCHANGE message diff --git a/Elements/AutoUnattend/StarterScripts/WhenUsersLogOnForFirstTime/Show Extensions for Known File Types.dtss b/Elements/AutoUnattend/StarterScripts/WhenUsersLogOnForFirstTime/Show Extensions for Known File Types.dtss index 8e5d52705..cf8c7c554 100644 --- a/Elements/AutoUnattend/StarterScripts/WhenUsersLogOnForFirstTime/Show Extensions for Known File Types.dtss +++ b/Elements/AutoUnattend/StarterScripts/WhenUsersLogOnForFirstTime/Show Extensions for Known File Types.dtss @@ -7,4 +7,4 @@ Customizable: No REM This script shows file extensions. This prevents cases where REM files have double extensions and can cause harm to a system. -reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /f /v HideFileExt /t REG_DWORD /d 0 /f \ No newline at end of file +reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /f /v HideFileExt /t REG_DWORD /d 0 \ No newline at end of file diff --git a/Elements/Contemporaneus/ImageAppxPackage.vb b/Elements/Contemporaneus/ImageAppxPackage.vb index 71711b826..b5ba53c95 100644 --- a/Elements/Contemporaneus/ImageAppxPackage.vb +++ b/Elements/Contemporaneus/ImageAppxPackage.vb @@ -1,4 +1,4 @@ -Imports Microsoft.Dism +Imports Microsoft.Dism Imports System.IO Namespace Elements.Contemporaneus @@ -31,63 +31,12 @@ Namespace Elements.Contemporaneus Return isRegistered End Function - Public Function GetLocalizedRegistrationStatus(MountDirectory As String, LangCode As Integer) As String - Dim registrationString As String = "" - + Public Function GetLocalizedRegistrationStatus(MountDirectory As String) As String If IsPackageRegistered(MountDirectory) Then - Select Case LangCode - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - registrationString = "Yes" - Case "ESN" - registrationString = "Sí" - Case "FRA" - registrationString = "Oui" - Case "PTB", "PTG" - registrationString = "Sim" - Case "ITA" - registrationString = "Sì" - End Select - Case 1 - registrationString = "Yes" - Case 2 - registrationString = "Sí" - Case 3 - registrationString = "Oui" - Case 4 - registrationString = "Sim" - Case 5 - registrationString = "Sì" - End Select - Else - Select Case LangCode - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - registrationString = "No" - Case "ESN" - registrationString = "No" - Case "FRA" - registrationString = "Non" - Case "PTB", "PTG" - registrationString = "Não" - Case "ITA" - registrationString = "No" - End Select - Case 1 - registrationString = "No" - Case 2 - registrationString = "No" - Case 3 - registrationString = "Non" - Case 4 - registrationString = "Não" - Case 5 - registrationString = "No" - End Select + Return LocalizationService.ForSection("ImageAppxPackage.RegStatus")("Yes.Button") End If - Return registrationString + + Return LocalizationService.ForSection("ImageAppxPackage.RegStatus")("No.Button") End Function End Class diff --git a/Elements/Contemporaneus/ImageDriver.vb b/Elements/Contemporaneus/ImageDriver.vb index 1c6e1eb7a..21e337220 100644 --- a/Elements/Contemporaneus/ImageDriver.vb +++ b/Elements/Contemporaneus/ImageDriver.vb @@ -21,68 +21,14 @@ End Sub ''' - ''' Gets a localized string displaying mount mode + ''' Gets the driver inbox state in the current application language. ''' - ''' The language code. 0 to automatically detect from system languages; 1-5 for independent languages - ''' The localized string - Public Function DriverInboxToString(LangCode As Integer) As String - Dim driverInboxString As String = "" - + Public Function DriverInboxToString() As String If DriverInbox Then - Select Case LangCode - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - driverInboxString = "Yes" - Case "ESN" - driverInboxString = "Sí" - Case "FRA" - driverInboxString = "Oui" - Case "PTB", "PTG" - driverInboxString = "Sim" - Case "ITA" - driverInboxString = "Sì" - End Select - Case 1 - driverInboxString = "Yes" - Case 2 - driverInboxString = "Sí" - Case 3 - driverInboxString = "Oui" - Case 4 - driverInboxString = "Sim" - Case 5 - driverInboxString = "Sì" - End Select - Else - Select Case LangCode - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - driverInboxString = "No" - Case "ESN" - driverInboxString = "No" - Case "FRA" - driverInboxString = "Non" - Case "PTB", "PTG" - driverInboxString = "Não" - Case "ITA" - driverInboxString = "No" - End Select - Case 1 - driverInboxString = "No" - Case 2 - driverInboxString = "No" - Case 3 - driverInboxString = "Non" - Case 4 - driverInboxString = "Não" - Case 5 - driverInboxString = "No" - End Select + Return LocalizationService.ForSection("ImageDriver.DriverInbox")("Yes.Button") End If - Return driverInboxString + Return LocalizationService.ForSection("ImageDriver.DriverInbox")("No.Button") End Function End Class diff --git a/Elements/Contemporaneus/WindowsImage.vb b/Elements/Contemporaneus/WindowsImage.vb index 542ed19ca..f7eb0926a 100644 --- a/Elements/Contemporaneus/WindowsImage.vb +++ b/Elements/Contemporaneus/WindowsImage.vb @@ -404,159 +404,33 @@ Namespace Elements.Contemporaneus ''' ''' Gets a localized string displaying mount status ''' - ''' The language code. 0 to automatically detect from system languages; 1-5 for independent languages ''' The localized string - Public Function MountStatusToString(LangCode As Integer) As String - Dim mountStatusString As String = "" - + Public Function MountStatusToString() As String Select Case ImageMountStatus Case DismMountStatus.Ok - Select Case LangCode - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - mountStatusString = "OK" - Case "ESN" - mountStatusString = "Correcto" - Case "FRA" - mountStatusString = "OK" - Case "PTB", "PTG" - mountStatusString = "OK" - Case "ITA" - mountStatusString = "OK" - End Select - Case 1 - mountStatusString = "OK" - Case 2 - mountStatusString = "Correcto" - Case 3 - mountStatusString = "OK" - Case 4 - mountStatusString = "OK" - Case 5 - mountStatusString = "OK" - End Select + Return LocalizationService.ForSection("WindowsImage.MountStatus")("Ok.Button") Case DismMountStatus.NeedsRemount - Select Case LangCode - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - mountStatusString = "Needs Remount" - Case "ESN" - mountStatusString = "Necesita recarga" - Case "FRA" - mountStatusString = "Nécessite un remontage" - Case "PTB", "PTG" - mountStatusString = "Necessita de remontagem" - Case "ITA" - mountStatusString = "Necessità di rimontaggio" - End Select - Case 1 - mountStatusString = "Needs Remount" - Case 2 - mountStatusString = "Necesita recarga" - Case 3 - mountStatusString = "Nécessite un remontage" - Case 4 - mountStatusString = "Necessita de remontagem" - Case 5 - mountStatusString = "Necessità di rimontaggio" - End Select + Return LocalizationService.ForSection("WindowsImage.MountStatus")("NeedsRemount.Label") Case DismMountStatus.Invalid - Select Case LangCode - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - mountStatusString = "Invalid" - Case "ESN" - mountStatusString = "Inválido" - Case "FRA" - mountStatusString = "Invalide" - Case "PTB", "PTG" - mountStatusString = "Inválido" - Case "ITA" - mountStatusString = "Non valido" - End Select - Case 1 - mountStatusString = "Invalid" - Case 2 - mountStatusString = "Inválido" - Case 3 - mountStatusString = "Invalide" - Case 4 - mountStatusString = "Inválido" - Case 5 - mountStatusString = "Non valido" - End Select + Return LocalizationService.ForSection("WindowsImage.MountStatus")("Invalid.Label") End Select - Return mountStatusString + Return "" End Function ''' ''' Gets a localized string displaying mount mode ''' - ''' The language code. 0 to automatically detect from system languages; 1-5 for independent languages ''' The localized string - Public Function MountModeToString(LangCode As Integer) As String - Dim mountModeString As String = "" - + Public Function MountModeToString() As String Select Case ImageMountMode Case DismMountMode.ReadWrite - Select Case LangCode - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - mountModeString = "Yes" - Case "ESN" - mountModeString = "Sí" - Case "FRA" - mountModeString = "Oui" - Case "PTB", "PTG" - mountModeString = "Sim" - Case "ITA" - mountModeString = "Sì" - End Select - Case 1 - mountModeString = "Yes" - Case 2 - mountModeString = "Sí" - Case 3 - mountModeString = "Oui" - Case 4 - mountModeString = "Sim" - Case 5 - mountModeString = "Sì" - End Select + Return LocalizationService.ForSection("WindowsImage.MountMode")("Yes.Button") Case DismMountMode.ReadOnly - Select Case LangCode - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - mountModeString = "No" - Case "ESN" - mountModeString = "No" - Case "FRA" - mountModeString = "Non" - Case "PTB", "PTG" - mountModeString = "Não" - Case "ITA" - mountModeString = "No" - End Select - Case 1 - mountModeString = "No" - Case 2 - mountModeString = "No" - Case 3 - mountModeString = "Non" - Case 4 - mountModeString = "Não" - Case 5 - mountModeString = "No" - End Select + Return LocalizationService.ForSection("WindowsImage.MountMode")("No.Button") End Select - Return mountModeString + Return "" End Function ''' diff --git a/Elements/EnvVarManagement/EnvironmentVariableHelper.vb b/Elements/EnvVarManagement/EnvironmentVariableHelper.vb index 2875efa20..9636cdbf6 100644 --- a/Elements/EnvVarManagement/EnvironmentVariableHelper.vb +++ b/Elements/EnvVarManagement/EnvironmentVariableHelper.vb @@ -1,4 +1,4 @@ -Imports System.IO +Imports System.IO Imports Microsoft.Win32 Imports Microsoft.VisualBasic.ControlChars @@ -102,9 +102,7 @@ Module EnvironmentVariableHelper If RegistryHelper.LoadRegistryHive(Path.Combine(MountPath, "Windows", "system32", "config", "SYSTEM"), "HKLM\zSYSTEM") = 0 Then ' Back up current system env vars If Not ExportCurrentEnvVarInformation(True) Then - If MsgBox("Current environment variable information for the system scope could not be backed up. Backups are used in case of a mistake during environment variable management. You may continue, but at your own risk." & CrLf & CrLf & - "Applications that rely on these variables may not work correctly, and you will not be able to use previous variable configuration, unless you had previously backed it up by yourself." & CrLf & CrLf & - "Do you want to continue without backing up current variable information?", vbYesNo + vbExclamation, "Environment variable information could not be backed up") = MsgBoxResult.No Then + If MsgBox(LocalizationService.ForSection("EnvVars.Helper")("CurrentInfo.Message"), vbYesNo + vbExclamation, LocalizationService.ForSection("EnvVars.Helper")("BackupSaved.Title")) = MsgBoxResult.No Then Return False End If End If @@ -138,9 +136,7 @@ Module EnvironmentVariableHelper If RegistryHelper.LoadRegistryHive(Path.Combine(MountPath, "Users", "Default", "NTUSER.DAT"), "HKLM\zDEFAULT") = 0 Then ' Back up current user env vars If Not ExportCurrentEnvVarInformation(False) Then - If MsgBox("Current environment variable information for the user scope could not be backed up. Backups are used in case of a mistake during environment variable management. You may continue, but at your own risk." & CrLf & CrLf & - "Applications that rely on these variables may not work correctly, and you will not be able to use previous variable configuration, unless you had previously backed it up by yourself." & CrLf & CrLf & - "Do you want to continue without backing up current variable information?", vbYesNo + vbExclamation, "Environment variable information could not be backed up") = MsgBoxResult.No Then + If MsgBox(LocalizationService.ForSection("EnvVars.Helper")("UserBackup.Message"), vbYesNo + vbExclamation, LocalizationService.ForSection("EnvVars.Helper")("BackupSaved.Title")) = MsgBoxResult.No Then Return False End If End If diff --git a/Elements/ISOCreation/IsoCreationJobManager.vb b/Elements/ISOCreation/IsoCreationJobManager.vb new file mode 100644 index 000000000..5e9644d52 --- /dev/null +++ b/Elements/ISOCreation/IsoCreationJobManager.vb @@ -0,0 +1,204 @@ +Imports System.Collections.Concurrent +Imports System.Threading.Tasks + +Namespace Elements.ISOCreation + + Public Class IsoCreationJobManager + + Private ReadOnly _jobQueue As New ConcurrentQueue(Of KeyValuePair(Of Integer, IsoCreationTask)) + + Public ReadOnly Property JobQueue As List(Of KeyValuePair(Of Integer, IsoCreationTask)) + Get + Return _jobQueue.ToList() + End Get + End Property + + Private ReadOnly _activeTasks As New Dictionary(Of Integer, IsoCreationTask) + + Public ReadOnly Property ActiveTasks As List(Of KeyValuePair(Of Integer, IsoCreationTask)) + Get + SyncLock _syncLock + Return _activeTasks.ToList() + End SyncLock + End Get + End Property + + Private ReadOnly _jobStatuses As New ConcurrentDictionary(Of Integer, JobStatus) + Private ReadOnly _jobMetadata As New ConcurrentDictionary(Of Integer, JobMetadata) + Private ReadOnly _maxConcurrentTasks As Integer + Private _nextJobId As Integer = 0 + Private _isProcessing As Boolean = False + Private ReadOnly _syncLock As New Object() + + Public Event JobStatusChanged(jobId As Integer, status As JobStatus) + Public Event JobProgressChanged(jobId As Integer, isRunning As Boolean) + + Public Sub New(Optional maxConcurrentTasks As Integer = 2) + _maxConcurrentTasks = If(maxConcurrentTasks > 0, maxConcurrentTasks, 2) + End Sub + + ''' + ''' Queues an ISO creation task for execution. + ''' + Public Function QueueJob(sourceImage As String, destinationIso As String, architecture As IsoArchitecture, + unattendedFile As String, copyToVentoy As Boolean, useUEFICA2023 As Boolean, + includeSystemDrivers As Boolean) As Integer + + Dim task As New IsoCreationTask(sourceImage, destinationIso, architecture, unattendedFile, + copyToVentoy, useUEFICA2023, includeSystemDrivers) + + Dim jobId = System.Threading.Interlocked.Increment(_nextJobId) + + ' Queue the task with its jobId + _jobQueue.Enqueue(New KeyValuePair(Of Integer, IsoCreationTask)(jobId, task)) + + _jobStatuses.TryAdd(jobId, JobStatus.Queued) + + ' Store metadata for later retrieval + Dim metadata As New JobMetadata With { + .DestinationIsoFile = destinationIso, + .SourceImageFile = sourceImage, + .Architecture = architecture + } + _jobMetadata.TryAdd(jobId, metadata) + + RaiseEvent JobStatusChanged(jobId, JobStatus.Queued) + + ProcessQueue() + + Return jobId + End Function + + ''' + ''' Gets the status of a specific job. + ''' + Public Function GetJobStatus(jobId As Integer) As JobStatus + Dim status As JobStatus + If _jobStatuses.TryGetValue(jobId, status) Then + Return status + End If + Return JobStatus.Unknown + End Function + + ''' + ''' Gets metadata for a specific job. + ''' + Public Function GetJobMetadata(jobId As Integer) As JobMetadata + Dim metadata As JobMetadata = Nothing + If _jobMetadata.TryGetValue(jobId, metadata) Then + Return metadata + End If + Return Nothing + End Function + + ''' + ''' Gets the number of active tasks currently running. + ''' + Public Function GetActiveTaskCount() As Integer + SyncLock _syncLock + Return _activeTasks.Count + End SyncLock + End Function + + ''' + ''' Gets the number of queued tasks waiting to run. + ''' + Public Function GetQueuedTaskCount() As Integer + Return _jobQueue.Count + End Function + + ''' + ''' Processes the job queue by executing tasks up to the concurrent limit. + ''' + Private Async Sub ProcessQueue() + If _isProcessing Then + Exit Sub + End If + + _isProcessing = True + + Try + Await ProcessQueueAsync() + Finally + _isProcessing = False + End Try + End Sub + + ''' + ''' Asynchronously processes the job queue. + ''' + Private Async Function ProcessQueueAsync() As Task + Try + While _jobQueue.Count > 0 OrElse GetActiveTaskCount() > 0 + ' Start new jobs if under the concurrent limit + Dim jobItem As KeyValuePair(Of Integer, IsoCreationTask) = Nothing + While GetActiveTaskCount() < _maxConcurrentTasks AndAlso _jobQueue.TryDequeue(jobItem) + Dim jobId = jobItem.Key + Dim creationTask = jobItem.Value + + SyncLock _syncLock + _activeTasks.Add(jobId, creationTask) + End SyncLock + + _jobStatuses(jobId) = JobStatus.Running + RaiseEvent JobStatusChanged(jobId, JobStatus.Running) + RaiseEvent JobProgressChanged(jobId, True) + + Dim unused = Task.Run(Function() ExecuteJobAsync(jobId, creationTask)) + End While + + ' Wait a bit before checking again + Await Task.Delay(100) + End While + Catch ex As Exception + DynaLog.LogMessage("Error in ProcessQueueAsync: " & ex.Message) + End Try + End Function + + ''' + ''' Executes a single ISO creation task. + ''' + Private Async Function ExecuteJobAsync(jobId As Integer, task As IsoCreationTask) As Task + Try + Dim result = Await task.StartTaskAsync() + _jobStatuses(jobId) = If(result, JobStatus.Completed, JobStatus.Failed) + Catch ex As Exception + _jobStatuses(jobId) = JobStatus.Failed + Finally + SyncLock _syncLock + _activeTasks.Remove(jobId) + End SyncLock + + RaiseEvent JobStatusChanged(jobId, _jobStatuses(jobId)) + RaiseEvent JobProgressChanged(jobId, False) + + ' Continue processing if there are more jobs + If _jobQueue.Count > 0 OrElse GetActiveTaskCount() > 0 Then + ProcessQueue() + End If + End Try + End Function + + End Class + + ''' + ''' Enumeration of possible job statuses. + ''' + Public Enum JobStatus + Unknown = 0 + Queued = 1 + Running = 2 + Completed = 3 + Failed = 4 + End Enum + + ''' + ''' Stores metadata about an ISO creation job. + ''' + Public Class JobMetadata + Public Property DestinationIsoFile As String + Public Property SourceImageFile As String + Public Property Architecture As IsoArchitecture + End Class + +End Namespace diff --git a/Elements/ISOCreation/IsoCreationTask.vb b/Elements/ISOCreation/IsoCreationTask.vb new file mode 100644 index 000000000..aaeba3bee --- /dev/null +++ b/Elements/ISOCreation/IsoCreationTask.vb @@ -0,0 +1,84 @@ +Imports System.IO +Imports System.Threading.Tasks + +Namespace Elements.ISOCreation + + Public Class IsoCreationTask + + Public Property SourceImageFile As String + Public Property DestinationIsoFile As String + Public Property DestinationIsoArchitecture As IsoArchitecture + + Private ReadOnly Property IsoArchitectureString As String + Get + Select Case DestinationIsoArchitecture + Case IsoArchitecture.X86 : Return "x86" + Case IsoArchitecture.AMD64 : Return "amd64" + Case IsoArchitecture.ARM64 : Return "arm64" + Case Else : Return "" + End Select + End Get + End Property + + Public Property UnattendedAnswerFile As String + Public Property CopyToVentoy As Boolean + Public Property UseUEFICA2023Binaries As Boolean + Public Property IncludeSystemDrivers As Boolean + + Public Sub New(SourceImage As String, DestinationIso As String, Architecture As IsoArchitecture) + SourceImageFile = SourceImage + DestinationIsoFile = DestinationIso + DestinationIsoArchitecture = Architecture + UnattendedAnswerFile = "" + CopyToVentoy = False + UseUEFICA2023Binaries = False + IncludeSystemDrivers = False + End Sub + + Public Sub New(SourceImage As String, DestinationIso As String, Architecture As IsoArchitecture, AnswerFile As String, ToVentoyDrive As Boolean, UseUEFICA23BootBins As Boolean, IncludeSysDrivers As Boolean) + SourceImageFile = SourceImage + DestinationIsoFile = DestinationIso + DestinationIsoArchitecture = Architecture + UnattendedAnswerFile = AnswerFile + CopyToVentoy = ToVentoyDrive + UseUEFICA2023Binaries = UseUEFICA23BootBins + IncludeSystemDrivers = IncludeSysDrivers + End Sub + + Public Async Function StartTaskAsync() As Task(Of Boolean) + Dim PWSHPath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "system32", "WindowsPowerShell", "v1.0", "powershell.exe"), + PEHelperPath As String = Path.Combine(Application.StartupPath, "bin", "extps1", "PE_Helper"), + PEHelperScriptPath As String = Path.Combine(PEHelperPath, "PE_Helper.ps1") + + If Not File.Exists(PWSHPath) OrElse Not Directory.Exists(PEHelperPath) OrElse Not File.Exists(PEHelperScriptPath) Then Return False + + Dim ISOCreator As New Process() With { + .StartInfo = New ProcessStartInfo() With { + .FileName = PWSHPath, + .WorkingDirectory = PEHelperPath + } + } + + ISOCreator.StartInfo.Arguments = String.Format("-noprofile -nologo -executionpolicy unrestricted -file {0}{1}{0} -cmd StartPEGen -arch {2} -imgFile {0}{3}{0} -isoPath {0}{4}{0} -unattendFile {0}{5}{0}{6}{7}{8}", + Quote, PEHelperScriptPath, IsoArchitectureString, SourceImageFile, DestinationIsoFile, UnattendedAnswerFile, If(CopyToVentoy, " -copytoventoy", ""), If(UseUEFICA2023Binaries, " -bootex", ""), If(IncludeSystemDrivers, " -includeSysDrivers", "")) + + Dim ExitCode As Integer = 0 + + Await Task.Run(Sub() + ISOCreator.Start() + ISOCreator.WaitForExit() + ExitCode = ISOCreator.ExitCode + End Sub) + + Return ExitCode = 0 + End Function + + End Class + + Public Enum IsoArchitecture As Integer + X86 = 0 + AMD64 = 1 + ARM64 = 2 + End Enum + +End Namespace \ No newline at end of file diff --git a/Elements/ServiceManagement/WindowsServiceHelper.vb b/Elements/ServiceManagement/WindowsServiceHelper.vb index b7c75c854..b86853d34 100644 --- a/Elements/ServiceManagement/WindowsServiceHelper.vb +++ b/Elements/ServiceManagement/WindowsServiceHelper.vb @@ -1,4 +1,4 @@ -Imports Microsoft.VisualBasic.ControlChars +Imports Microsoft.VisualBasic.ControlChars Imports System.IO Imports Microsoft.Win32 Imports System.Runtime.InteropServices @@ -661,9 +661,7 @@ Module WindowsServiceHelper If Not ExportCurrentServiceInformation() Then ' Current service information could not be backed up. We'll ask the user ' if we can continue or not given the backup. - If MsgBox("Current service information could not be backed up. Backups are used in case of a mistake during service management. You may continue, but at your own risk." & CrLf & CrLf & - "The target image may not work correctly or at all after configuration, and you will not be able to recover it using previous service configuration, unless you had previously backed it up by yourself." & CrLf & CrLf & - "Do you want to continue without backing up current service information?", vbYesNo + vbExclamation, "Service information could not be backed up") = MsgBoxResult.No Then + If MsgBox(LocalizationService.ForSection("WindowsServices.Helper")("Service.Backed.Message"), vbYesNo + vbExclamation, LocalizationService.ForSection("WindowsServices.Helper")("Service.Backed.Up.Title")) = MsgBoxResult.No Then Return False End If End If diff --git a/Help/QuickHelpModule.vb b/Help/QuickHelpModule.vb index ff1467d96..e47593481 100644 --- a/Help/QuickHelpModule.vb +++ b/Help/QuickHelpModule.vb @@ -1,7 +1,7 @@ Module QuickHelpModule Public Sub ShowQuickHelp(QuickHelpMessage As String) - MessageBox.Show(QuickHelpMessage, "Quick Help", MessageBoxButtons.OK, MessageBoxIcon.Information) + MessageBox.Show(QuickHelpMessage, LocalizationService.ForSection("Help.QuickHelp")("QuickHelp.Message"), MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub End Module diff --git a/Helpers/dthelper.bat b/Helpers/dthelper.bat index dda24ca8c..8e30a274d 100644 --- a/Helpers/dthelper.bat +++ b/Helpers/dthelper.bat @@ -1,10 +1,10 @@ -:: DISMTools Helper Script - version 0.8 +:: DISMTools Helper Script - version 0.8.1 @echo off :init :: Set initial vars -set script_ver=v0.8 +set script_ver=v0.8.1 set outputmode=0 :: outputmode=0 (output to file) :: 1 (output to console) diff --git a/Helpers/extps1/PE_Helper/PE_Helper.ps1 b/Helpers/extps1/PE_Helper/PE_Helper.ps1 index 541969d60..124f4d13b 100644 --- a/Helpers/extps1/PE_Helper/PE_Helper.ps1 +++ b/Helpers/extps1/PE_Helper/PE_Helper.ps1 @@ -4,7 +4,7 @@ # .'^""""""^. # '^`'. '^"""""""^. # .^"""""`' .^"""""""^. --------------------------------------------------------- -# .^""""""` ^"""""""` | DISMTools 0.8 | +# .^""""""` ^"""""""` | DISMTools 0.8.1 | # ."""""""^. `""""""""' `,` | The connected place for Windows system administration | # '`""""""`. """""""""^ `,,," --------------------------------------------------------- # '^"""""`. ^""""""""""'. .`,,,,,^ | Preinstallation Environment (PE) helper | @@ -39,6 +39,8 @@ param ( [Parameter(ParameterSetName = 'StartPEGen', Position = 6)] [switch]$bootex, [Parameter(ParameterSetName = 'StartPEGen', Position = 7)] [switch]$includeSysDrivers, [Parameter(ParameterSetName = 'StartPEGen', Position = 8)] [string]$scratchPath = "", + [Parameter(ParameterSetName = 'StartPEGen', Position = 9)] [string]$languageCode = "en-US", + [Parameter(ParameterSetName = 'StartPEGen', Position = 10)] [string]$languageFile = "", [Parameter(ParameterSetName = 'StartDevelopment', Mandatory = $true, Position = 1)] [string]$testArch, [Parameter(ParameterSetName = 'StartDevelopment', Mandatory = $true, Position = 2)] [string]$targetPath ) @@ -87,6 +89,120 @@ if (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]: exit 1 } +function Export-PEHelperLocalization { + param ( + [Parameter(Mandatory = $true)] [string]$SourceFile, + [Parameter(Mandatory = $true)] [string]$DestinationDirectory, + [Parameter(Mandatory = $true)] [string]$CultureCode + ) + + if ([string]::IsNullOrWhiteSpace($SourceFile)) { + $currentDirectory = Get-Item -LiteralPath (Get-Location).Path + for ($depth = 0; $depth -le 8 -and $null -ne $currentDirectory; $depth++) { + $candidateDirectory = Join-Path $currentDirectory.FullName 'language' + if (Test-Path -LiteralPath $candidateDirectory -PathType Container) { + foreach ($candidateFile in Get-ChildItem -LiteralPath $candidateDirectory -Filter '*.ini' -File) { + $candidateLines = Get-Content -LiteralPath $candidateFile.FullName -Encoding UTF8 + $inMetadata = $false + foreach ($candidateLine in $candidateLines) { + $candidateText = $candidateLine.Trim() + if ($candidateText.StartsWith('[') -and $candidateText.EndsWith(']')) { + $inMetadata = $candidateText.Equals('[LanguageFileInformation]', [System.StringComparison]::OrdinalIgnoreCase) + continue + } + if ($inMetadata -and $candidateText.StartsWith('LanguageCode=', [System.StringComparison]::OrdinalIgnoreCase)) { + $candidateCode = $candidateText.Substring($candidateText.IndexOf('=') + 1).Trim().Trim('"') + if ($candidateCode.Equals($CultureCode, [System.StringComparison]::OrdinalIgnoreCase)) { + $SourceFile = $candidateFile.FullName + break + } + } + } + if (-not [string]::IsNullOrWhiteSpace($SourceFile)) { break } + } + } + if (-not [string]::IsNullOrWhiteSpace($SourceFile)) { break } + $currentDirectory = $currentDirectory.Parent + } + } + + if (-not (Test-Path -LiteralPath $SourceFile -PathType Leaf)) { + throw "The selected localization file does not exist for language '$CultureCode': $SourceFile" + } + + # Only strings read by autorun.exe are exported to the Windows installation ISO. + # The complete DISMTools language file is never copied into the image. + $requiredKeys = [ordered]@{ + 'PEHelper.Designer.Main' = @('Back.Button', 'Copy.Boot.Image.Link', 'Copy.Install.Image.Link', 'DISM.Tools.PE.Label', 'Exit.Button', 'Explore.Contents.Disc.Link', 'Install.Operating.Link', 'PE.Helper.Message', 'Prepare.System.Image.Link', 'Restart.Install.Media.Link', 'StartPXE.Label', 'StartPXE.Link', 'StartPXE.PXE.Windows.Link', 'StartPXE.PXEFOG.Link', 'WhatWant.Label') + 'PEHelper.Designer.ServerPort' = @('Cancel.Button', 'Check.Button', 'Components.Disc.Rely.Message', 'Default.Button', 'Ok.Button', 'Port.Server.Label', 'ServerComponents.Label') + 'PEHelper.Designer.Sysprep' = @('AutomaticMode.Link', 'Cancel.Link', 'CaptureImage.CheckBox', 'CopyRegistry.CheckBox', 'ManualMode.Link', 'PrepareCapture.Label', 'Responsibility.Message') + 'PEHelper.Designer.WDSArch' = @('Architecture.Label', 'Architecture.Label.Label', 'CancelButton.Button', 'Okbutton.Button') + 'PEHelper.Designer.WDSGroup' = @('Action.Choose.Label', 'Already.Exists.Label', 'Cancel.Button', 'CreateGroup.RadioButton', 'Ok.Button', 'Refresh.Button', 'SpecifyGroup.Button', 'Upload.RadioButton') + 'PEHelper.Main' = @('Back.Button', 'Copy.Boot.Image.Link', 'Exit.Button', 'Explore.Contents.Disc.Link', 'Install.Operating.Link', 'Prepare.System.Image.Link', 'Restart.Install.Media.Link', 'StartServer.Fog.Link', 'StartServer.Label', 'StartServer.Network.Link', 'StartServer.Wds.Link', 'WhatWant.Label') + 'PEHelper.Restart' = @('Warning.Message') + 'PEHelper.Process' = @('ExitCode.Message') + 'PEHelper.PXE' = @('ChangePort.Tooltip') + 'PEHelper.ServerPort' = @('Already.Message', 'InvalidPort.Message') + 'PEHelper.WDSImageGroup' = @('Action.Choose.Label', 'Already.Exists.Label', 'Cancel.Button', 'CreateFailed.Message', 'CreateGroup.RadioButton', 'LoadFailed.Message', 'Ok.Button', 'Refresh.Button', 'SpecifyGroup.Button', 'Upload.RadioButton') + 'PEHelper.Sysprep' = @('AutomaticMode.Link', 'Cancel.Link', 'CaptureImage.CheckBox', 'CopyRegistry.CheckBox', 'ManualMode.Link', 'Responsibility.Message') + } + + $sourceLines = Get-Content -LiteralPath $SourceFile -Encoding UTF8 + $metadataLines = New-Object System.Collections.Generic.List[string] + $sourceValues = @{} + $currentSection = '' + + foreach ($sourceLine in $sourceLines) { + $trimmedLine = $sourceLine.Trim() + if ($trimmedLine.StartsWith('[') -and $trimmedLine.EndsWith(']')) { + $currentSection = $trimmedLine.Substring(1, $trimmedLine.Length - 2).Trim() + continue + } + if ([string]::IsNullOrWhiteSpace($trimmedLine) -or $trimmedLine.StartsWith(';') -or $trimmedLine.StartsWith('#')) { continue } + $equalsIndex = $sourceLine.IndexOf('=') + if ($equalsIndex -le 0) { continue } + + $keyName = $sourceLine.Substring(0, $equalsIndex).Trim() + if ($currentSection.Equals('LanguageFileInformation', [System.StringComparison]::OrdinalIgnoreCase)) { + $metadataLines.Add($sourceLine) + } + $lookupKey = $currentSection + [char]0 + $keyName + $sourceValues[$lookupKey] = $sourceLine + } + + $metadataLookupKey = 'LanguageFileInformation' + [char]0 + 'LanguageCode' + if (-not $sourceValues.ContainsKey($metadataLookupKey)) { + throw "The localization file has no LanguageCode metadata: $SourceFile" + } + $metadataLine = [string]$sourceValues[$metadataLookupKey] + $metadataCode = $metadataLine.Substring($metadataLine.IndexOf('=') + 1).Trim().Trim('"') + if (-not $metadataCode.Equals($CultureCode, [System.StringComparison]::OrdinalIgnoreCase)) { + throw "The requested language '$CultureCode' does not match LanguageCode '$metadataCode' in $SourceFile" + } + + $outputLines = New-Object System.Collections.Generic.List[string] + $outputLines.Add('[LanguageFileInformation]') + foreach ($metadataEntry in $metadataLines) { $outputLines.Add($metadataEntry) } + + foreach ($sectionEntry in $requiredKeys.GetEnumerator()) { + $outputLines.Add('') + $outputLines.Add('[' + $sectionEntry.Key + ']') + foreach ($requiredKey in $sectionEntry.Value) { + $lookupKey = [string]$sectionEntry.Key + [char]0 + [string]$requiredKey + if (-not $sourceValues.ContainsKey($lookupKey)) { + throw "The localization file is missing the PE Helper key [$($sectionEntry.Key)] $requiredKey" + } + $outputLines.Add([string]$sourceValues[$lookupKey]) + } + } + + New-Item -Path $DestinationDirectory -ItemType Directory -Force | Out-Null + $safeCultureCode = $metadataCode -replace '[^A-Za-z0-9._-]', '_' + $destinationFile = Join-Path $DestinationDirectory ($safeCultureCode + '.ini') + $outputLines | Set-Content -LiteralPath $destinationFile -Encoding UTF8 -Force + Write-Host "PE Helper localization exported: $destinationFile" +} + function Get-KitsRoot { param ( [Parameter(Mandatory = $true, Position = 0)] [bool]$wow64environment @@ -139,7 +255,7 @@ function Start-PEGeneration #> $mountDirectory = "" $architecture = [PE_Arch]::($arch) - $version = "0.8" + $version = "0.8.1" Write-Host "DISMTools $version - Preinstallation Environment Helper" Write-Host "(c) 2024-2026. CodingWonders Software. Portions (c) CT Tech Group LLC; (c) JJ Fullmer" Write-Host "-----------------------------------------------------------" @@ -155,264 +271,276 @@ function Start-PEGeneration $expectedADKPath = "$($adkKitsRoot)Assessment and Deployment Kit" $expectedADKPath_WOW64Environ = "$($adkKitsRoot_WOW64Environ)Assessment and Deployment Kit" - if ((Test-KitsRootPaths -adkKitsRootPath "$expectedADKPath" -adkKitsRootPath_WOW64Environ "$expectedADKPath_WOW64Environ") -eq $true) + if (-not (Test-KitsRootPaths -adkKitsRootPath "$expectedADKPath" -adkKitsRootPath_WOW64Environ "$expectedADKPath_WOW64Environ")) { + Write-Host "A Windows Assessment and Deployment Kit (ADK) could not be found on your system. Please install the Windows ADK for Windows 10 (or Windows 11), and its Windows PE plugin, and try again." + Write-Host "`nPress ENTER to exit" + Read-Host | Out-Null + exit 1 + } + + $peToolsPath = "" + + if ($expectedADKPath -ne "Assessment and Deployment Kit") { $peToolsPath = $expectedADKPath } + if (($peToolsPath -eq "") -and ($expectedADKPath_WOW64Environ -ne "Assessment and Deployment Kit")) { $peToolsPath = $expectedADKPath_WOW64Environ } + + if (-not (Test-Path "$peToolsPath")) { + Write-Host "A Windows Assessment and Deployment Kit (ADK) could not be found on your system. Please install the Windows ADK for Windows 10 (or Windows 11), and its Windows PE plugin, and try again." + Write-Host "`nPress ENTER to exit" + Read-Host | Out-Null + exit 1 + } + + Write-Host "Using $peToolsPath as the Preinstallation Environment tools path..." + + $taskRootDir = "$($env:SYSTEMDRIVE)\ISOTASKS" + $taskId = [Random]::new().Next([int]::MaxValue) + $taskRoot = "$taskRootDir\PEHelperRun_$taskId" + + if (-not (Test-Path "$taskRootDir")) { + New-Item -Path "$taskRootDir" -ItemType Directory | Out-Null + } + + $defaultPolicyCopied = $false + $customPolicyCopied = $false + + if (Test-Path -Path "$((Get-Location).Path)\files\DefaultPolicy.reg" -PathType Leaf) { + Copy-Item -Path "$((Get-Location).Path)\files\DefaultPolicy.reg" -Destination "$taskRootDir\$($taskId)_DefaultPolicy.reg" -Force + $defaultPolicyCopied = $true + } + if (Test-Path -Path "$((Get-Location).Path)\files\CustomPolicy.reg" -PathType Leaf) { + Copy-Item -Path "$((Get-Location).Path)\files\CustomPolicy.reg" -Destination "$taskRootDir\$($taskId)_CustomPolicy.reg" -Force + $customPolicyCopied = $true + } + + # We don't create the actual task root path because copype will do it for us + + Write-Host "Creating working directory and copying Preinstallation Environment (PE) files..." + if ((Copy-PEFiles -peToolsPath "$peToolsPath\Windows Preinstallation Environment" -architecture $architecture -targetDir "$taskRoot") -eq $false) { - $peToolsPath = "" + Write-Host "Preinstallation Environment creation has failed in the PE file copy phase." + # Present possible reason as to why + Write-Host "`nMake sure that all of the required ADK components (Deployment Tools and the Windows PE add-on) are" + Write-Host "installed on your computer. Try uninstalling your existing ADK and letting DISMTools install the" + Write-Host "latest one for you. All of the pre-requisites will have been met." + Write-Host "`nPress ENTER to exit" + Read-Host | Out-Null + exit 1 + } - if ($expectedADKPath -ne "Assessment and Deployment Kit") { $peToolsPath = $expectedADKPath } - if (($peToolsPath -eq "") -and ($expectedADKPath_WOW64Environ -ne "Assessment and Deployment Kit")) { $peToolsPath = $expectedADKPath_WOW64Environ } + # We can now move the policy files to the actual task root + if ($defaultPolicyCopied) { + Move-Item -Path "$taskRootDir\$($taskId)_DefaultPolicy.reg" -Destination "$taskRoot\DefaultPolicy.reg" -Force + } + if ($customPolicyCopied) { + Move-Item -Path "$taskRootDir\$($taskId)_CustomPolicy.reg" -Destination "$taskRoot\CustomPolicy.reg" -Force + } - if (Test-Path "$peToolsPath") - { - Write-Host "Using $peToolsPath as the Preinstallation Environment tools path..." + Write-Host "Setting mount directory for operation..." + $mountDirectory = "$taskRoot\mount" - Write-Host "Creating working directory and copying Preinstallation Environment (PE) files..." - if ((Copy-PEFiles -peToolsPath "$peToolsPath\Windows Preinstallation Environment" -architecture $architecture -targetDir "$((Get-Location).Path)\ISOTEMP") -eq $false) - { - Write-Host "Preinstallation Environment creation has failed in the PE file copy phase." - # Present possible reason as to why - Write-Host "`nMake sure that all of the required ADK components (Deployment Tools and the Windows PE add-on) are" - Write-Host "installed on your computer. Try uninstalling your existing ADK and letting DISMTools install the" - Write-Host "latest one for you. All of the pre-requisites will have been met." - Write-Host "`nPress ENTER to exit" - Read-Host | Out-Null - exit 1 - } - Write-Host "Creating temporary mount directory..." - try - { - if (($scratchPath -ne "") -and (Test-Path "$scratchPath")) { - $mountDirectory = $scratchPath - } else { - $mountDirectory = "$tempDir\DISMTools_PE_Scratch_$((Get-Date).ToString("MM-dd-yyyy_HH-mm-ss"))_$(Get-Random -Maximum 10000)" - New-Item "$mountDirectory" -ItemType Directory | Out-Null - } - } - catch - { - Write-Host "Could not create temporary mount directory. Using default folder..." - $mountDirectory = "$((Get-Location).Path)\ISOTEMP\mount" - } - Write-Host "Mounting Windows image. Please wait..." - if ((Start-DismCommand -Verb Mount -ImagePath "$((Get-Location).Path)\ISOTEMP\media\sources\boot.wim" -ImageIndex 1 -MountPath "$mountDirectory") -eq $false) - { - Write-Host "Preinstallation Environment creation has failed in the PE image mount phase." - Write-Host "`nPress ENTER to exit" - Read-Host | Out-Null - exit 1 - } - if ((Test-Path "$((Get-Location).Path)\peUpdates") -and ((Get-ChildItem "$((Get-Location).Path)\peUpdates").Count -gt 0)) + Write-Host "Mounting Windows image. Please wait..." + if ((Start-DismCommand -Verb Mount -ImagePath "$taskRoot\media\sources\boot.wim" -ImageIndex 1 -MountPath "$mountDirectory") -eq $false) + { + Write-Host "Preinstallation Environment creation has failed in the PE image mount phase." + Write-Host "`nPress ENTER to exit" + Read-Host | Out-Null + exit 1 + } + if ((Test-Path "$((Get-Location).Path)\peUpdates") -and ((Get-ChildItem "$((Get-Location).Path)\peUpdates").Count -gt 0)) + { + Write-Host "Applying Windows PE updates..." + $updates = Get-ChildItem "$((Get-Location).Path)\peUpdates" + $successfulUpdates = 0 + $failedUpdates = 0 + if ($updates.Count -gt 0) + { + foreach ($update in $updates) { - Write-Host "Applying Windows PE updates..." - $updates = Get-ChildItem "$((Get-Location).Path)\peUpdates" - $successfulUpdates = 0 - $failedUpdates = 0 - if ($updates.Count -gt 0) + $curPkgIndex = $updates.IndexOf($update) + if (Test-Path "$update" -PathType Leaf) { - foreach ($update in $updates) + Write-Progress -Activity "Adding updates..." -Status "Adding package $($curPkgIndex + 1) of $($updates.Count)" -PercentComplete (($curPkgIndex / $updates.Count) * 100) + if ((Start-DismCommand -Verb Add-Package -ImagePath "$mountDirectory" -PackagePath "$update") -eq $true) { - $curPkgIndex = $updates.IndexOf($update) - if (Test-Path "$update" -PathType Leaf) - { - Write-Progress -Activity "Adding updates..." -Status "Adding package $($curPkgIndex + 1) of $($updates.Count)" -PercentComplete (($curPkgIndex / $updates.Count) * 100) - if ((Start-DismCommand -Verb Add-Package -ImagePath "$mountDirectory" -PackagePath "$update") -eq $true) - { - $successfulUpdates++ - } - else - { - $failedUpdates++ - } - } + $successfulUpdates++ + } + else + { + $failedUpdates++ } - Write-Progress -Activity "Adding updates..." -Completed - Write-Host "===================================================================" - Write-Host "Update installation summary:" - Write-Host "- Successful update installations: $successfulUpdates" - Write-Host "- Failed update installations: $failedUpdates" - Write-Host "===================================================================" - } - Write-Host "Saving changes..." - Start-DismCommand -Verb Commit -ImagePath "$mountDirectory" | Out-Null - } - Write-Host "Copying Windows PE optional components. Please wait..." - if ((Copy-PEComponents -peToolsPath "$peToolsPath\Windows Preinstallation Environment" -architecture $architecture -targetDir "$((Get-Location).Path)\ISOTEMP") -eq $false) - { - Write-Host "Preinstallation Environment creation has failed in the PE optional component copy phase." - Write-Host "`nPress ENTER to exit" - Read-Host | Out-Null - exit 1 - } - Write-Host "Adding OS packages..." - if ((Add-PEPackages -mountDirectory "$mountDirectory" -architecture $architecture) -eq $false) - { - Write-Host "Preinstallation Environment creation has failed in the PE package addition phase." - Write-Host "`nPress ENTER to exit" - Read-Host | Out-Null - exit 1 - } - Write-Host "Saving changes..." - Start-DismCommand -Verb Commit -ImagePath "$mountDirectory" | Out-Null - # Perform customization tasks later - Write-Host "Beginning customizations..." - if ((Start-PECustomization -ImagePath "$mountDirectory" -arch $architecture -testStartNet $false -includeSysDrivers $includeSysDrivers) -eq $false) - { - Write-Host "Preinstallation Environment creation has failed in the PE customization phase. Discarding changes..." - Start-DismCommand -Verb Unmount -ImagePath "$mountDirectory" -Commit $false | Out-Null - Write-Host "`nPress ENTER to exit" - Read-Host | Out-Null - exit 1 - } - Write-Host "Unmounting image..." - Start-DismCommand -Verb Unmount -ImagePath "$mountDirectory" -Commit $true | Out-Null - Write-Host "PE generated successfully" - # Continue ISO customization - Write-Host "Copying image file. This can take some time..." - $totalTime = 0 - if (Test-Path "$imgFile" -PathType Leaf) - { - $totalTime = Measure-Command { Copy-Item -Path "$imgFile" -Destination "$((Get-Location).Path)\ISOTEMP\media\sources\install.wim" -Verbose -Force -Recurse -Container } - } - if ($?) - { - Write-Host "The image file has been copied successfully. Time taken: $($totalTime.Minutes) minutes, $($totalTime.Seconds) seconds" - } - else - { - Write-Host "The image file has not been copied successfully." - Write-Host "`nPress ENTER to exit" - Read-Host | Out-Null - exit 1 - } - Write-Host "Copying setup tools..." - Copy-Item -Path "$((Get-Location).Path)\PE_Helper.ps1" -Destination "$((Get-Location).Path)\ISOTEMP\media" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue - New-Item -Path "$((Get-Location).Path)\ISOTEMP\media\files\diskpart" -ItemType Directory | Out-Null - Copy-Item -Path "$((Get-Location).Path)\files\diskpart\*.dp" -Destination "$((Get-Location).Path)\ISOTEMP\media\files\diskpart" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue - New-Item -Path "$((Get-Location).Path)\ISOTEMP\media\pxehelpers" -ItemType Directory | Out-Null - Copy-Item -Path "$((Get-Location).Path)\pxehelpers\*" -Destination "$((Get-Location).Path)\ISOTEMP\media\pxehelpers" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue - Copy-Item -Path "$((Get-Location).Path)\files\README1ST.TXT" -Destination "$((Get-Location).Path)\ISOTEMP\media\README.TXT" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue - New-Item -Path "$((Get-Location).Path)\ISOTEMP\media\Tools\DIM" -ItemType Directory | Out-Null - Copy-Item -Path "$((Get-Location).Path)\tools\DIM\*" -Destination "$((Get-Location).Path)\ISOTEMP\media\Tools\DIM" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue - Copy-Item -Path "$((Get-Location).Path)\files\*.sh" -Destination "$((Get-Location).Path)\ISOTEMP\media" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue - Copy-Item -Path "$((Get-Location).Path)\files\boot_image_to_wds.bat" -Destination "$((Get-Location).Path)\ISOTEMP\media" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue - Copy-Item -Path "$((Get-Location).Path)\files\install_image_to_wds.ps1" -Destination "$((Get-Location).Path)\ISOTEMP\media" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue - if (($unattendFile -ne "") -and (Test-Path "$unattendFile" -PathType Leaf)) - { - Write-Host "Unattended answer file has been detected. Copying to ISO file..." - Copy-Item -Path "$unattendFile" -Destination "$((Get-Location).Path)\ISOTEMP\media\unattend.xml" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue - } - Write-Host "Deleting temporary files..." - Remove-Item -Path "$((Get-Location).Path)\ISOTEMP\OCs" -Recurse -Force -ErrorAction SilentlyContinue - if ($?) - { - Write-Host "Temporary files have been deleted successfully" - } - else - { - Write-Host "Temporary files haven't been deleted successfully" - } - # Detect if HotInstall is present in the working directory and copy it to the ISO file - if (Test-Path -Path "$((Get-Location).Path)\files\HotInstall.zip" -PathType Leaf) { - Write-Host "HotInstall has been detected. Adding to ISO file to allow installations from full Windows environments..." - Expand-Archive -Path "$((Get-Location).Path)\files\HotInstall.zip" -Destination "$((Get-Location).Path)\ISOTEMP\media" -Force -ErrorAction SilentlyContinue - if ($?) - { - Write-Host "HotInstall has been copied successfully." - } - else - { - Write-Host "HotInstall could not be copied." } } - # Detect if Sysprep Preparator is present in the working directory and copy it to the ISO file - if (Test-Path -Path "$((Get-Location).Path)\files\SysprepPreparator.zip" -PathType Leaf) { - Write-Host "Sysprep Preparation Tool has been detected. Adding to ISO file..." - New-Item -Path "$((Get-Location).Path)\ISOTEMP\media\Tools\SysprepPreparator" -ItemType Directory | Out-Null - Expand-Archive -Path "$((Get-Location).Path)\files\SysprepPreparator.zip" -Destination "$((Get-Location).Path)\ISOTEMP\media\Tools\SysprepPreparator" -Force -ErrorAction SilentlyContinue - } - if (Test-Path -Path "$((Get-Location).Path)\tools\MainMenu") { - Write-Host "The main menu has been detected. Adding to ISO file..." - Copy-Item -Path "$((Get-Location).Path)\tools\MainMenu\*.*" -Destination "$((Get-Location).Path)\ISOTEMP\media" -Force -Recurse -Verbose - $autorunContents = @' + Write-Progress -Activity "Adding updates..." -Completed + Write-Host "===================================================================" + Write-Host "Update installation summary:" + Write-Host "- Successful update installations: $successfulUpdates" + Write-Host "- Failed update installations: $failedUpdates" + Write-Host "===================================================================" + } + Write-Host "Saving changes..." + Start-DismCommand -Verb Commit -ImagePath "$mountDirectory" | Out-Null + } + Write-Host "Copying Windows PE optional components. Please wait..." + if ((Copy-PEComponents -peToolsPath "$peToolsPath\Windows Preinstallation Environment" -architecture $architecture -targetDir "$taskRoot") -eq $false) + { + Write-Host "Preinstallation Environment creation has failed in the PE optional component copy phase." + Write-Host "`nPress ENTER to exit" + Read-Host | Out-Null + exit 1 + } + Write-Host "Adding OS packages..." + if ((Add-PEPackages -taskRoot "$taskRoot" -mountDirectory "$mountDirectory" -architecture $architecture) -eq $false) + { + Write-Host "Preinstallation Environment creation has failed in the PE package addition phase." + Write-Host "`nPress ENTER to exit" + Read-Host | Out-Null + exit 1 + } + Write-Host "Saving changes..." + Start-DismCommand -Verb Commit -ImagePath "$mountDirectory" | Out-Null + # Perform customization tasks later + Write-Host "Beginning customizations..." + if ((Start-PECustomization -taskRoot "$taskRoot" -ImagePath "$mountDirectory" -arch $architecture -testStartNet $false -includeSysDrivers $includeSysDrivers) -eq $false) + { + Write-Host "Preinstallation Environment creation has failed in the PE customization phase. Discarding changes..." + Start-DismCommand -Verb Unmount -ImagePath "$mountDirectory" -Commit $false | Out-Null + Write-Host "`nPress ENTER to exit" + Read-Host | Out-Null + exit 1 + } + Write-Host "Unmounting image..." + Start-DismCommand -Verb Unmount -ImagePath "$mountDirectory" -Commit $true | Out-Null + Write-Host "PE generated successfully" + # Continue ISO customization + Write-Host "Copying image file. This can take some time..." + $totalTime = 0 + if (Test-Path "$imgFile" -PathType Leaf) + { + $totalTime = Measure-Command { Copy-Item -Path "$imgFile" -Destination "$taskRoot\media\sources\install.wim" -Verbose -Force -Recurse -Container } + } + if ($?) + { + Write-Host "The image file has been copied successfully. Time taken: $($totalTime.Minutes) minutes, $($totalTime.Seconds) seconds" + } + else + { + Write-Host "The image file has not been copied successfully." + Write-Host "`nPress ENTER to exit" + Read-Host | Out-Null + exit 1 + } + Write-Host "Copying setup tools..." + Copy-Item -Path "$((Get-Location).Path)\PE_Helper.ps1" -Destination "$taskRoot\media" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue + New-Item -Path "$taskRoot\media\files\diskpart" -ItemType Directory | Out-Null + Copy-Item -Path "$((Get-Location).Path)\files\diskpart\*.dp" -Destination "$taskRoot\media\files\diskpart" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue + New-Item -Path "$taskRoot\media\pxehelpers" -ItemType Directory | Out-Null + Copy-Item -Path "$((Get-Location).Path)\pxehelpers\*" -Destination "$taskRoot\media\pxehelpers" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue + Copy-Item -Path "$((Get-Location).Path)\files\README1ST.TXT" -Destination "$taskRoot\media\README.TXT" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue + New-Item -Path "$taskRoot\media\Tools\DIM" -ItemType Directory | Out-Null + Copy-Item -Path "$((Get-Location).Path)\tools\DIM\*" -Destination "$taskRoot\media\Tools\DIM" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue + Copy-Item -Path "$((Get-Location).Path)\files\*.sh" -Destination "$taskRoot\media" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue + Copy-Item -Path "$((Get-Location).Path)\files\boot_image_to_wds.bat" -Destination "$taskRoot\media" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue + Copy-Item -Path "$((Get-Location).Path)\files\install_image_to_wds.ps1" -Destination "$taskRoot\media" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue + if (($unattendFile -ne "") -and (Test-Path "$unattendFile" -PathType Leaf)) + { + Write-Host "Unattended answer file has been detected. Copying to ISO file..." + Copy-Item -Path "$unattendFile" -Destination "$taskRoot\media\unattend.xml" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue + } + Write-Host "Deleting temporary files..." + Remove-Item -Path "$taskRoot\OCs" -Recurse -Force -ErrorAction SilentlyContinue + if ($?) + { + Write-Host "Temporary files have been deleted successfully" + } + else + { + Write-Host "Temporary files haven't been deleted successfully" + } + # Detect if HotInstall is present in the working directory and copy it to the ISO file + if (Test-Path -Path "$((Get-Location).Path)\files\HotInstall.zip" -PathType Leaf) { + Write-Host "HotInstall has been detected. Adding to ISO file to allow installations from full Windows environments..." + Expand-Archive -Path "$((Get-Location).Path)\files\HotInstall.zip" -Destination "$taskRoot\media" -Force -ErrorAction SilentlyContinue + if ($?) + { + Write-Host "HotInstall has been copied successfully." + } + else + { + Write-Host "HotInstall could not be copied." + } + } + # Detect if Sysprep Preparator is present in the working directory and copy it to the ISO file + if (Test-Path -Path "$((Get-Location).Path)\files\SysprepPreparator.zip" -PathType Leaf) { + Write-Host "Sysprep Preparation Tool has been detected. Adding to ISO file..." + New-Item -Path "$taskRoot\media\Tools\SysprepPreparator" -ItemType Directory | Out-Null + Expand-Archive -Path "$((Get-Location).Path)\files\SysprepPreparator.zip" -Destination "$taskRoot\media\Tools\SysprepPreparator" -Force -ErrorAction SilentlyContinue + } + if (Test-Path -Path "$((Get-Location).Path)\tools\MainMenu") { + Write-Host "The main menu has been detected. Adding to ISO file..." + Copy-Item -Path "$((Get-Location).Path)\tools\MainMenu\*.*" -Destination "$taskRoot\media" -Force -Recurse -Verbose + Export-PEHelperLocalization -SourceFile $languageFile -DestinationDirectory "$taskRoot\media\language" -CultureCode $languageCode + $autorunContents = @' [autorun] open=autorun.exe icon=autorun.ico '@ - $autoRunContents | Out-File -FilePath "$((Get-Location).Path)\ISOTEMP\media\autorun.inf" -Encoding utf8 -Force - } - Write-Host "The ISO file structure has been successfully created. DISMTools will continue creating the ISO file automatically after 5 seconds." - Start-Sleep -Seconds 5 - Write-Host "Creating ISO file..." - $isoCreationSuccessful = if ($bootEx) { New-WinPEIso -peToolsPath $peToolsPath -isoLocation $isoPath -bootex } else { New-WinPEIso -peToolsPath $peToolsPath -isoLocation $isoPath } - if (-not ($isoCreationSuccessful)) - { - Write-Host "The ISO file has not been created successfully." - Write-Host "Deleting temporary files..." - Remove-Item -Path "$((Get-Location).Path)\ISOTEMP" -Recurse -Force -ErrorAction SilentlyContinue - Write-Host "`nPress ENTER to exit" - Read-Host | Out-Null - exit 1 - } - Write-Host "Deleting temporary files..." - Remove-Item -Path "$((Get-Location).Path)\ISOTEMP" -Recurse -Force -ErrorAction SilentlyContinue - if ($mountDirectory.StartsWith("$tempDir")) - { - Remove-Item -Path "$mountDirectory" -Recurse -Force -ErrorAction SilentlyContinue - } - Write-Host "The ISO file has been successfully created on the location you specified" - Start-Sleep -Seconds 5 - if ($copyToVentoy) + $autoRunContents | Out-File -FilePath "$taskRoot\media\autorun.inf" -Encoding utf8 -Force + } + Write-Host "The ISO file structure has been successfully created. Creating ISO file..." + $isoCreationSuccessful = if ($bootEx) { New-WinPEIso -taskRoot "$taskRoot" -peToolsPath $peToolsPath -isoLocation $isoPath -bootex } else { New-WinPEIso -taskRoot "$taskRoot" -peToolsPath $peToolsPath -isoLocation $isoPath } + if (-not ($isoCreationSuccessful)) + { + Write-Host "The ISO file has not been created successfully." + Write-Host "Deleting temporary files..." + Remove-Item -Path "$taskRoot" -Recurse -Force -ErrorAction SilentlyContinue + Write-Host "`nPress ENTER to exit" + Read-Host | Out-Null + exit 1 + } + Write-Host "Deleting temporary files..." + Remove-Item -Path "$taskRoot" -Recurse -Force -ErrorAction SilentlyContinue + if ($mountDirectory.StartsWith("$tempDir")) + { + Remove-Item -Path "$mountDirectory" -Recurse -Force -ErrorAction SilentlyContinue + } + Write-Host "The ISO file has been successfully created on the location you specified" + Start-Sleep -Seconds 5 + if ($copyToVentoy) + { + Write-Host "Please insert a Ventoy drive and press ENTER. To create Ventoy drives, follow the guide over at https://www.ventoy.net/en/doc_start.html" + Read-Host | Out-Null + $volumes = Get-Volume + if (($?) -and ($volumes.Count -gt 0)) + { + foreach ($volume in $volumes) { - Write-Host "Please insert a Ventoy drive and press ENTER. To create Ventoy drives, follow the guide over at https://www.ventoy.net/en/doc_start.html" - Read-Host | Out-Null - $volumes = Get-Volume - if (($?) -and ($volumes.Count -gt 0)) + if ($volume -and $volume.FileSystemLabel -ieq "ventoy") { - foreach ($volume in $volumes) + try { - if ($volume -and $volume.FileSystemLabel -ieq "ventoy") - { - try - { - $destinationDrive = "$($volume.DriveLetter):\" - Write-Host "-------------------------------------------------------------------------------------" - Write-Host " The ISO file is being copied to the Ventoy drive. This can take several minutes, " - Write-Host " depending on the speed of the target drive and your computer. Do not close this " - Write-Host " window -- it will be closed automatically after the process completes. " - Write-Host " " - Write-Host " Ventoy drive the ISO file will be copied to: `"$destinationDrive`" " - Write-Host "-------------------------------------------------------------------------------------" - $isoPathName = [IO.Path]::GetFileName("$isoPath") - Copy-Item -Path "$isoPath" -Destination "$destinationDrive$isoPathName" -Force -Recurse -Container - Write-Host "The ISO file has been successfully copied." - } - catch - { - Write-Host "Could not copy the ISO file to the Ventoy drive. You will have to do this manually." - } - Start-Sleep -Seconds 1 - } + $destinationDrive = "$($volume.DriveLetter):\" + Write-Host "-------------------------------------------------------------------------------------" + Write-Host " The ISO file is being copied to the Ventoy drive. This can take several minutes, " + Write-Host " depending on the speed of the target drive and your computer. Do not close this " + Write-Host " window -- it will be closed automatically after the process completes. " + Write-Host " " + Write-Host " Ventoy drive the ISO file will be copied to: `"$destinationDrive`" " + Write-Host "-------------------------------------------------------------------------------------" + $isoPathName = [IO.Path]::GetFileName("$isoPath") + Copy-Item -Path "$isoPath" -Destination "$destinationDrive$isoPathName" -Force -Recurse -Container + Write-Host "The ISO file has been successfully copied." } + catch + { + Write-Host "Could not copy the ISO file to the Ventoy drive. You will have to do this manually." + } + Start-Sleep -Seconds 1 } } - exit 0 } - else - { - Write-Host "A Windows Assessment and Deployment Kit (ADK) could not be found on your system. Please install the Windows ADK for Windows 10 (or Windows 11), and its Windows PE plugin, and try again." - Write-Host "`nPress ENTER to exit" - Read-Host | Out-Null - exit 1 - } - } - else - { - Write-Host "A Windows Assessment and Deployment Kit (ADK) could not be found on your system. Please install the Windows ADK for Windows 10 (or Windows 11), and its Windows PE plugin, and try again." - Write-Host "`nPress ENTER to exit" - Read-Host | Out-Null - exit 1 } + exit 0 } catch { @@ -543,34 +671,35 @@ function Copy-PEComponents function Add-PEPackages { param ( - [Parameter(Mandatory = $true, Position = 0)] [string]$mountDirectory, - [Parameter(Mandatory = $true, Position = 1)] [PE_Arch]$architecture + [Parameter(Mandatory, Position = 0)] [string]$taskRoot, + [Parameter(Mandatory, Position = 1)] [string]$mountDirectory, + [Parameter(Mandatory, Position = 2)] [PE_Arch]$architecture ) try { $pkgs = [List[string]]::new() - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\WinPE-NetFx.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\en-US\WinPE-NetFx_en-us.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\WinPE-WMI.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\en-US\WinPE-WMI_en-us.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\WinPE-PowerShell.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\en-US\WinPE-PowerShell_en-us.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\WinPE-DismCmdlets.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\en-US\WinPE-DismCmdlets_en-us.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\WinPE-SecureStartup.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\en-US\WinPE-SecureStartup_en-us.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\WinPE-EnhancedStorage.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\en-US\WinPE-EnhancedStorage_en-us.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\WinPE-StorageWMI.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\en-US\WinPE-StorageWMI_en-us.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\WinPE-WDS-Tools.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\en-US\WinPE-WDS-Tools_en-us.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\WinPE-SecureBootCmdlets.cab") + $pkgs.Add("$taskRoot\OCs\WinPE-NetFx.cab") + $pkgs.Add("$taskRoot\OCs\en-US\WinPE-NetFx_en-us.cab") + $pkgs.Add("$taskRoot\OCs\WinPE-WMI.cab") + $pkgs.Add("$taskRoot\OCs\en-US\WinPE-WMI_en-us.cab") + $pkgs.Add("$taskRoot\OCs\WinPE-PowerShell.cab") + $pkgs.Add("$taskRoot\OCs\en-US\WinPE-PowerShell_en-us.cab") + $pkgs.Add("$taskRoot\OCs\WinPE-DismCmdlets.cab") + $pkgs.Add("$taskRoot\OCs\en-US\WinPE-DismCmdlets_en-us.cab") + $pkgs.Add("$taskRoot\OCs\WinPE-SecureStartup.cab") + $pkgs.Add("$taskRoot\OCs\en-US\WinPE-SecureStartup_en-us.cab") + $pkgs.Add("$taskRoot\OCs\WinPE-EnhancedStorage.cab") + $pkgs.Add("$taskRoot\OCs\en-US\WinPE-EnhancedStorage_en-us.cab") + $pkgs.Add("$taskRoot\OCs\WinPE-StorageWMI.cab") + $pkgs.Add("$taskRoot\OCs\en-US\WinPE-StorageWMI_en-us.cab") + $pkgs.Add("$taskRoot\OCs\WinPE-WDS-Tools.cab") + $pkgs.Add("$taskRoot\OCs\en-US\WinPE-WDS-Tools_en-us.cab") + $pkgs.Add("$taskRoot\OCs\WinPE-SecureBootCmdlets.cab") # Add ARM64EC packages if ($architecture -eq 'arm64') { - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\WinPE-x64-Support.cab") - $pkgs.Add("$((Get-Location).Path)\ISOTEMP\OCs\en-US\WinPE-x64-Support_en-us.cab") + $pkgs.Add("$taskRoot\OCs\WinPE-x64-Support.cab") + $pkgs.Add("$taskRoot\OCs\en-US\WinPE-x64-Support_en-us.cab") } $pkgCount = $pkgs.Count $curPkgIndex = 0 @@ -609,13 +738,18 @@ function Start-PECustomization Start-PECustomization -imagePath "" -arch "amd64" -testStartNet $false #> param ( - [Parameter(Mandatory = $true, Position = 0)] [string]$imagePath, - [Parameter(Mandatory = $true, Position = 1)] [PE_Arch]$arch, - [Parameter(Mandatory = $true, Position = 2)] [bool]$testStartNet, - [Parameter(Mandatory = $true, Position = 3)] [bool]$includeSysDrivers + [Parameter(Mandatory, Position = 0)] [string]$taskRoot, + [Parameter(Mandatory = $true, Position = 1)] [string]$imagePath, + [Parameter(Mandatory = $true, Position = 2)] [PE_Arch]$arch, + [Parameter(Mandatory = $true, Position = 3)] [bool]$testStartNet, + [Parameter(Mandatory = $true, Position = 4)] [bool]$includeSysDrivers ) try { + $imageID = [Random]::new().Next([int]::MaxValue) + + Write-Host "Associated image ID $imageID to the current image." + if (Test-Path "$imagePath\Windows\system32\winpe.jpg" -PathType Leaf) { try @@ -658,12 +792,12 @@ function Start-PECustomization { Write-Host "CUSTOMIZATION STEP - Change Terminal Settings" -BackgroundColor DarkGreen Write-Host "Opening registry..." - if (Open-PERegistry -regFile "$imagePath\Windows\system32\config\DEFAULT" -regName "PE_DefUser" -regLoad $true) + if (Open-PERegistry -regFile "$imagePath\Windows\system32\config\DEFAULT" -regName "PE_DefUser_$imageID" -regLoad $true) { Write-Host "Setting window position..." - Set-ItemProperty -Path "HKLM:\PE_DefUser\Console" -Name "WindowPosition" -Value 6291480 + Set-ItemProperty -Path "HKLM:\PE_DefUser_$imageID\Console" -Name "WindowPosition" -Value 6291480 Write-Host "Closing registry..." - Open-PERegistry -regFile "$imagePath\Windows\system32\config\DEFAULT" -regName "PE_DefUser" -regLoad $false + Open-PERegistry -regFile "$imagePath\Windows\system32\config\DEFAULT" -regName "PE_DefUser_$imageID" -regLoad $false } else { @@ -684,17 +818,17 @@ function Start-PECustomization { Write-Host "CUSTOMIZATION STEP - Prepare System for Graphical Applications" -BackgroundColor DarkGreen Write-Host "Opening registry..." - if (Open-PERegistry -regFile "$imagePath\Windows\system32\config\SOFTWARE" -regName "WINPESOFT" -regLoad $true) + if (Open-PERegistry -regFile "$imagePath\Windows\system32\config\SOFTWARE" -regName "WINPESOFT_$imageID" -regLoad $true) { Write-Host "Setting CLSID keys..." - $clsidKey = "HKLM\WINPESOFT\Classes\CLSID\{AE054212-3535-4430-83ED-D501AA6680E6}" + $clsidKey = "HKLM\WINPESOFT_$imageID\Classes\CLSID\{AE054212-3535-4430-83ED-D501AA6680E6}" reg add "$clsidKey" /f reg add "$clsidKey" /f /ve /t REG_SZ /d "Shell Name Space ListView" reg add "$clsidKey\InprocServer32" /f reg add "$clsidKey\InprocServer32" /f /ve /t REG_EXPAND_SZ /d "%SystemRoot%\system32\explorerframe.dll" reg add "$clsidKey\InprocServer32" /f /v "ThreadingModel" /t REG_SZ /d "Apartment" Write-Host "Closing registry..." - reg unload "HKLM\WINPESOFT" + reg unload "HKLM\WINPESOFT_$imageID" if (-not $?) { $attempts = 0 @@ -702,7 +836,7 @@ function Start-PECustomization { $attempts += 1 Start-Sleep -Milliseconds 500 - reg unload "HKLM\WINPESOFT" + reg unload "HKLM\WINPESOFT_$imageID" } until ($?) Write-Host "Registry closed successfully after $($attempts + 1) attempt(s)" } @@ -736,6 +870,8 @@ function Start-PECustomization Write-Host "Copying Driver Installation Module..." New-Item -Path "$imagePath\Tools\DIM" -ItemType Directory | Out-Null Copy-Item -Path "$((Get-Location).Path)\tools\DIM\*" -Destination "$imagePath\Tools\DIM" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue + New-Item -Path "$imagePath\Tools\BDE-GUI" -ItemType Directory | Out-Null + Copy-Item -Path "$((Get-Location).Path)\tools\BDE-GUI\*" -Destination "$imagePath\Tools\BDE-GUI" -Verbose -Force -Recurse -Container -ErrorAction SilentlyContinue Write-Host "First-party tools have been successfully copied." } catch @@ -773,17 +909,18 @@ function Start-PECustomization { Write-Host "CUSTOMIZATION STEP - Miscellaneous Registry Edits" -BackgroundColor DarkGreen Write-Host "-- PowerShell Execution Policy --" - if (-not (Open-PERegistry -regFile "$imagePath\Windows\system32\config\SOFTWARE" -regName "WINPESOFT" -regLoad $true)) { throw } - reg add "HKLM\WINPESOFT\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" /v "ExecutionPolicy" /t REG_SZ /d "Unrestricted" /f - reg add "HKLM\WINPESOFT\DISMTools" /f - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment" /f - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment" /f /v "MinBuild" /t REG_SZ /d "$version" + if (-not (Open-PERegistry -regFile "$imagePath\Windows\system32\config\SOFTWARE" -regName "WINPESOFT_$imageID" -regLoad $true)) { throw } + reg add "HKLM\WINPESOFT_$imageID\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" /v "ExecutionPolicy" /t REG_SZ /d "Unrestricted" /f + reg add "HKLM\WINPESOFT_$imageID\DISMTools" /f + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment" /f + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment" /f /v "MinBuild" /t REG_SZ /d "$version" + $codename = "infinity_mk2" if (Test-Path -Path "$((Get-Location).Path)\version" -PathType Leaf) { - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment" /f /v "FullBuild" /t REG_SZ /d "$($version).dtpe_$version.$(Get-Content -Path "$((Get-Location).Path)\version")" + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment" /f /v "FullBuild" /t REG_SZ /d "$($version).dtpe_$codename.$(Get-Content -Path "$((Get-Location).Path)\version")" } else { - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment" /f /v "FullBuild" /t REG_SZ /d "$($version).dtpe_$version.$((Get-Date).ToString('yyMMdd-HHmm'))" + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment" /f /v "FullBuild" /t REG_SZ /d "$($version).dtpe_$codename.$((Get-Date).ToString('yyMMdd-HHmm'))" } - Open-PERegistry -regFile "$imagePath\Windows\system32\config\SOFTWARE" -regName "WINPESOFT" -regLoad $false + Open-PERegistry -regFile "$imagePath\Windows\system32\config\SOFTWARE" -regName "WINPESOFT_$imageID" -regLoad $false Write-Host "Registry changed." } catch @@ -815,32 +952,43 @@ function Start-PECustomization } try { - $policyVersion = "0.8.0.26063" + $policyVersion = "0.8.1.26082" Write-Host "CUSTOMIZATION STEP - Initialize Policy System" -BackgroundColor DarkGreen Write-Host "Initializing default Preinstallation Environment policy..." - if (-not (Open-PERegistry -regFile "$imagePath\Windows\system32\config\SOFTWARE" -regName "WINPESOFT" -regLoad $true)) { throw } - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /ve /t REG_SZ /d "PolicyVer=$policyVersion" - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v ShowWatermark /t REG_DWORD /d 0 - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v UEFICA23Preference /t REG_SZ /d "AskUser" - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v PartTableOverridePreference /t REG_SZ /d "NoOverride" - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v WDSHCConnAttempts /t REG_DWORD /d 5 - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v WDSHCGraphoView /t REG_DWORD /d 1 - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v DTDimShowPnputilOut /t REG_DWORD /d 1 - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v AutoUnattendCopytoSysprep /t REG_DWORD /d 0 - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v PXEServerPort /t REG_DWORD /d 8080 - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v KeyboardLayoutCode /t REG_SZ /d "00000409" - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v KeyboardLayoutOverrideExistingLayout /t REG_DWORD /d 0 - reg add "HKLM\WINPESOFT\DISMTools\Preinstallation Environment\Policies" /f /v AnswerFileConflictResponse /t REG_SZ /d "AskUser" - if (Test-Path -Path "$((Get-Location).Path)\files\DefaultPolicy.reg" -PathType Leaf) { - reg import "$((Get-Location).Path)\files\DefaultPolicy.reg" - } - if (Test-Path -Path "$((Get-Location).Path)\files\CustomPolicy.reg" -PathType Leaf) { + if (-not (Open-PERegistry -regFile "$imagePath\Windows\system32\config\SOFTWARE" -regName "WINPESOFT_$imageID" -regLoad $true)) { throw } + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /ve /t REG_SZ /d "PolicyVer=$policyVersion" + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v ShowWatermark /t REG_DWORD /d 0 + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v UEFICA23Preference /t REG_SZ /d "AskUser" + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v PartTableOverridePreference /t REG_SZ /d "NoOverride" + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v WDSHCConnAttempts /t REG_DWORD /d 5 + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v WDSHCGraphoView /t REG_DWORD /d 1 + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v DTDimShowPnputilOut /t REG_DWORD /d 1 + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v AutoUnattendCopytoSysprep /t REG_DWORD /d 0 + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v PXEServerPort /t REG_DWORD /d 8080 + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v KeyboardLayoutCode /t REG_SZ /d "00000409" + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v KeyboardLayoutOverrideExistingLayout /t REG_DWORD /d 0 + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v AnswerFileConflictResponse /t REG_SZ /d "AskUser" + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v ScanBootImages /t REG_DWORD /d 0 + reg add "HKLM\WINPESOFT_$imageID\DISMTools\Preinstallation Environment\Policies" /f /v ImageSelectorDefaultOption /t REG_SZ /d "AskUser" + + # Adapt the policy files to point to the image's unique registry hives + $nobomEnc = New-Object System.Text.UTF8Encoding $false + if (Test-Path -Path "$taskRoot\DefaultPolicy.reg" -PathType Leaf) { + $defaultPolicyContents = Get-Content -Path "$taskRoot\DefaultPolicy.reg" -Raw + $defaultPolicyContents = $defaultPolicyContents.Replace("\WINPESOFT\", "\WINPESOFT_$imageID\") + [IO.File]::WriteAllLines("$taskRoot\DefaultPolicy.reg", $defaultPolicyContents, $nobomEnc) + reg import "$taskRoot\DefaultPolicy.reg" + } + if (Test-Path -Path "$taskRoot\CustomPolicy.reg" -PathType Leaf) { Write-Host "Importing custom policies..." - reg import "$((Get-Location).Path)\files\CustomPolicy.reg" + $customPolicyContents = Get-Content -Path "$taskRoot\CustomPolicy.reg" -Raw + $customPolicyContents = $customPolicyContents.Replace("\WINPESOFT\", "\WINPESOFT_$imageID\") + [IO.File]::WriteAllLines("$taskRoot\CustomPolicy.reg", $customPolicyContents, $nobomEnc) + reg import "$taskRoot\CustomPolicy.reg" } - Open-PERegistry -regFile "$imagePath\Windows\system32\config\SOFTWARE" -regName "WINPESOFT" -regLoad $false + Open-PERegistry -regFile "$imagePath\Windows\system32\config\SOFTWARE" -regName "WINPESOFT_$imageID" -regLoad $false Write-Host "Policy System initialized." } catch @@ -857,26 +1005,35 @@ function Start-PECustomization # then we'll add them. $drvCount = $sysDrivers.Count $curDrvIndex = 0 - $rootDriverPath = "$env:SYSTEMDRIVE\CWS_DRVS" + $rootDriverPath = "$taskRoot\Drivers" if (-not (Test-Path -Path "$rootDriverPath")) { New-Item -Path "$rootDriverPath" -ItemType Directory | Out-Null } + $successfulExports = 0 + $failedExports = 0 Write-Host "Exporting available drivers..." foreach ($sysDriver in $sysDrivers) { try { $curDrvIndex = $sysDrivers.IndexOf($sysDriver) - Write-Progress -Activity "Installing system drivers..." -Status "Exporting driver $($curDrvIndex + 1) of $($drvCount): `"$([IO.Path]::GetFileName($sysDriver.OriginalFileName))`"..." -PercentComplete ((($curDrvIndex / $drvCount) * 100) / 2) + Write-Progress -Activity "Installing system drivers..." -Status "Exporting driver $($curDrvIndex + 1) of $($drvCount): `"$([IO.Path]::GetFileName($sysDriver.OriginalFileName))`"..." -PercentComplete (($curDrvIndex / $drvCount) * 100) $sysDriverSourcePath = [IO.Path]::GetDirectoryName("$($sysDriver.OriginalFileName)") $sysDriverTargetPath = "$rootDriverPath\$([IO.Path]::GetFileName($sysDriver.OriginalFileName))_$([Random]::new().Next([int]::MaxValue))" New-Item -Path "$sysDriverTargetPath" -ItemType Directory | Out-Null Copy-Item -Path "$sysDriverSourcePath\*.*" -Destination "$sysDriverTargetPath" -Recurse -Force + $successfulExports++ } catch { Write-Host "Could not export driver $($sysDriver.OriginalFileName)." + $failedExports++ } } + Write-Host "===================================================================" + Write-Host "Driver export summary:" + Write-Host "- Successful driver exports: $successfulExports" + Write-Host "- Failed driver exports: $failedExports" + Write-Host "===================================================================" Write-Host "Installing drivers..." $curDrvIndex = 0 - $infFiles = Get-ChildItem -Path "$rootDriverPath" -Recurse -Filter "*.inf" + $infFiles = Get-ChildItem -Path "$rootDriverPath" -Recurse -File -Filter "*.inf" $infCount = $infFiles.Count $successfulInstallations = 0 $failedInstallations = 0 @@ -885,11 +1042,12 @@ function Start-PECustomization foreach ($infFile in $infFiles) { try { $curDrvIndex = $infFiles.IndexOf($infFile) - Write-Progress -Activity "Installing system drivers..." -Status "Installing driver $($curDrvIndex + 1) of $($infCount): `"$([IO.Path]::GetFileName($infFile.FullName))`"..." -PercentComplete (50 + ((($curDrvIndex / $drvCount) * 100) / 2)) + Write-Progress -Activity "Installing system drivers..." -Status "Installing driver $($curDrvIndex + 1) of $($infCount): `"$([IO.Path]::GetFileName($infFile.FullName))`"..." if ((Start-DismCommand -Verb Add-Driver -ImagePath "$imagePath" -DriverAdditionFile "$($infFile.FullName)" -DriverAdditionRecurse $false) -eq $true) { $successfulInstallations++ - $successfulDrivers.Add("$($infFile.FullName)") + $driverFilePath = $infFile.FullName.Replace("$taskRoot\Drivers", "$($env:SYSTEMDRIVE)\CWS_DRVS") + $successfulDrivers.Add("$driverFilePath") } else { @@ -909,6 +1067,8 @@ function Start-PECustomization $winpeDriverRootPath = "$imagePath\CWS_DRVS" New-Item -Path "$winpeDriverRootPath" -ItemType Directory | Out-Null New-Item -Path "$imagePath\DT_InstDrvs.txt" | Out-Null + # WDSHC rescans and re-adds the drivers, which we don't want. + New-Item -Path "$imagePath\essential_drivers_exported" | Out-Null Copy-Item -Path "$rootDriverPath\*.*" -Destination "$winpeDriverRootPath" -Recurse -Force foreach ($successfulDriver in $successfulDrivers) { $successfulDriver.Replace("$env:SYSTEMDRIVE", "X:") | Out-File "$imagePath\DT_InstDrvs.txt" -Encoding utf8 -Append @@ -1033,9 +1193,10 @@ function New-WinPEIso New-WinPEIso -peToolsPath "C:\Program Files\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools" -isoLocation "C:\PreInstEnv.iso" -bootex "true" #> param ( - [Parameter(Mandatory = $true, Position = 0)] [string]$peToolsPath, - [Parameter(Mandatory = $true, Position = 1)] [string]$isoLocation, - [Parameter(Position = 2)] [switch]$bootex + [Parameter(Mandatory, Position = 0)] [string]$taskRoot, + [Parameter(Mandatory, Position = 1)] [string]$peToolsPath, + [Parameter(Mandatory, Position = 2)] [string]$isoLocation, + [Parameter(Position = 3)] [switch]$bootex ) try { @@ -1061,17 +1222,17 @@ function New-WinPEIso $finalPath = "" foreach ($path in $paths) { - if (Test-Path "$((Get-Location).Path)\ISOTEMP\$path") + if (Test-Path "$taskRoot\$path") { $finalPath = $path break } } # Determine status of signed boot managers. This is only the case when the folder is bootbins - $efiVars = "#pEF,e,b`"$((Get-Location).Path)\ISOTEMP\$finalPath\`"" + $efiVars = "#pEF,e,b`"$taskRoot\$finalPath\`"" if ($finalPath -eq "bootbins") { - if (($bootex) -and (Test-Path "$((Get-Location).Path)\ISOTEMP\$finalPath\efisys_EX.bin" -PathType Leaf)) + if (($bootex) -and (Test-Path "$taskRoot\$finalPath\efisys_EX.bin" -PathType Leaf)) { $efiVars = $efiVars.Replace("", "efisys_EX.bin").Trim() } @@ -1084,10 +1245,10 @@ function New-WinPEIso { $efiVars = $efiVars.Replace("", "efisys.bin").Trim() } - if (Test-Path "$((Get-Location).Path)\ISOTEMP\$finalPath\etfsboot.com" -PathType Leaf) + if (Test-Path "$taskRoot\$finalPath\etfsboot.com" -PathType Leaf) { Write-Host "Generating ISO file with BIOS and UEFI compatibility..." - $bootData = "2#p0,e,b`"$((Get-Location).Path)\ISOTEMP\$finalPath\etfsboot.com`"$($efiVars)" + $bootData = "2#p0,e,b`"$taskRoot\$finalPath\etfsboot.com`"$($efiVars)" } else { @@ -1098,7 +1259,7 @@ function New-WinPEIso $success = $false do { - $oscdimgProc = Start-Process "$env:NewPath\oscdimg.exe" -ArgumentList "-lDISMTools_PE -bootdata:$bootData -u2 -udfver102 `"$((Get-Location).Path)\ISOTEMP\media`" `"$isoLocation`"" -Wait -PassThru -NoNewWindow + $oscdimgProc = Start-Process "$env:NewPath\oscdimg.exe" -ArgumentList "-lDISMTools_PE -bootdata:$bootData -u2 -udfver102 `"$taskRoot\media`" `"$isoLocation`"" -Wait -PassThru -NoNewWindow $success = ($oscdimgProc.ExitCode -eq 0) if ($success -eq $false) { Write-Host "Could not generate ISO file. This can happen if the destination file is in use. Trying again after 5 seconds..." @@ -1952,23 +2113,50 @@ function Get-WimIndexes #> Import-Module Dism $wimPath = "" - if ((Get-ChildItem -Path "$((Get-Location).Path)sources\*.wim" -Exclude "boot.wim").Count -gt 1) - { - Write-Host "`nMultiple installation images have been found in this installation medium. Please select an image file from the list and press ENTER." - Write-Host "`nDo note that, after the selection of an image, you may not be able to go back." - (Get-ChildItem -Path "$((Get-Location).Path)sources\*.wim" -Exclude "boot.wim") | Out-Host - $wimPath = Read-Host "Choose the image file to apply" - $wimPath = "$((Get-Location).Path)sources\$wimPath" - if (($wimPath -eq "") -or (-not (Test-Path "$wimPath" -PathType Leaf))) - { - do { + + $bootImagesIncluded = (Get-PolicyValue -PolicyName "ScanBootImages" -DefaultPolicyValue 0 -ValidOptions @(0, 1)) -eq 1 + + $imageCount = 0 + $imageFiles = $null + if ($bootImagesIncluded) { + $imageFiles = Get-ChildItem -Path "$((Get-Location).Path)sources\*.wim" + } else { + $imageFiles = Get-ChildItem -Path "$((Get-Location).Path)sources\*.wim" -Exclude "boot.wim" + } + $imageCount = $imageFiles.Count + + $imageSelectorBehavior = Get-PolicyValue -PolicyName "ImageSelectorDefaultOption" -DefaultPolicyValue "AskUser" -ValidOptions @("AskUser", "LargestFirst", "MostRecentFirst") + # If the behavior is to select the most recent image and boot images are included in the scan, boot.wim + # will always be chosen because it is the most recent. Exclude boot.wim from scans if so. + if (($bootImagesIncluded) -and ($imageSelectorBehavior -eq "MostRecentFirst")) { + $bootImagesIncluded = $false + $imageCount -= 1 + } + + if ($imageCount -gt 1) { + switch ($imageSelectorBehavior) { + "AskUser" { + Write-Host "`nMultiple installation images have been found in this installation medium. Please select an image file from the list and press ENTER." + Write-Host "`nDo note that, after the selection of an image, you may not be able to go back." + $imageFiles | Out-Host $wimPath = Read-Host "Choose the image file to apply" $wimPath = "$((Get-Location).Path)sources\$wimPath" - } until (($wimPath -ne "") -and (Test-Path "$wimPath" -PathType Leaf)) + if (($wimPath -eq "") -or (-not (Test-Path "$wimPath" -PathType Leaf))) + { + do { + $wimPath = Read-Host "Choose the image file to apply" + $wimPath = "$((Get-Location).Path)sources\$wimPath" + } until (($wimPath -ne "") -and (Test-Path "$wimPath" -PathType Leaf)) + } + } + "LargestFirst" { + $wimPath = ($imageFiles | Sort-Object -Property Length -Descending | Select-Object -First 1).FullName + } + "MostRecentFirst" { + $wimPath = ($imageFiles | Sort-Object -Property LastWriteTime -Descending | Select-Object -First 1).FullName + } } - } - elseif ((Get-ChildItem -Path "$((Get-Location).Path)sources\*.wim" -Exclude "boot.wim").Count -eq 1) - { + } elseif ($imageCount -eq 1) { $wimPath = "$((Get-Location).Path)sources\install.wim" } $imageInformation = (Get-WindowsImage -ImagePath "$wimPath") @@ -2580,7 +2768,7 @@ function Show-Timeout { function Start-ProjectDevelopment { $mountDirectory = "" $architecture = [PE_Arch]::($testArch) - $version = "0.8" + $version = "0.8.1" $ESVer = "0.6.1" Write-Host "DISMTools $version - Preinstallation Environment Helper" Write-Host "(c) 2024-2026. CodingWonders Software. Portions (c) CT Tech Group LLC; (c) JJ Fullmer" @@ -2659,7 +2847,7 @@ function Start-ProjectDevelopment { Start-DismCommand -Verb Commit -ImagePath "$mountDirectory" | Out-Null # Perform customization tasks later Write-Host "Beginning customizations..." - if ((Start-PECustomization -ImagePath "$mountDirectory" -arch $architecture -testStartNet $true) -eq $false) + if ((Start-PECustomization -ImagePath "$mountDirectory" -arch $architecture -testStartNet $true -includeSysDrivers $false) -eq $false) { Write-Host "Preinstallation Environment creation has failed in the PE customization phase. Discarding changes..." Start-DismCommand -Verb Unmount -ImagePath "$mountDirectory" -Commit $false | Out-Null diff --git a/Helpers/extps1/PE_Helper/files/HotInstall.zip b/Helpers/extps1/PE_Helper/files/HotInstall.zip index 3d5b93eff..ff2d40c31 100644 Binary files a/Helpers/extps1/PE_Helper/files/HotInstall.zip and b/Helpers/extps1/PE_Helper/files/HotInstall.zip differ diff --git a/Helpers/extps1/PE_Helper/files/SysprepPreparator.zip b/Helpers/extps1/PE_Helper/files/SysprepPreparator.zip index 46a08ceb8..c05cff6b3 100644 Binary files a/Helpers/extps1/PE_Helper/files/SysprepPreparator.zip and b/Helpers/extps1/PE_Helper/files/SysprepPreparator.zip differ diff --git a/Helpers/extps1/PE_Helper/files/scripts/imagecapture.bat b/Helpers/extps1/PE_Helper/files/scripts/imagecapture.bat index b792e1598..d13660f6f 100644 --- a/Helpers/extps1/PE_Helper/files/scripts/imagecapture.bat +++ b/Helpers/extps1/PE_Helper/files/scripts/imagecapture.bat @@ -29,10 +29,11 @@ diskpart /s %scriptpath% echo. echo - To install drivers if you don't see your drives, type "DIM" -if exist "%SYSTEMROOT%\system32\wdscapture.exe" ( echo - To prepare a capture for a Windows Deployment Services server, type "WDS" ) +if exist "%SYSTEMROOT%\system32\wdscapture.exe" echo - To prepare a capture for a Windows Deployment Services server, type "WDS" echo - To save the image to a network share, type "NET" echo - To perform quick disk and partition administration, type "DP" echo - To change the keyboard layout to use, type "KBD" +if exist "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" echo - To unlock an encrypted BitLocker volume, type "BDE" echo. set /p sourcedrive=Please enter the letter of the volume to capture, or option to invoke: @@ -113,6 +114,11 @@ if /i "%sourcedrive%" equ "KBD" ( goto :main ) +if /i "%sourcedrive%" equ "BDE" ( + start /b /wait cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" unlock + goto :main +) + if %_DEBUG% EQU 1 echo Checking presence of marker... if %_DEBUG% EQU 1 echo "%sourcedrive%:\Windows\system32\sysprep\Sysprep_succeeded.tag" if not exist "%sourcedrive%:\Windows\system32\sysprep\Sysprep_succeeded.tag" ( @@ -148,6 +154,12 @@ if not defined imagename ( set imagename=Windows ) +set /p imagedesc=Provide a custom description. To continue with a default description, press ENTER without typing anything: +if not defined imagedesc ( + IF %_DEBUG% EQU 1 echo Destination description not provided. Continuing with default description. + set imagedesc=!imagename! +) + echo Capturing Windows installation to the target WIM file. This can take a long time, depending on the computer's speed. call :create_config_list %sourcedrive% @@ -158,7 +170,8 @@ IF %_DEBUG% EQU 1 echo Destination file : %destdrive%:\%destfile% IF %_DEBUG% EQU 1 echo Source directory : %sourcedrive%:\ IF %_DEBUG% EQU 1 echo Scratch directory: %destdrive%:\ IF %_DEBUG% EQU 1 echo Image Name : %imagename% -dism /capture-image /imagefile="%destdrive%:\%destfile%" /capturedir=%sourcedrive%:\ /scratchdir=%destdrive%:\ /name="%imagename%" /configfile="%configlistpath%" /compress=max /checkintegrity /bootable /verify +IF %_DEBUG% EQU 1 echo Image Description: %imagedesc% +dism /capture-image /imagefile="%destdrive%:\%destfile%" /capturedir=%sourcedrive%:\ /scratchdir=%destdrive%:\ /name="%imagename%" /description="%imagedesc%" /configfile="%configlistpath%" /compress=max /checkintegrity /bootable /verify if %ERRORLEVEL% equ 0 ( set succeeded=true if exist "%SYSTEMDRIVE%\SysprepPrepTool" call :sysprep_hotinstall_remove_temp_files diff --git a/Helpers/extps1/PE_Helper/files/startup/startnet.cmd b/Helpers/extps1/PE_Helper/files/startup/startnet.cmd index ac0aa52f9..86e65b12f 100644 --- a/Helpers/extps1/PE_Helper/files/startup/startnet.cmd +++ b/Helpers/extps1/PE_Helper/files/startup/startnet.cmd @@ -1,7 +1,7 @@ @echo off setlocal ENABLEDELAYEDEXPANSION title DISMTools Preinstallation Environment -set version=0.8 +set version=0.8.1 set sysdrive=%SYSTEMDRIVE% set debug=0 echo DISMTools %version% - Preinstallation Environment @@ -151,6 +151,8 @@ if %debug% lss 2 ( echo - To show hardware and software inventory, type "inv" and press ENTER echo - To change the keyboard layout, type "keyboardchange" and press ENTER echo - For more Windows PE commands, type "wpeutil" + echo - To manage volumes encrypted with BitLocker, use one or more of the following aliases: + echo Installed aliases: bdemgr bdelock bdeunlock bdeinfo bdeencrypt bdedecrypt echo. echo - To manually start the installation procedure, type "StartInstall" and press ENTER. You need a drive containing a Windows image echo - To start the Driver Installation Module in case you need to load drivers, type "StartDim" and press ENTER @@ -166,5 +168,11 @@ if %debug% lss 2 ( doskey StartDim=cmd /c "%sysdrive%\dimstart.bat" doskey netinit=cmd /c "%sysdrive%\scripts\initializenetwork.bat" doskey keyboardchange=powershell -noprofile -file "%sysdrive%\ChangeKeyboardLayout.ps1" + doskey bdemgr=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" $* + doskey bdelock=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" lock + doskey bdeunlock=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" unlock + doskey bdeinfo=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" info + doskey bdeencrypt=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" encrypt + doskey bdedecrypt=cmd /c "%sysdrive%\Tools\BDE-GUI\bdemgr.bat" decrypt exit /b ) \ No newline at end of file diff --git a/Helpers/extps1/PE_Helper/pxehelpers/fog/__ModuleSetup.ps1 b/Helpers/extps1/PE_Helper/pxehelpers/fog/__ModuleSetup.ps1 index 56cf0ccc0..24bd74a00 100644 --- a/Helpers/extps1/PE_Helper/pxehelpers/fog/__ModuleSetup.ps1 +++ b/Helpers/extps1/PE_Helper/pxehelpers/fog/__ModuleSetup.ps1 @@ -1,4 +1,4 @@ -$version = "0.8" +$version = "0.8.1" Write-Host "DISMTools $version - FOG Module Preparation" Write-Host "(c) 2025-2026. CodingWonders Software" diff --git a/Helpers/extps1/PE_Helper/pxehelpers/fog/foghelper_server.ps1 b/Helpers/extps1/PE_Helper/pxehelpers/fog/foghelper_server.ps1 index f97107e38..bc6945c50 100644 --- a/Helpers/extps1/PE_Helper/pxehelpers/fog/foghelper_server.ps1 +++ b/Helpers/extps1/PE_Helper/pxehelpers/fog/foghelper_server.ps1 @@ -4,7 +4,7 @@ # .'^""""""^. # '^`'. '^"""""""^. # .^"""""`' .^"""""""^. --------------------------------------------------------- -# .^""""""` ^"""""""` | DISMTools 0.8 | +# .^""""""` ^"""""""` | DISMTools 0.8.1 | # ."""""""^. `""""""""' `,` | The connected place for Windows system administration | # '`""""""`. """""""""^ `,,," --------------------------------------------------------- # '^"""""`. ^""""""""""'. .`,,,,,^ | PE Helper - FOG Helper Web-based API for Servers | @@ -131,7 +131,7 @@ function Get-FogHosts { [Console]::TreatControlCAsInput = $true -$version = "0.8" +$version = "0.8.1" Clear-Host diff --git a/Helpers/extps1/PE_Helper/pxehelpers/fog/foghelper_server_unix.ps1 b/Helpers/extps1/PE_Helper/pxehelpers/fog/foghelper_server_unix.ps1 index 1099daa9c..477692552 100644 --- a/Helpers/extps1/PE_Helper/pxehelpers/fog/foghelper_server_unix.ps1 +++ b/Helpers/extps1/PE_Helper/pxehelpers/fog/foghelper_server_unix.ps1 @@ -4,7 +4,7 @@ # .'^""""""^. # '^`'. '^"""""""^. # .^"""""`' .^"""""""^. --------------------------------------------------------- -# .^""""""` ^"""""""` | DISMTools 0.8 | +# .^""""""` ^"""""""` | DISMTools 0.8.1 | # ."""""""^. `""""""""' `,` | The connected place for Windows system administration | # '`""""""`. """""""""^ `,,," --------------------------------------------------------- # '^"""""`. ^""""""""""'. .`,,,,,^ | PE Helper - FOG Helper Web-based API for UNIX Servers | @@ -114,7 +114,7 @@ function Get-FogHosts { [Console]::TreatControlCAsInput = $true -$version = "0.8" +$version = "0.8.1" Clear-Host diff --git a/Helpers/extps1/PE_Helper/pxehelpers/wds/wdshelper.ps1 b/Helpers/extps1/PE_Helper/pxehelpers/wds/wdshelper.ps1 index f6b19d9c5..67915d725 100644 --- a/Helpers/extps1/PE_Helper/pxehelpers/wds/wdshelper.ps1 +++ b/Helpers/extps1/PE_Helper/pxehelpers/wds/wdshelper.ps1 @@ -4,7 +4,7 @@ # .'^""""""^. # '^`'. '^"""""""^. # .^"""""`' .^"""""""^. --------------------------------------------------------- -# .^""""""` ^"""""""` | DISMTools 0.8 | +# .^""""""` ^"""""""` | DISMTools 0.8.1 | # ."""""""^. `""""""""' `,` | The connected place for Windows system administration | # '`""""""`. """""""""^ `,,," --------------------------------------------------------- # '^"""""`. ^""""""""""'. .`,,,,,^ | PE Helper - Windows Deployment Services Helper | @@ -808,7 +808,7 @@ function Start-OSApplication { } } - if ((Get-WindowsDriver -Online).Count -gt 0) { + if ((-not (Test-Path -Path "$env:SYSTEMDRIVE\essential_drivers_exported" -PathType Leaf)) -and ((Get-WindowsDriver -Online).Count -gt 0)) { Show-CenteredTextBox -Text "Drivers were detected in this boot image and are being exported in order to be applied to the target device. Please wait, this can take some time..." -MaxWidth 100 -CenterOfAll New-Item -Path "$($driveLetter):\NetInstall\drivers" -ItemType Directory | Out-Null Export-WindowsDriver -Online -Destination "$($driveLetter):\NetInstall\drivers" @@ -871,17 +871,96 @@ function Start-OSApplication { } Show-SectionMessage -sectionTitle "Initializing the Windows image" -sectionDescription "Please wait while Setup initializes your installation configuration." if ($serviceableArchitecture) { Set-Serviceability -ImagePath "$($driveLetter):\" } else { Write-Host "Serviceability tests will not be run: the image architecture and the PE architecture are different." } - if (Test-Path "$($driveLetter):\NetInstall\unattend.xml" -PathType Leaf) - { - Write-Host "A possible unattended answer file has been detected, applying it... " -NoNewline - if ((Start-DismCommand -Verb UnattendApply -ImagePath "$($driveLetter):" -unattendPath "$($driveLetter):\NetInstall\unattend.xml") -eq $true) - { - Write-Host "SUCCESS" -ForegroundColor White -BackgroundColor DarkGreen - } - else + try { + $finalAnswerPath = "$($driveLetter):\NetInstall\unattend.xml" + + if (Test-Path -Path "$finalAnswerPath" -PathType Leaf) { - Write-Host "FAILURE" -ForegroundColor Black -BackgroundColor DarkRed + # Check if the image already has an answer file in its panther directory. If it does, then that counts + # as a conflict that must be resolved. + if (Test-Path -Path "$($driveLetter):\Windows\Panther\unattend.xml" -PathType Leaf) { + Show-SectionMessage -sectionTitle "Select answer file to deploy" -sectionDescription "Setup has detected answer files in both your network and the Windows image you are deploying." + # CONFLICT! + $netUnattendInfo = Get-Item -Path "$finalAnswerPath" + $wimUnattendInfo = Get-Item -Path "$($driveLetter):\Windows\Panther\unattend.xml" + # The user may have used a policy to handle this conflict automatically. Guess it and use it. + $policyDecision = Get-PolicyValue -PolicyName "AnswerFileConflictResponse" -DefaultPolicyValue "AskUser" -ValidOptions @("AskUser", "PreferISO", "PreferWIM") + Write-Host "Unattended answer files have been found in both the network and the Windows image that you are deploying. Specify " + Write-Host "how you want to proceed, but you may encounter unexpected results if you choose the wrong file.`n" + Write-Host " Answer file in the network:`n" + Write-Host " - Creation date: $($netUnattendInfo.CreationTime)" + Write-Host " - Modification date: $($netUnattendInfo.LastWriteTime)" + Write-Host " - Size: $([Math]::Round(($netUnattendInfo.Length / 1KB), 2)) KB" + Write-Host "" + Write-Host " Answer file in the Windows image file:`n" + Write-Host " - Creation date: $($wimUnattendInfo.CreationTime)" + Write-Host " - Modification date: $($wimUnattendInfo.LastWriteTime)" + Write-Host " - Size: $([Math]::Round(($wimUnattendInfo.Length / 1KB), 2)) KB" + Write-Host "" + switch ($policyDecision) { + "PreferISO" { + Write-Host "Handling conflict with answer file from the network..." + } + "PreferWIM" { + Write-Host "Handling conflict with answer file from Windows image..." + throw + } + "AskUser" { + Write-Host "Type NET if you want to use the answer file from the network, or WIM if you want to use the one from the Windows" + Write-Host "image file. To manually review the answer files to see which one is ideal in this situation, press R.`n" + $decided = $false + $decision = "" + do { + $decision = Read-Host -Prompt "Specify an option (NET, WIM, or R), and press ENTER" + if ($decision -eq "") { + # Blank options are not allowed + continue + } + + if (-not (@("net", "wim", "r").Contains($decision.ToLower()))) { + # So are options that are not part of the set + continue + } + + if ($decision -eq "R") { + # Manually review the files + $isoUnattendFile = "$env:TEMP\Unattended file from network.xml" + $wimUnattendFile = "$env:TEMP\Unattended file from Windows image file.xml" + + Copy-Item -Path "$finalAnswerPath" -Destination "$isoUnattendFile" -Force + Copy-Item -Path "$($driveLetter):\Windows\Panther\unattend.xml" -Destination "$wimUnattendFile" -Force + + notepad "$isoUnattendFile" + notepad "$wimUnattendFile" + continue + } + + $decided = $true + } until ($decided) + + # Back on track for the messages + Show-SectionMessage -sectionTitle "Initializing the Windows image" -sectionDescription "Please wait while Setup initializes your installation configuration." + + # If we chose the one from the WIM, we cancel the operation by "throwing" it out the window + if ($decision -eq "WIM") { + throw + } + } + } + } + + Write-Host "A possible unattended answer file has been detected, applying it... " -NoNewline + if ((Start-DismCommand -Verb UnattendApply -ImagePath "$($driveLetter):" -unattendPath "$finalAnswerPath") -eq $true) + { + Write-Host "SUCCESS" -ForegroundColor White -BackgroundColor DarkGreen + } + else + { + Write-Host "FAILURE" -ForegroundColor Black -BackgroundColor DarkRed + } } + } catch { + } $driverPath = "$env:SYSTEMDRIVE\DT_InstDrvs.txt" if ((Test-Path "$($driveLetter):\`$DISMTOOLS.~LS") -and ($serviceableArchitecture) -and (Test-Path -Path $driverPath -PathType Leaf)) diff --git a/Helpers/extps1/PE_Helper/pxehelpers/wds/wdshelper_server.ps1 b/Helpers/extps1/PE_Helper/pxehelpers/wds/wdshelper_server.ps1 index e843b6f65..a7149fbc0 100644 --- a/Helpers/extps1/PE_Helper/pxehelpers/wds/wdshelper_server.ps1 +++ b/Helpers/extps1/PE_Helper/pxehelpers/wds/wdshelper_server.ps1 @@ -4,7 +4,7 @@ # .'^""""""^. # '^`'. '^"""""""^. # .^"""""`' .^"""""""^. --------------------------------------------------------- -# .^""""""` ^"""""""` | DISMTools 0.8 | +# .^""""""` ^"""""""` | DISMTools 0.8.1 | # ."""""""^. `""""""""' `,` | The connected place for Windows system administration | # '`""""""`. """""""""^ `,,," --------------------------------------------------------- # '^"""""`. ^""""""""""'. .`,,,,,^ | PE Helper - Windows Deployment Services Helper Server | @@ -83,7 +83,7 @@ function Get-WindowsRole { [Console]::TreatControlCAsInput = $true -$version = "0.8" +$version = "0.8.1" Clear-Host diff --git a/Helpers/extps1/PE_Helper/tools/BDE-GUI b/Helpers/extps1/PE_Helper/tools/BDE-GUI new file mode 160000 index 000000000..44035c338 --- /dev/null +++ b/Helpers/extps1/PE_Helper/tools/BDE-GUI @@ -0,0 +1 @@ +Subproject commit 44035c3380936580633a02ea0e519de4b493fa31 diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/DSC/DiskSpaceChecker.vb b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/DSC/DiskSpaceChecker.vb index b9fe4d4e7..724876c35 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/DSC/DiskSpaceChecker.vb +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/DSC/DiskSpaceChecker.vb @@ -5,6 +5,14 @@ Imports System.Management Public Class DiskSpaceChecker + Private Function DSCText(Key As String, ParamArray values() As Object) As String + Dim template As String = GetValueFromLanguageData("DiskSpaceChecker." & Key) + If values IsNot Nothing AndAlso values.Length > 0 Then + Return String.Format(template, values) + End If + Return template + End Function + Dim progressMessage As String = "" Dim reportContents As String = "" @@ -16,48 +24,50 @@ Public Class DiskSpaceChecker Sub ListObtainedDisks(DriveObjects As ManagementObjectCollection) If DriveObjects Is Nothing Then - Throw New Exception("A null-valued object collection has been passed for the drive report") + Throw New Exception(DSCText("ReportNullDriveCollection")) End If DynaLog.LogMessage("Count of obtained disks: " & DriveObjects.Count) - reportContents &= "Amount of local disks and partitions in the host system: " & DriveObjects.Count & CrLf & CrLf + reportContents &= DSCText("ReportLocalDiskCount", DriveObjects.Count) & CrLf & CrLf If DriveObjects.Count > 0 Then DynaLog.LogMessage("Saving obtained disks to report...") For Each DriveObject As ManagementObject In DriveObjects - reportContents &= "Information for Disk " & GetObjectValue(DriveObject, "DiskIndex") & ", Partition " & (GetObjectValue(DriveObject, "Index") + 1) & CrLf & - "- Drive total size: " & GetObjectValue(DriveObject, "Size") & " bytes (~" & Converters.BytesToReadableSize(GetObjectValue(DriveObject, "Size")) & ")" & CrLf & - "- Boot partition? " & If(GetObjectValue(DriveObject, "BootPartition"), "Yes", "No") & CrLf & - "- Primary partition? " & If(GetObjectValue(DriveObject, "PrimaryPartition"), "Yes", "No") & CrLf & CrLf + reportContents &= DSCText("ReportDiskInfo", GetObjectValue(DriveObject, "DiskIndex"), + GetObjectValue(DriveObject, "Index") + 1, + GetObjectValue(DriveObject, "Size"), + Converters.BytesToReadableSize(GetObjectValue(DriveObject, "Size")), + If(GetObjectValue(DriveObject, "BootPartition"), DSCText("ReportYes"), DSCText("ReportNo")), + If(GetObjectValue(DriveObject, "PrimaryPartition"), DSCText("ReportYes"), DSCText("ReportNo"))) & CrLf & CrLf Next End If End Sub Sub ListSpaceComparison(ImageNames As List(Of String), ImageSizes As List(Of Long), Drives As ManagementObjectCollection) If ImageNames.Count = 0 Then - Throw New Exception("No names have been passed") + Throw New Exception(DSCText("ReportNoNames")) End If If ImageSizes.Count = 0 Then - Throw New Exception("No sizes have been passed") + Throw New Exception(DSCText("ReportNoSizes")) End If If Drives.Count = 0 Then - Throw New Exception("No fixed drives have been passed") + Throw New Exception(DSCText("ReportNoFixedDrives")) End If DynaLog.LogMessage("Comparing spaces of images and drives...") DynaLog.LogMessage("- Count of images: " & ImageNames.Count) DynaLog.LogMessage("- Count of drives: " & Drives.Count) - reportContents &= "Comparison of sizes:" & CrLf & CrLf + reportContents &= DSCText("ReportSizeComparison") & CrLf & CrLf DynaLog.LogMessage("Comparing spaces for drives...") For Each Drive As ManagementObject In Drives - reportContents &= "- Disk, with volume label " & Quote & GetObjectValue(Drive, "VolumeName") & Quote & " (" & GetObjectValue(Drive, "DeviceID") & "):" & CrLf + reportContents &= DSCText("ReportDiskWithVolumeLabel", Quote & GetObjectValue(Drive, "VolumeName") & Quote, GetObjectValue(Drive, "DeviceID")) & CrLf For Each ImageSize In ImageSizes If GetObjectValue(Drive, "Size") > ImageSize Then DynaLog.LogMessage("This image can be installed here.") - reportContents &= " - " & Quote & ImageNames(ImageSizes.IndexOf(ImageSize)) & Quote & " (index " & ImageSizes.IndexOf(ImageSize) + 1 & ") can be installed on this disk because there is enough free space." & CrLf + reportContents &= DSCText("ReportCanInstall", Quote & ImageNames(ImageSizes.IndexOf(ImageSize)) & Quote, ImageSizes.IndexOf(ImageSize) + 1) & CrLf Else DynaLog.LogMessage("This image cannot be installed here.") - reportContents &= " - " & Quote & ImageNames(ImageSizes.IndexOf(ImageSize)) & Quote & " (index " & ImageSizes.IndexOf(ImageSize) + 1 & ") cannot be installed on this disk because there is not enough free space." & CrLf + reportContents &= DSCText("ReportCannotInstall", Quote & ImageNames(ImageSizes.IndexOf(ImageSize)) & Quote, ImageSizes.IndexOf(ImageSize) + 1) & CrLf End If Next Next @@ -73,9 +83,27 @@ Public Class DiskSpaceChecker DynaLog.LogMessage("- File to exclude: " & ExcludedFile) Dim DirectorySize As Long = 0 If Directory.Exists(DirectoryName) Then - For Each FileInDir In Directory.GetFiles(DirectoryName, "*", SearchOption.AllDirectories) - If Path.GetFileName(FileInDir).Equals(ExcludedFile, StringComparison.OrdinalIgnoreCase) Then Continue For - DirectorySize += New FileInfo(FileInDir).Length + ' Get directories in the root first. We may have a "System Volume Information" in there. If so, + ' it will cause DSC to fail. + Dim SubDirsInDir As IEnumerable(Of String) = Directory.EnumerateDirectories(DirectoryName, "*", SearchOption.TopDirectoryOnly).Where(Function(dir) Not {"System Volume Information"}.Contains(dir)), + FilesInDir As IEnumerable(Of String) = Directory.EnumerateFiles(DirectoryName, "*.*", SearchOption.TopDirectoryOnly).Where(Function(item) Not Path.GetFileName(item).Equals(ExcludedFile, StringComparison.OrdinalIgnoreCase)) + + For Each FileInDir In FilesInDir + Try + DirectorySize += New FileInfo(FileInDir).Length + Catch ex As Exception + ' don't count it + End Try + Next + + For Each SubDirInDir In SubDirsInDir + Try + For Each FileInDir In Directory.EnumerateFiles(SubDirInDir, "*", SearchOption.AllDirectories).Where(Function(item) Not Path.GetFileName(item).Equals(ExcludedFile, StringComparison.OrdinalIgnoreCase)) + DirectorySize += New FileInfo(FileInDir).Length + Next + Catch ex As Exception + ' don't count it + End Try Next End If DynaLog.LogMessage("Reported size: " & DirectorySize & " bytes") @@ -83,9 +111,9 @@ Public Class DiskSpaceChecker End Function Sub InitializeReport() - reportContents = "Disk Space Checker Report" & CrLf & + reportContents = DSCText("ReportTitle") & CrLf & "==========================" & CrLf & - "Report generated by HotInstall (version " & My.Application.Info.Version.ToString() & ")" & CrLf & CrLf + DSCText("ReportGeneratedBy", My.Application.Info.Version.ToString()) & CrLf & CrLf End Sub Sub ListFreeSpace(FreeSpace As Long, SpaceToCompare As Long, Optional SystemDriveMO As ManagementObject = Nothing) @@ -94,23 +122,23 @@ Public Class DiskSpaceChecker DynaLog.LogMessage("- Referenced space: " & SpaceToCompare) If SystemDriveMO IsNot Nothing Then DynaLog.LogMessage("System drive management object is something. We select the drive") - reportContents &= "The system drive is mounted to " & GetObjectValue(SystemDriveMO, "DeviceID") & CrLf & CrLf + reportContents &= DSCText("ReportSystemDrive", GetObjectValue(SystemDriveMO, "DeviceID")) & CrLf & CrLf End If DynaLog.LogMessage("Saving information to report...") - reportContents &= "Disc image files will be copied to the system drive shown above:" & CrLf & - "- The total size of the disc image files is " & SpaceToCompare & " bytes (~" & Converters.BytesToReadableSize(SpaceToCompare) & ")" & CrLf & - "- The free space on this drive is " & FreeSpace & " bytes (~" & Converters.BytesToReadableSize(FreeSpace) & ")" & CrLf & CrLf + reportContents &= DSCText("ReportCopyPlan") & CrLf & + DSCText("ReportTotalImageSize", SpaceToCompare, Converters.BytesToReadableSize(SpaceToCompare)) & CrLf & + DSCText("ReportFreeSpace", FreeSpace, Converters.BytesToReadableSize(FreeSpace)) & CrLf & CrLf - reportContents &= Converters.BytesToReadableSize(FreeSpace) & " > " & Converters.BytesToReadableSize(SpaceToCompare) & " ? " & If(FreeSpace > SpaceToCompare, "Yes", "No") & CrLf & - Converters.BytesToReadableSize(FreeSpace) & " > " & Converters.BytesToReadableSize(SpaceToCompare * 2) & " ? " & If(FreeSpace > SpaceToCompare, "Yes", "No") & CrLf & CrLf + reportContents &= Converters.BytesToReadableSize(FreeSpace) & " > " & Converters.BytesToReadableSize(SpaceToCompare) & " ? " & If(FreeSpace > SpaceToCompare, DSCText("ReportYes"), DSCText("ReportNo")) & CrLf & + Converters.BytesToReadableSize(FreeSpace) & " > " & Converters.BytesToReadableSize(SpaceToCompare * 2) & " ? " & If(FreeSpace > SpaceToCompare * 2, DSCText("ReportYes"), DSCText("ReportNo")) & CrLf & CrLf If FreeSpace < (SpaceToCompare * 2) Then - reportContents &= "There may not be enough space to copy the disc image files to this drive." & CrLf & CrLf + reportContents &= DSCText("ReportMayNotHaveEnoughSpace") & CrLf & CrLf ElseIf FreeSpace < SpaceToCompare Then - reportContents &= "There is not enough space to copy the disc image files to this drive." & CrLf & CrLf + reportContents &= DSCText("ReportNotEnoughSpace") & CrLf & CrLf Else - reportContents &= "There is plenty of space to copy the disc image files to this drive." & CrLf & CrLf + reportContents &= DSCText("ReportPlentyOfSpace") & CrLf & CrLf End If End Sub @@ -149,7 +177,7 @@ Public Class DiskSpaceChecker DynaLog.LogMessage("Folder Size: " & FolderSize & " bytes") If FreeSpaceOnSystemDrive < FolderSize Then DynaLog.LogMessage("Free space is lower than folder size.") - Throw New Exception("There is not enough space to copy the disc image files to the system drive. Please free up some space and try again.") + Throw New Exception(DSCText("ReportNotEnoughSystemDriveSpace")) End If ' Get information about the installation image and compare the expanded sizes of all indexes with the total space of all fixed drives progressMessage = GetValueFromLanguageData("DiskSpaceChecker.DSC_GetImageFileInfo") @@ -174,7 +202,7 @@ Public Class DiskSpaceChecker End If End If Else - Throw New Exception("We could not detect available fixed drives in your system") + Throw New Exception(DSCText("ReportFixedDrivesNotDetected")) End If End Sub @@ -217,7 +245,7 @@ Public Class DiskSpaceChecker Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted Dim success As Boolean = True If e.Error IsNot Nothing Then - If e.Error.Message.StartsWith("WARNING ONLY: ", StringComparison.OrdinalIgnoreCase) Then + If e.Error.Message.StartsWith(DSCText("ReportWarningOnlyPrefix"), StringComparison.OrdinalIgnoreCase) Then MsgBox(e.Error.Message, vbOKOnly + vbExclamation, Text) Else success = False diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/HotInstall.vbproj b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/HotInstall.vbproj index 7e7a17aaf..bdce4d1b3 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/HotInstall.vbproj +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/HotInstall.vbproj @@ -1,4 +1,4 @@ - + @@ -59,7 +59,7 @@ ..\packages\ini-parser.2.5.2\lib\net20\INIFileParser.dll - ..\..\..\..\..\..\packages\Microsoft.Dism.6.0.0\lib\net472\Microsoft.Dism.dll + ..\..\..\..\..\..\packages\Microsoft.Dism.6.1.0\lib\net472\Microsoft.Dism.dll @@ -88,6 +88,7 @@ + DiskSpaceChecker.vb @@ -210,4 +211,4 @@ IF EXIST "$(ProjectDir)..\CopyOutput.ps1" ( "%25WINDIR%25\system32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -File "$(ProjectDir)..\CopyOutput.ps1" ) - \ No newline at end of file + diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_en.ini b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_en.ini index b2aed97ab..b34fe7bb9 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_en.ini +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_en.ini @@ -1,4 +1,4 @@ -; This INI file contains the translations for your language +; This INI file contains the translations for your language ; CREATING AND/OR IMPROVING A TRANSLATION ; Please replace the English strings with equivalents from your language. These follow @@ -14,8 +14,7 @@ ; -- Section Reference ; The names of the sections are derived from the names of the form classes. For example, ; to create translations tailored to the ISO creator, a section called "ISOCreator" -; needs to be made. Common words (such as Yes, No, Cancel...) are placed in the Common -; section. +; Window words and actions are kept in the section that owns the window or scenario. ; -------------------- ; -- User Guidelines ; Please refrain from renaming the item keys unless the codebase changes to @@ -26,28 +25,31 @@ ; and/or modified this translation. Feel free to add yourself to the author list of this ; language file if you contributed to improve it. [LanguageFileInformation] +LanguageCode = "en-US" LanguageName = "English Language Pack" LanguageAuthor = "CodingWonders" ; Everything after this comment is specific to the language translation. It's ; recommended to go from top to bottom of the window. -[Common] -Common_Yes = "Yes" -Common_No = "No" -Common_Help = "Help" -Common_OK = "OK" -Common_Cancel = "Cancel" -Common_Back = "Back" -Common_Next = "Next" -Common_Browse = "Browse..." - [SplashScreen] +WindowTitle = "HotInstall Operating System Installer" +VersionLabel = "HotInstall OS Installer, version " OSInstTitle = "Operating System Installation" OSInstStatus_StartingUp = "Setup is starting..." OSInstStatus_Restarting = "Setup will continue after restarting your computer" [MainForm] +ReviewImageInfo_IndexColumnHeader = "#" +ReviewImageInfo_BootImageArchitecturePlaceholder = "" +ReviewImageInfo_BootImageVersionPlaceholder = "" +ReviewImageInfo_BootImageNamePlaceholder = "" +ReviewImageInfo_ComputerArchitecturePlaceholder = "" +PreparationPanel_GenericProgress = "Progress:" +PreparationPanel_ApiProgress = "API progress: {0}%" +NavigationBackButtonText = "Back" +NavigationNextButtonText = "Next" +NavigationExitButtonText = "Cancel" BootMgrEntryName = "DISMTools Operating System Installation" Win7IncompatibilityError = "This program is incompatible with Windows 7 and Server 2008 R2 due to lack of support for the DISM API." NonAdminError = "This application must be run as an administrator." @@ -55,7 +57,7 @@ VERIFY_Disclaimer_Error = "You must agree to the important notices before procee VERIFY_ImageInfo_Question = "Does this disc image have the image you want to test?" GetImageInfo_FileDoesNotExistError = "The Windows image {quot;}{0}{quot;} does not exist in the file system." ClosureQuestion = "Are you sure that you want to exit the installer?" -CopyFiles_ProgressMessage = "Copying files from disc image... (Items copied thus far: {0}/{1})" +CopyFiles_ProgressMessage = "Copying from disc image... {quot;}{0}{quot;}" UseWindowsImage_Mount_IndexLT1 = "When mounting an image, the index must be greater than 0" BCDEditConfiguratorError = "The BCDEdit process, with command-line arguments {quot;}{0}{quot;}, has failed with exit code {1} ({2}). Check this command with these arguments manually." BCDEditConfiguratorError_Simple = "Boot entry creation has failed with exit code {0} ({1})" @@ -125,9 +127,35 @@ ExportDriversFolderDialog = "Specify the path to export drivers to:" DriverExporter_MessageTitle = "Driver export" DriverExporter_SuccessMessage = "The drivers have been exported successfully" DriverExporter_FailureMessage = "The driver export process has exited with code {0}" +ImageInformationSummary_Header = "Information summary for {0} image(s):" +ImageInformationSummary_ImageBlock = "Image {0} of {1}:{crlf;}{crlf;} - Image version: {2}{crlf;} - Image name: {3}{crlf;} - Image description: {4}{crlf;} - Image size: {5} bytes ({6}){crlf;} - Architecture: {7}{crlf;} - HAL: {8}{crlf;} - Service Pack build: {9}{crlf;} - Service Pack level: {10}{crlf;} - Edition: {11}{crlf;} - Installation type: {12}{crlf;} - Product type: {13}{crlf;} - Product suite: {14}{crlf;} - System root directory: {15}{crlf;} - File count: {16} file(s) in {17} folder(s){crlf;} - Creation date: {18}{crlf;} - Modification date: {19}{crlf;} - Languages: {20}{crlf;}{crlf;}" GetImageInformationButton = "Get image information" [DiskSpaceChecker] +ReportNullDriveCollection = "A null-valued object collection has been passed for the drive report" +ReportLocalDiskCount = "Amount of local disks and partitions in the host system: {0}" +ReportDiskInfo = "Information for Disk {0}, Partition {1}{crlf;}- Drive total size: {2} bytes (~{3}){crlf;}- Boot partition? {4}{crlf;}- Primary partition? {5}" +ReportYes = "Yes" +ReportNo = "No" +ReportNoNames = "No names have been passed" +ReportNoSizes = "No sizes have been passed" +ReportNoFixedDrives = "No fixed drives have been passed" +ReportSizeComparison = "Comparison of sizes:" +ReportDiskWithVolumeLabel = "- Disk, with volume label {0} ({1}):" +ReportCanInstall = " - {0} (index {1}) can be installed on this disk because there is enough free space." +ReportCannotInstall = " - {0} (index {1}) cannot be installed on this disk because there is not enough free space." +ReportTitle = "Disk Space Checker Report" +ReportGeneratedBy = "Report generated by HotInstall (version {0})" +ReportSystemDrive = "The system drive is mounted to {0}" +ReportCopyPlan = "Disc image files will be copied to the system drive shown above:" +ReportTotalImageSize = "- The total size of the disc image files is {0} bytes (~{1})" +ReportFreeSpace = "- The free space on this drive is {0} bytes (~{1})" +ReportMayNotHaveEnoughSpace = "There may not be enough space to copy the disc image files to this drive." +ReportNotEnoughSpace = "There is not enough space to copy the disc image files to this drive." +ReportPlentyOfSpace = "There is plenty of space to copy the disc image files to this drive." +ReportNotEnoughSystemDriveSpace = "There is not enough space to copy the disc image files to the system drive. Please free up some space and try again." +ReportFixedDrivesNotDetected = "We could not detect available fixed drives in your system" +ReportWarningOnlyPrefix = "WARNING ONLY: " WndTitle = "Disk Space Checker" WndDesc = "Please wait while the installer checks the size of disc image files and the capacity of the drives in your computer. This can take some time." DSC_GenericProgress = "Progress:" @@ -135,4 +163,4 @@ DSC_GetSysDrives = "Getting system drives..." DSC_GetSizeOfImageFiles = "Getting size of disc image files..." DSC_GetImageFileInfo = "Getting image file information..." DSC_GetImageNamesAndSizes = "Getting image names and sizes..." -DSC_CompareSizes = "Comparing image sizes with free space..." \ No newline at end of file +DSC_CompareSizes = "Comparing image sizes with free space..." diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_es.ini b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_es.ini index b51fc2618..245700cc3 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_es.ini +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_es.ini @@ -1,4 +1,4 @@ -; This INI file contains the translations for your language +; This INI file contains the translations for your language ; CREATING AND/OR IMPROVING A TRANSLATION ; Please replace the English strings with equivalents from your language. These follow @@ -14,8 +14,7 @@ ; -- Section Reference ; The names of the sections are derived from the names of the form classes. For example, ; to create translations tailored to the ISO creator, a section called "ISOCreator" -; needs to be made. Common words (such as Yes, No, Cancel...) are placed in the Common -; section. +; Window words and actions are kept in the section that owns the window or scenario. ; -------------------- ; -- User Guidelines ; Please refrain from renaming the item keys unless the codebase changes to @@ -26,28 +25,31 @@ ; and/or modified this translation. Feel free to add yourself to the author list of this ; language file if you contributed to improve it. [LanguageFileInformation] +LanguageCode = "es-ES" LanguageName = "Spanish Language Pack" LanguageAuthor = "CodingWonders" ; Everything after this comment is specific to the language translation. It's ; recommended to go from top to bottom of the window. -[Common] -Common_Yes = "Sí" -Common_No = "No" -Common_Help = "Ayuda" -Common_OK = "Aceptar" -Common_Cancel = "Salir" -Common_Back = "Atrás" -Common_Next = "Siguiente" -Common_Browse = "Examinar..." - [SplashScreen] +WindowTitle = "Instalador del sistema operativo HotInstall" +VersionLabel = "Instalador de SO HotInstall, versión " OSInstTitle = "Instalación del sistema operativo" OSInstStatus_StartingUp = "El programa de instalación se está iniciando..." OSInstStatus_Restarting = "El programa de instalación continuará después de reiniciar el equipo" [MainForm] +ReviewImageInfo_IndexColumnHeader = "#" +ReviewImageInfo_BootImageArchitecturePlaceholder = "" +ReviewImageInfo_BootImageVersionPlaceholder = "" +ReviewImageInfo_BootImageNamePlaceholder = "" +ReviewImageInfo_ComputerArchitecturePlaceholder = "" +PreparationPanel_GenericProgress = "Progreso:" +PreparationPanel_ApiProgress = "Progreso de la API: {0}%" +NavigationBackButtonText = "Atrás" +NavigationNextButtonText = "Siguiente" +NavigationExitButtonText = "Salir" BootMgrEntryName = "DISMTools - Instalación del sistema operativo" Win7IncompatibilityError = "Este programa no es compatible con Windows 7 y Server 2008 R2 debido a la falta de compatibilidad con la API de DISM." NonAdminError = "Esta aplicación debe ser ejecutada como administrador." @@ -55,7 +57,7 @@ VERIFY_Disclaimer_Error = "Debe aceptar los avisos importantes para continuar." VERIFY_ImageInfo_Question = "¿Esta imagen de disco contiene la imagen que desea probar?" GetImageInfo_FileDoesNotExistError = "La imagen de Windows {quot;}{0}{quot;} no existe." ClosureQuestion = "¿Está seguro de que desea salir del instalador?" -CopyFiles_ProgressMessage = "Copiando archivos de la imagen de disco... (Archivos copiados hasta ahora: {0}/{1})" +CopyFiles_ProgressMessage = "Copiando de la imagen de disco... {quot;}{0}{quot;}" UseWindowsImage_Mount_IndexLT1 = "A la hora de montar una imagen, el índice debe ser mayor de 0" BCDEditConfiguratorError = "El proceso BCDEdit, con argumentos {quot;}{0}{quot;}, ha fallado con código de salida {1} ({2}). Compruebe este comando con estos argumentos de forma manual." BCDEditConfiguratorError_Simple = "La creación de la entrada de arranque ha fallado con código de salida {0} ({1})" @@ -125,9 +127,35 @@ ExportDriversFolderDialog = "Especifique la ruta en donde guardar los controlado DriverExporter_MessageTitle = "Exportación de controladores" DriverExporter_SuccessMessage = "Los controladores se han exportado correctamente." DriverExporter_FailureMessage = "El proceso de exportación de controladores ha salido con el error {0}" +ImageInformationSummary_Header = "Resumen de información de {0} imagen(es):" +ImageInformationSummary_ImageBlock = "Imagen {0} de {1}:{crlf;}{crlf;} - Versión de la imagen: {2}{crlf;} - Nombre de la imagen: {3}{crlf;} - Descripción de la imagen: {4}{crlf;} - Tamaño de la imagen: {5} bytes ({6}){crlf;} - Arquitectura: {7}{crlf;} - HAL: {8}{crlf;} - Compilación del Service Pack: {9}{crlf;} - Nivel del Service Pack: {10}{crlf;} - Edición: {11}{crlf;} - Tipo de instalación: {12}{crlf;} - Tipo de producto: {13}{crlf;} - Suite del producto: {14}{crlf;} - Directorio raíz del sistema: {15}{crlf;} - Recuento de archivos: {16} archivo(s) en {17} carpeta(s){crlf;} - Fecha de creación: {18}{crlf;} - Fecha de modificación: {19}{crlf;} - Idiomas: {20}{crlf;}{crlf;}" GetImageInformationButton = "Obtener información de la imagen" [DiskSpaceChecker] +ReportNullDriveCollection = "Se ha pasado una colección de objetos nula para el informe de unidades" +ReportLocalDiskCount = "Cantidad de discos locales y particiones en el sistema host: {0}" +ReportDiskInfo = "Información del disco {0}, partición {1}{crlf;}- Tamaño total de la unidad: {2} bytes (~{3}){crlf;}- ¿Partición de arranque? {4}{crlf;}- ¿Partición primaria? {5}" +ReportYes = "Sí" +ReportNo = "No" +ReportNoNames = "No se han pasado nombres" +ReportNoSizes = "No se han pasado tamaños" +ReportNoFixedDrives = "No se han pasado unidades fijas" +ReportSizeComparison = "Comparación de tamaños:" +ReportDiskWithVolumeLabel = "- Disco, con etiqueta de volumen {0} ({1}):" +ReportCanInstall = " - {0} (índice {1}) se puede instalar en este disco porque hay suficiente espacio libre." +ReportCannotInstall = " - {0} (índice {1}) no se puede instalar en este disco porque no hay suficiente espacio libre." +ReportTitle = "Informe de Disk Space Checker" +ReportGeneratedBy = "Informe generado por HotInstall (versión {0})" +ReportSystemDrive = "La unidad del sistema está montada en {0}" +ReportCopyPlan = "Los archivos de imagen de disco se copiarán en la unidad del sistema indicada arriba:" +ReportTotalImageSize = "- El tamaño total de los archivos de imagen de disco es {0} bytes (~{1})" +ReportFreeSpace = "- El espacio libre en esta unidad es {0} bytes (~{1})" +ReportMayNotHaveEnoughSpace = "Puede que no haya suficiente espacio para copiar los archivos de imagen de disco en esta unidad." +ReportNotEnoughSpace = "No hay suficiente espacio para copiar los archivos de imagen de disco en esta unidad." +ReportPlentyOfSpace = "Hay suficiente espacio para copiar los archivos de imagen de disco en esta unidad." +ReportNotEnoughSystemDriveSpace = "No hay suficiente espacio para copiar los archivos de imagen de disco en la unidad del sistema. Libera espacio e inténtalo de nuevo." +ReportFixedDrivesNotDetected = "No se pudieron detectar unidades fijas disponibles en el sistema" +ReportWarningOnlyPrefix = "SOLO ADVERTENCIA: " WndTitle = "Comprobador de espacio en disco" WndDesc = "Espere mientras el instalador comprueba el tamaño de los archivos de la imagen de disco y la capacidad de los discos de su ordenador. Esto puede llevar algo de tiempo." DSC_GenericProgress = "Progreso:" @@ -135,4 +163,4 @@ DSC_GetSysDrives = "Obteniendo discos del sistema..." DSC_GetSizeOfImageFiles = "Obteniendo el tamaño de los archivos de la imagen de disco..." DSC_GetImageFileInfo = "Obteniendo información del archivo de imagen..." DSC_GetImageNamesAndSizes = "Obteniendo nombres y tamaños de las imágenes..." -DSC_CompareSizes = "Comparando tamaños de las imágenes con el espacio libre..." \ No newline at end of file +DSC_CompareSizes = "Comparando tamaños de las imágenes con el espacio libre..." diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_fr.ini b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_fr.ini index 29c8dfaac..35204ffd4 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_fr.ini +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_fr.ini @@ -1,4 +1,4 @@ -; This INI file contains the translations for your language +; This INI file contains the translations for your language ; CREATING AND/OR IMPROVING A TRANSLATION ; Please replace the English strings with equivalents from your language. These follow @@ -14,8 +14,7 @@ ; -- Section Reference ; The names of the sections are derived from the names of the form classes. For example, ; to create translations tailored to the ISO creator, a section called "ISOCreator" -; needs to be made. Common words (such as Yes, No, Cancel...) are placed in the Common -; section. +; Window words and actions are kept in the section that owns the window or scenario. ; -------------------- ; -- User Guidelines ; Please refrain from renaming the item keys unless the codebase changes to @@ -26,28 +25,31 @@ ; and/or modified this translation. Feel free to add yourself to the author list of this ; language file if you contributed to improve it. [LanguageFileInformation] +LanguageCode = "fr-FR" LanguageName = "French Language Pack" LanguageAuthor = "CodingWonders" ; Everything after this comment is specific to the language translation. It's ; recommended to go from top to bottom of the window. -[Common] -Common_Yes = "Oui" -Common_No = "Non" -Common_Help = "Aide" -Common_OK = "OK" -Common_Cancel = "Annuler" -Common_Back = "Retour" -Common_Next = "Suivant" -Common_Browse = "Parcourir..." - [SplashScreen] +WindowTitle = "Programme d’installation du système d’exploitation HotInstall" +VersionLabel = "Installateur de système d’exploitation HotInstall, version " OSInstTitle = "Installation du système d'exploitation" OSInstStatus_StartingUp = "Le programme d'installation démarre..." OSInstStatus_Restarting = "Le programme d'installation reprendra après le redémarrage de l'ordinateur" [MainForm] +ReviewImageInfo_IndexColumnHeader = "#" +ReviewImageInfo_BootImageArchitecturePlaceholder = "" +ReviewImageInfo_BootImageVersionPlaceholder = "" +ReviewImageInfo_BootImageNamePlaceholder = "" +ReviewImageInfo_ComputerArchitecturePlaceholder = "" +PreparationPanel_GenericProgress = "Progression :" +PreparationPanel_ApiProgress = "Progression de l’API : {0}%" +NavigationBackButtonText = "Retour" +NavigationNextButtonText = "Suivant" +NavigationExitButtonText = "Annuler" BootMgrEntryName = "Installation du système d'exploitation DISMTools" Win7IncompatibilityError = "Ce programme est incompatible avec Windows 7 et Server 2008 R2 en raison du manque de support pour l'API DISM." NonAdminError = "Cette application doit être exécutée en tant qu'administrateur." @@ -55,7 +57,7 @@ VERIFY_Disclaimer_Error = "Vous devez accepter les avis importants avant de cont VERIFY_ImageInfo_Question = "Cette image disque contient-elle l'image que vous souhaitez tester ?" GetImageInfo_FileDoesNotExistError = "L'image Windows {quot;}{0}{quot;} n'existe pas dans le système de fichiers." ClosureQuestion = "Êtes-vous sûr de vouloir quitter l'installateur ?" -CopyFiles_ProgressMessage = "Copie des fichiers depuis l'image disque... (Éléments copiés jusqu'à présent : {0}/{1})" +CopyFiles_ProgressMessage = "Copie depuis l'image disque... {quot;}{0}{quot;}" UseWindowsImage_Mount_IndexLT1 = "Lors du montage d'une image, l'index doit être supérieur à 0" BCDEditConfiguratorError = "Le processus BCDEdit, avec les arguments de ligne de commande {quot;}{0}{quot;}, a échoué avec le code de sortie {1} ({2}). Vérifiez cette commande avec ces arguments manuellement." BCDEditConfiguratorError_Simple = "La création de l'entrée de démarrage a échoué avec le code de sortie {0} ({1})" @@ -125,9 +127,35 @@ ExportDriversFolderDialog = "Spécifiez le chemin pour exporter les pilotes :" DriverExporter_MessageTitle = "Exportation de pilotes" DriverExporter_SuccessMessage = "Les pilotes ont été exportés avec succès" DriverExporter_FailureMessage = "Le processus d'exportation des pilotes s'est terminé avec le code {0}" +ImageInformationSummary_Header = "Résumé des informations pour {0} image(s) :" +ImageInformationSummary_ImageBlock = "Image {0} sur {1} :{crlf;}{crlf;} - Version de l’image : {2}{crlf;} - Nom de l’image : {3}{crlf;} - Description de l’image : {4}{crlf;} - Taille de l’image : {5} octets ({6}){crlf;} - Architecture : {7}{crlf;} - HAL : {8}{crlf;} - Build du Service Pack : {9}{crlf;} - Niveau du Service Pack : {10}{crlf;} - Édition : {11}{crlf;} - Type d’installation : {12}{crlf;} - Type de produit : {13}{crlf;} - Suite du produit : {14}{crlf;} - Répertoire racine du système : {15}{crlf;} - Nombre de fichiers : {16} fichier(s) dans {17} dossier(s){crlf;} - Date de création : {18}{crlf;} - Date de modification : {19}{crlf;} - Langues : {20}{crlf;}{crlf;}" GetImageInformationButton = "Obtenir des informations sur l'image" [DiskSpaceChecker] +ReportNullDriveCollection = "Une collection d’objets nulle a été transmise pour le rapport des lecteurs" +ReportLocalDiskCount = "Nombre de disques locaux et de partitions dans le système hôte : {0}" +ReportDiskInfo = "Informations pour le disque {0}, partition {1}{crlf;}- Taille totale du lecteur : {2} octets (~{3}){crlf;}- Partition de démarrage ? {4}{crlf;}- Partition principale ? {5}" +ReportYes = "Oui" +ReportNo = "Non" +ReportNoNames = "Aucun nom n’a été transmis" +ReportNoSizes = "Aucune taille n’a été transmise" +ReportNoFixedDrives = "Aucun lecteur fixe n’a été transmis" +ReportSizeComparison = "Comparaison des tailles :" +ReportDiskWithVolumeLabel = "- Disque, avec l’étiquette de volume {0} ({1}) :" +ReportCanInstall = " - {0} (index {1}) peut être installé sur ce disque car l’espace libre est suffisant." +ReportCannotInstall = " - {0} (index {1}) ne peut pas être installé sur ce disque car l’espace libre est insuffisant." +ReportTitle = "Rapport de Disk Space Checker" +ReportGeneratedBy = "Rapport généré par HotInstall (version {0})" +ReportSystemDrive = "Le lecteur système est monté sur {0}" +ReportCopyPlan = "Les fichiers d’image disque seront copiés vers le lecteur système indiqué ci dessus :" +ReportTotalImageSize = "- La taille totale des fichiers d’image disque est de {0} octets (~{1})" +ReportFreeSpace = "- L’espace libre sur ce lecteur est de {0} octets (~{1})" +ReportMayNotHaveEnoughSpace = "Il se peut que l’espace soit insuffisant pour copier les fichiers d’image disque sur ce lecteur." +ReportNotEnoughSpace = "L’espace est insuffisant pour copier les fichiers d’image disque sur ce lecteur." +ReportPlentyOfSpace = "L’espace est suffisant pour copier les fichiers d’image disque sur ce lecteur." +ReportNotEnoughSystemDriveSpace = "L’espace est insuffisant pour copier les fichiers d’image disque vers le lecteur système. Libérez de l’espace, puis réessayez." +ReportFixedDrivesNotDetected = "Impossible de détecter les lecteurs fixes disponibles sur votre système" +ReportWarningOnlyPrefix = "AVERTISSEMENT UNIQUEMENT : " WndTitle = "Vérificateur d'espace disque" WndDesc = "Veuillez patienter pendant que l'installateur vérifie la taille des fichiers image disque et la capacité des lecteurs de votre ordinateur. Cela peut prendre un certain temps." DSC_GenericProgress = "Progression :" @@ -135,4 +163,4 @@ DSC_GetSysDrives = "Obtention des lecteurs système..." DSC_GetSizeOfImageFiles = "Obtention de la taille des fichiers image disque..." DSC_GetImageFileInfo = "Obtention des informations sur les fichiers image..." DSC_GetImageNamesAndSizes = "Obtention des noms et tailles des images..." -DSC_CompareSizes = "Comparaison des tailles des images avec l'espace libre..." \ No newline at end of file +DSC_CompareSizes = "Comparaison des tailles des images avec l'espace libre..." diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_it.ini b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_it.ini index 8c24a54a9..3eea1b9c1 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_it.ini +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_it.ini @@ -14,8 +14,7 @@ ; -- Section Reference ; The names of the sections are derived from the names of the form classes. For example, ; to create translations tailored to the ISO creator, a section called "ISOCreator" -; needs to be made. Common words (such as Yes, No, Cancel...) are placed in the Common -; section. +; Window words and actions are kept in the section that owns the window or scenario. ; -------------------- ; -- User Guidelines ; Please refrain from renaming the item keys unless the codebase changes to @@ -26,28 +25,31 @@ ; and/or modified this translation. Feel free to add yourself to the author list of this ; language file if you contributed to improve it. [LanguageFileInformation] +LanguageCode = "it-IT" LanguageName = "Italian Language Pack" LanguageAuthor = "CodingWonders" ; Everything after this comment is specific to the language translation. It's ; recommended to go from top to bottom of the window. -[Common] -Common_Yes = "Sì" -Common_No = "No" -Common_Help = "Aiuto" -Common_OK = "OK" -Common_Cancel = "Annulla" -Common_Back = "Indietro" -Common_Next = "Avanti" -Common_Browse = "Sfoglia..." - [SplashScreen] +WindowTitle = "Programma di installazione del sistema operativo HotInstall" +VersionLabel = "Programma di installazione del sistema operativo HotInstall, versione " OSInstTitle = "Installazione del sistema operativo" OSInstStatus_StartingUp = "L'installazione sta iniziando..." OSInstStatus_Restarting = "L'installazione continuerà dopo il riavvio del computer" [MainForm] +ReviewImageInfo_IndexColumnHeader = "#" +ReviewImageInfo_BootImageArchitecturePlaceholder = "" +ReviewImageInfo_BootImageVersionPlaceholder = "" +ReviewImageInfo_BootImageNamePlaceholder = "" +ReviewImageInfo_ComputerArchitecturePlaceholder = "" +PreparationPanel_GenericProgress = "Avanzamento:" +PreparationPanel_ApiProgress = "Avanzamento API: {0}%" +NavigationBackButtonText = "Indietro" +NavigationNextButtonText = "Avanti" +NavigationExitButtonText = "Annulla" BootMgrEntryName = "Installazione del sistema operativo DISMTools" Win7IncompatibilityError = "Questo programma è incompatibile con Windows 7 e Server 2008 R2 a causa della mancanza di supporto per l'API DISM." NonAdminError = "Questa applicazione deve essere eseguita come amministratore." @@ -55,7 +57,7 @@ VERIFY_Disclaimer_Error = "Devi accettare gli avvisi importanti prima di procede VERIFY_ImageInfo_Question = "Questa immagine del disco contiene l'immagine che vuoi testare?" GetImageInfo_FileDoesNotExistError = "L'immagine di Windows {quot;}{0}{quot;} non esiste nel file system." ClosureQuestion = "Sei sicuro di voler uscire dall'installatore?" -CopyFiles_ProgressMessage = "Copia dei file dall'immagine del disco... (Elementi copiati finora: {0}/{1})" +CopyFiles_ProgressMessage = "Copia dall'immagine del disco... {quot;}{0}{quot;}" UseWindowsImage_Mount_IndexLT1 = "Quando si monta un'immagine, l'indice deve essere maggiore di 0" BCDEditConfiguratorError = "Il processo BCDEdit, con argomenti della riga di comando {quot;}{0}{quot;}, è fallito con codice di uscita {1} ({2}). Controlla manualmente questo comando con questi argomenti." BCDEditConfiguratorError_Simple = "La creazione della voce di avvio è fallita con codice di uscita {0} ({1})" @@ -125,9 +127,35 @@ ExportDriversFolderDialog = "Specifica il percorso per esportare i driver:" DriverExporter_MessageTitle = "Esportazione driver" DriverExporter_SuccessMessage = "I driver sono stati esportati con successo" DriverExporter_FailureMessage = "Il processo di esportazione dei driver è terminato con codice {0}" +ImageInformationSummary_Header = "Riepilogo informazioni per {0} immagine/i:" +ImageInformationSummary_ImageBlock = "Immagine {0} di {1}:{crlf;}{crlf;} - Versione immagine: {2}{crlf;} - Nome immagine: {3}{crlf;} - Descrizione immagine: {4}{crlf;} - Dimensione immagine: {5} byte ({6}){crlf;} - Architettura: {7}{crlf;} - HAL: {8}{crlf;} - Build del Service Pack: {9}{crlf;} - Livello del Service Pack: {10}{crlf;} - Edizione: {11}{crlf;} - Tipo di installazione: {12}{crlf;} - Tipo di prodotto: {13}{crlf;} - Suite prodotto: {14}{crlf;} - Directory radice del sistema: {15}{crlf;} - Numero di file: {16} file in {17} cartella/e{crlf;} - Data di creazione: {18}{crlf;} - Data di modifica: {19}{crlf;} - Lingue: {20}{crlf;}{crlf;}" GetImageInformationButton = "Ottenere informazioni sull'immagine" [DiskSpaceChecker] +ReportNullDriveCollection = "È stata passata una raccolta di oggetti nulla per il report delle unità" +ReportLocalDiskCount = "Numero di dischi locali e partizioni nel sistema host: {0}" +ReportDiskInfo = "Informazioni per disco {0}, partizione {1}{crlf;}- Dimensione totale dell’unità: {2} byte (~{3}){crlf;}- Partizione di avvio? {4}{crlf;}- Partizione primaria? {5}" +ReportYes = "Sì" +ReportNo = "No" +ReportNoNames = "Non è stato passato alcun nome" +ReportNoSizes = "Non è stata passata alcuna dimensione" +ReportNoFixedDrives = "Non è stata passata alcuna unità fissa" +ReportSizeComparison = "Confronto delle dimensioni:" +ReportDiskWithVolumeLabel = "- Disco, con etichetta volume {0} ({1}):" +ReportCanInstall = " - {0} (indice {1}) può essere installata su questo disco perché c’è abbastanza spazio libero." +ReportCannotInstall = " - {0} (indice {1}) non può essere installata su questo disco perché non c’è abbastanza spazio libero." +ReportTitle = "Report di Disk Space Checker" +ReportGeneratedBy = "Report generato da HotInstall (versione {0})" +ReportSystemDrive = "L’unità di sistema è montata in {0}" +ReportCopyPlan = "I file immagine disco verranno copiati nell’unità di sistema indicata sopra:" +ReportTotalImageSize = "- La dimensione totale dei file immagine disco è {0} byte (~{1})" +ReportFreeSpace = "- Lo spazio libero in questa unità è {0} byte (~{1})" +ReportMayNotHaveEnoughSpace = "Potrebbe non esserci spazio sufficiente per copiare i file immagine disco in questa unità." +ReportNotEnoughSpace = "Non c’è spazio sufficiente per copiare i file immagine disco in questa unità." +ReportPlentyOfSpace = "C’è spazio sufficiente per copiare i file immagine disco in questa unità." +ReportNotEnoughSystemDriveSpace = "Non c’è spazio sufficiente per copiare i file immagine disco nell’unità di sistema. Libera spazio e riprova." +ReportFixedDrivesNotDetected = "Non è stato possibile rilevare unità fisse disponibili nel sistema" +ReportWarningOnlyPrefix = "SOLO AVVISO: " WndTitle = "Controllo dello Spazio su Disco" WndDesc = "Attendere mentre l'installatore controlla la dimensione dei file immagine del disco e la capacità delle unità nel computer. Questo può richiedere del tempo." DSC_GenericProgress = "Progresso:" @@ -135,4 +163,4 @@ DSC_GetSysDrives = "Ottenimento delle unità di sistema..." DSC_GetSizeOfImageFiles = "Ottenimento della dimensione dei file immagine del disco..." DSC_GetImageFileInfo = "Ottenimento delle informazioni sui file immagine..." DSC_GetImageNamesAndSizes = "Ottenimento dei nomi e delle dimensioni delle immagini..." -DSC_CompareSizes = "Confronto delle dimensioni delle immagini con lo spazio libero..." \ No newline at end of file +DSC_CompareSizes = "Confronto delle dimensioni delle immagini con lo spazio libero..." diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_pt.ini b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_pt.ini index ab4588bc0..383c6af2f 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_pt.ini +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Languages/lang_pt.ini @@ -14,8 +14,7 @@ ; -- Section Reference ; The names of the sections are derived from the names of the form classes. For example, ; to create translations tailored to the ISO creator, a section called "ISOCreator" -; needs to be made. Common words (such as Yes, No, Cancel...) are placed in the Common -; section. +; Window words and actions are kept in the section that owns the window or scenario. ; -------------------- ; -- User Guidelines ; Please refrain from renaming the item keys unless the codebase changes to @@ -26,28 +25,31 @@ ; and/or modified this translation. Feel free to add yourself to the author list of this ; language file if you contributed to improve it. [LanguageFileInformation] +LanguageCode = "pt-PT" LanguageName = "Portuguese Language Pack" LanguageAuthor = "CodingWonders" ; Everything after this comment is specific to the language translation. It's ; recommended to go from top to bottom of the window. -[Common] -Common_Yes = "Sim" -Common_No = "Não" -Common_Help = "Ajuda" -Common_OK = "OK" -Common_Cancel = "Cancelar" -Common_Back = "Voltar" -Common_Next = "Próximo" -Common_Browse = "Procurar..." - [SplashScreen] +WindowTitle = "Instalador do sistema operacional HotInstall" +VersionLabel = "Instalador do sistema operacional HotInstall, versão " OSInstTitle = "Instalação do Sistema Operacional" OSInstStatus_StartingUp = "A configuração está iniciando..." OSInstStatus_Restarting = "A configuração continuará após reiniciar o computador" [MainForm] +ReviewImageInfo_IndexColumnHeader = "#" +ReviewImageInfo_BootImageArchitecturePlaceholder = "" +ReviewImageInfo_BootImageVersionPlaceholder = "" +ReviewImageInfo_BootImageNamePlaceholder = "" +ReviewImageInfo_ComputerArchitecturePlaceholder = "" +PreparationPanel_GenericProgress = "Progresso:" +PreparationPanel_ApiProgress = "Progresso da API: {0}%" +NavigationBackButtonText = "Voltar" +NavigationNextButtonText = "Próximo" +NavigationExitButtonText = "Cancelar" BootMgrEntryName = "Instalação do Sistema Operacional DISMTools" Win7IncompatibilityError = "Este programa é incompatível com o Windows 7 e o Server 2008 R2 devido à falta de suporte para a API DISM." NonAdminError = "Este aplicativo deve ser executado como administrador." @@ -55,7 +57,7 @@ VERIFY_Disclaimer_Error = "Você deve concordar com os avisos importantes antes VERIFY_ImageInfo_Question = "Esta imagem de disco contém a imagem que você deseja testar?" GetImageInfo_FileDoesNotExistError = "A imagem do Windows {quot;}{0}{quot;} não existe no sistema de arquivos." ClosureQuestion = "Tem certeza de que deseja sair do instalador?" -CopyFiles_ProgressMessage = "Copiando arquivos da imagem de disco... (Itens copiados até agora: {0}/{1})" +CopyFiles_ProgressMessage = "Copiando da imagem de disco... {quot;}{0}{quot;}" UseWindowsImage_Mount_IndexLT1 = "Ao montar uma imagem, o índice deve ser maior que 0" BCDEditConfiguratorError = "O processo BCDEdit, com argumentos de linha de comando {quot;}{0}{quot;}, falhou com o código de saída {1} ({2}). Verifique este comando com esses argumentos manualmente." BCDEditConfiguratorError_Simple = "A criação da entrada de inicialização falhou com o código de saída {0} ({1})" @@ -125,9 +127,35 @@ ExportDriversFolderDialog = "Especifique o caminho para exportar os controladore DriverExporter_MessageTitle = "Exportação de controladores" DriverExporter_SuccessMessage = "Os controladores foram exportados com sucesso" DriverExporter_FailureMessage = "O processo de exportação de controladores terminou com o código {0}" +ImageInformationSummary_Header = "Resumo de informações de {0} imagem(ns):" +ImageInformationSummary_ImageBlock = "Imagem {0} de {1}:{crlf;}{crlf;} - Versão da imagem: {2}{crlf;} - Nome da imagem: {3}{crlf;} - Descrição da imagem: {4}{crlf;} - Tamanho da imagem: {5} bytes ({6}){crlf;} - Arquitetura: {7}{crlf;} - HAL: {8}{crlf;} - Compilação do Service Pack: {9}{crlf;} - Nível do Service Pack: {10}{crlf;} - Edição: {11}{crlf;} - Tipo de instalação: {12}{crlf;} - Tipo de produto: {13}{crlf;} - Suite do produto: {14}{crlf;} - Diretório raiz do sistema: {15}{crlf;} - Contagem de ficheiros: {16} ficheiro(s) em {17} pasta(s){crlf;} - Data de criação: {18}{crlf;} - Data de modificação: {19}{crlf;} - Idiomas: {20}{crlf;}{crlf;}" GetImageInformationButton = "Obter informações sobre a imagem" [DiskSpaceChecker] +ReportNullDriveCollection = "Foi passada uma coleção de objetos nula para o relatório das unidades" +ReportLocalDiskCount = "Quantidade de discos locais e partições no sistema anfitrião: {0}" +ReportDiskInfo = "Informações do disco {0}, partição {1}{crlf;}- Tamanho total da unidade: {2} bytes (~{3}){crlf;}- Partição de arranque? {4}{crlf;}- Partição primária? {5}" +ReportYes = "Sim" +ReportNo = "Não" +ReportNoNames = "Não foram passados nomes" +ReportNoSizes = "Não foram passados tamanhos" +ReportNoFixedDrives = "Não foram passadas unidades fixas" +ReportSizeComparison = "Comparação de tamanhos:" +ReportDiskWithVolumeLabel = "- Disco, com etiqueta de volume {0} ({1}):" +ReportCanInstall = " - {0} (índice {1}) pode ser instalado neste disco porque há espaço livre suficiente." +ReportCannotInstall = " - {0} (índice {1}) não pode ser instalado neste disco porque não há espaço livre suficiente." +ReportTitle = "Relatório do Disk Space Checker" +ReportGeneratedBy = "Relatório gerado pelo HotInstall (versão {0})" +ReportSystemDrive = "A unidade do sistema está montada em {0}" +ReportCopyPlan = "Os ficheiros de imagem de disco serão copiados para a unidade do sistema indicada acima:" +ReportTotalImageSize = "- O tamanho total dos ficheiros de imagem de disco é {0} bytes (~{1})" +ReportFreeSpace = "- O espaço livre nesta unidade é {0} bytes (~{1})" +ReportMayNotHaveEnoughSpace = "Pode não haver espaço suficiente para copiar os ficheiros de imagem de disco para esta unidade." +ReportNotEnoughSpace = "Não há espaço suficiente para copiar os ficheiros de imagem de disco para esta unidade." +ReportPlentyOfSpace = "Há espaço suficiente para copiar os ficheiros de imagem de disco para esta unidade." +ReportNotEnoughSystemDriveSpace = "Não há espaço suficiente para copiar os ficheiros de imagem de disco para a unidade do sistema. Liberte algum espaço e tente novamente." +ReportFixedDrivesNotDetected = "Não foi possível detetar unidades fixas disponíveis no sistema" +ReportWarningOnlyPrefix = "APENAS AVISO: " WndTitle = "Verificador de Espaço em Disco" WndDesc = "Por favor, aguarde enquanto o instalador verifica o tamanho dos arquivos de imagem de disco e a capacidade das unidades em seu computador. Isso pode levar algum tempo." DSC_GenericProgress = "Progresso:" @@ -135,4 +163,4 @@ DSC_GetSysDrives = "Obtendo unidades do sistema..." DSC_GetSizeOfImageFiles = "Obtendo tamanho dos arquivos de imagem de disco..." DSC_GetImageFileInfo = "Obtendo informações do arquivo de imagem..." DSC_GetImageNamesAndSizes = "Obtendo nomes e tamanhos das imagens..." -DSC_CompareSizes = "Comparando tamanhos das imagens com o espaço livre..." \ No newline at end of file +DSC_CompareSizes = "Comparando tamanhos das imagens com o espaço livre..." diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/MainForm.vb b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/MainForm.vb index 741fe50b6..c8c7b8c1d 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/MainForm.vb +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/MainForm.vb @@ -1,4 +1,4 @@ -Imports Microsoft.Dism +Imports Microsoft.Dism Imports System.IO Imports Microsoft.VisualBasic.ControlChars Imports System.Management @@ -41,13 +41,11 @@ Public Class MainForm Dim installPath As String Sub ChangeLanguage(LanguageCode As String) - If Not File.Exists(Path.Combine(Application.StartupPath, "Languages", "lang_" & LanguageCode & ".ini")) Then - LanguageCode = "en" - End If - LoadLanguageFile(Path.Combine(Application.StartupPath, "Languages", "lang_" & LanguageCode & ".ini")) - BackButton.Text = GetValueFromLanguageData("Common.Common_Back") - NextButton.Text = GetValueFromLanguageData("Common.Common_Next") - ExitButton.Text = GetValueFromLanguageData("Common.Common_Cancel") + Dim languageFile As String = GetInstallerLanguageFilePath(LanguageCode) + LoadLanguageFile(languageFile) + BackButton.Text = GetValueFromLanguageData("MainForm.NavigationBackButtonText") + NextButton.Text = GetValueFromLanguageData("MainForm.NavigationNextButtonText") + ExitButton.Text = GetValueFromLanguageData("MainForm.NavigationExitButtonText") BootMgrEntryName = GetValueFromLanguageData("MainForm.BootMgrEntryName") Text = GetValueFromLanguageData("MainForm.WndTitle") Label1.Text = GetValueFromLanguageData("MainForm.DisclaimerPanel_Header") @@ -65,10 +63,15 @@ Public Class MainForm Label9.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageVersion") Label10.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageArchitecture") GroupBox2.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_InstallImageInfoGroup") + ListView1.Columns(0).Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_IndexColumnHeader") ListView1.Columns(1).Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_InstallImageName") ListView1.Columns(2).Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_InstallImageDescription") ListView1.Columns(3).Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_InstallImageVersion") ListView1.Columns(4).Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_InstallImageArchitecture") + Label13.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageArchitecturePlaceholder") + Label12.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageVersionPlaceholder") + Label11.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageNamePlaceholder") + Label6.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_ComputerArchitecturePlaceholder") Label7.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_ImageArchitectureMismatchError") Label5.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_ComputerArchitecture") Label14.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_DIM_Notice") @@ -112,7 +115,7 @@ Public Class MainForm Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load InitDynaLog() Visible = False - ChangeLanguage(My.Computer.Info.InstalledUICulture.TwoLetterISOLanguageName) + ChangeLanguage(ResolveInstallerLanguageCode()) ' Because of the DISM API, Windows 7 compatibility is out the window (no pun intended) If Environment.OSVersion.Version.Major = 6 And Environment.OSVersion.Version.Minor < 2 Then @@ -435,6 +438,13 @@ Public Class MainForm #Region "System Preparation Work" + Private Function GetPathDirectoryName(path As String) As String + If path = "" Then Return "" + Dim pathParts() As String = path.Replace("\\", "\").TrimEnd("\").Split("\") + Array.Reverse(pathParts) + Return pathParts(0) + End Function + ''' ''' Copies files from a given source to a given destination, whilst excluding any items whose names match the given exclusion ''' @@ -452,35 +462,70 @@ Public Class MainForm DynaLog.LogMessage("Destination does not exist. Creating...") Directory.CreateDirectory(Destination) End If - Dim FileCount As Integer = Directory.GetFiles(Source, "*", SearchOption.AllDirectories).Count - Dim CopiedFiles As Integer = 0 - - Dim SourceRoot As String = Path.GetFullPath(Source).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) - Dim DestinationRoot As String = Path.GetFullPath(Destination).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) - - DynaLog.LogMessage("Creating directories...") - For Each DirToCreate In Directory.GetDirectories(Source, "*", SearchOption.AllDirectories) - Dim sourcePath As String = DirToCreate.Substring(SourceRoot.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) - Dim destinationPath As String = Path.Combine(DestinationRoot, sourcePath) - If Not Directory.Exists(destinationPath) Then - Directory.CreateDirectory(destinationPath) - End If - Next - DynaLog.LogMessage("Copying files to each directory...") - For Each FileToCopy In Directory.GetFiles(Source, "*", SearchOption.AllDirectories) - ProgressMessage = String.Format(GetValueFromLanguageData("MainForm.CopyFiles_ProgressMessage"), CopiedFiles, FileCount) - If ReportProgress Then InstallerBW.ReportProgress(5) - If Path.GetFileName(FileToCopy) = ExcludedFile Then - CopiedFiles += 1 - Continue For - End If - Dim sourcePath As String = FileToCopy.Substring(SourceRoot.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) - Dim destinationPath As String = Path.Combine(DestinationRoot, sourcePath) - File.Copy(FileToCopy, destinationPath, True) - CopiedFiles += 1 - File.SetAttributes(destinationPath, FileAttributes.Archive) - Next + ' Enumerate directories in the root of the source; once we have them, we can have more granular error control + ' for specific directories. + Dim SubDirsInSource As IEnumerable(Of String) = Directory.EnumerateDirectories(Source, "*", SearchOption.TopDirectoryOnly) + + If SubDirsInSource.Any() Then + For Each SubDirInSource In SubDirsInSource + Try + Dim SourceRoot As String = Path.GetFullPath(SubDirInSource).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + Dim DestinationRoot As String = Path.GetFullPath(Path.Combine(Destination, GetPathDirectoryName(SubDirInSource))).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + + DynaLog.LogMessage("Creating directories...") + If Not Directory.Exists(DestinationRoot) Then Directory.CreateDirectory(DestinationRoot) + For Each DirToCreate In Directory.GetDirectories(SubDirInSource, "*", SearchOption.AllDirectories) + Dim sourcePath As String = DirToCreate.Substring(SourceRoot.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + Dim destinationPath As String = Path.Combine(DestinationRoot, sourcePath) + If Not Directory.Exists(destinationPath) Then + Directory.CreateDirectory(destinationPath) + End If + Next + + DynaLog.LogMessage("Copying files to each directory...") + For Each FileToCopy In Directory.GetFiles(SubDirInSource, "*", SearchOption.AllDirectories) + ProgressMessage = String.Format(GetValueFromLanguageData("MainForm.CopyFiles_ProgressMessage"), Path.GetFileName(FileToCopy)) + If ReportProgress Then InstallerBW.ReportProgress(5) + If Path.GetFileName(FileToCopy) = ExcludedFile Then Continue For + Dim sourcePath As String = FileToCopy.Substring(SourceRoot.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + Dim destinationPath As String = Path.Combine(DestinationRoot, sourcePath) + File.Copy(FileToCopy, destinationPath, True) + File.SetAttributes(destinationPath, FileAttributes.Archive) + Next + Catch ex As Exception + DynaLog.LogMessage("Could not copy files from directory " & GetPathDirectoryName(SubDirInSource) & ". Skipping...") + End Try + Next + Else + Try + Dim SourceRoot As String = Path.GetFullPath(Source).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + Dim DestinationRoot As String = Path.GetFullPath(Path.Combine(Destination, GetPathDirectoryName(Source))).TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + + DynaLog.LogMessage("Creating directories...") + If Not Directory.Exists(DestinationRoot) Then Directory.CreateDirectory(DestinationRoot) + For Each DirToCreate In Directory.GetDirectories(Source, "*", SearchOption.AllDirectories) + Dim sourcePath As String = DirToCreate.Substring(SourceRoot.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + Dim destinationPath As String = Path.Combine(DestinationRoot, sourcePath) + If Not Directory.Exists(destinationPath) Then + Directory.CreateDirectory(destinationPath) + End If + Next + + DynaLog.LogMessage("Copying files to each directory...") + For Each FileToCopy In Directory.GetFiles(Source, "*", SearchOption.AllDirectories) + ProgressMessage = String.Format(GetValueFromLanguageData("MainForm.CopyFiles_ProgressMessage"), Path.GetFileName(FileToCopy)) + If ReportProgress Then InstallerBW.ReportProgress(5) + If Path.GetFileName(FileToCopy) = ExcludedFile Then Continue For + Dim sourcePath As String = FileToCopy.Substring(SourceRoot.Length).TrimStart(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) + Dim destinationPath As String = Path.Combine(DestinationRoot, sourcePath) + File.Copy(FileToCopy, destinationPath, True) + File.SetAttributes(destinationPath, FileAttributes.Archive) + Next + Catch ex As Exception + DynaLog.LogMessage("Could not copy files from directory " & GetPathDirectoryName(Source) & ". Skipping...") + End Try + End If Catch ex As Exception DynaLog.LogMessage("Could not copy files. Error message: " & ex.Message) Throw @@ -613,18 +658,20 @@ Public Class MainForm Try Dim scsiAdapterPaths As String() = Directory.GetFiles(scsiExportTempPath, "*.inf", SearchOption.AllDirectories) DismApi.Initialize(DismLogLevel.LogErrors) + Dim successfulInfInstalls As Integer = 0 Using session As DismSession = DismApi.OpenOfflineSession(String.Format("{0}\$DISMTOOLS.~WS", Environment.GetEnvironmentVariable("SYSTEMDRIVE"))) For Each scsiAdapterPath In scsiAdapterPaths DynaLog.LogMessage("Installing SCSI adapter/Storage controller driver " & Path.GetFileName(scsiAdapterPath) & " ...") Try DismApi.AddDriver(session, scsiAdapterPath, True) DynaLog.LogMessage("Driver " & Path.GetFileName(scsiAdapterPath) & " was added successfully.") + successfulInfInstalls += 1 Catch ex As Exception DynaLog.LogMessage("Could not add driver " & Path.GetFileName(scsiAdapterPath) & ".") End Try Next End Using - File.WriteAllText(String.Format("{0}\$DISMTOOLS.~WS\driver_supplements_added", Environment.GetEnvironmentVariable("SYSTEMDRIVE")), String.Empty) + If successfulInfInstalls > 0 Then File.WriteAllText(String.Format("{0}\$DISMTOOLS.~WS\driver_supplements_added", Environment.GetEnvironmentVariable("SYSTEMDRIVE")), String.Empty) Catch ex As Exception DynaLog.LogMessage("Could not prepare SCSI driver import. Error message: " & ex.Message) Finally @@ -844,7 +891,7 @@ Public Class MainForm Private Sub InstallerBW_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles InstallerBW.ProgressChanged Label19.Text = ProgressMessage ProgressBar1.Value = e.ProgressPercentage - Label34.Text = "API Progress: " & DismProgressPercentage & "%" + Label34.Text = String.Format(GetValueFromLanguageData("MainForm.PreparationPanel_ApiProgress"), DismProgressPercentage) End Sub Private Sub InstallerBW_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles InstallerBW.RunWorkerCompleted @@ -959,26 +1006,9 @@ Public Class MainForm Dim imageInfoCollection As DismImageInfoCollection = GetImageInformation(installPath) If imageInfoCollection IsNot Nothing Then Dim imageCount As Integer = imageInfoCollection.Count - TextContents &= "Information summary for " & imageCount & " image(s):" & CrLf & CrLf + TextContents &= String.Format(GetValueFromLanguageData("MainForm.ImageInformationSummary_Header"), imageCount) & CrLf & CrLf For Each imageInfo As DismImageInfo In imageInfoCollection - TextContents &= String.Format("Image {0} of {1}:" & CrLf & CrLf & - " - Image version: {2}" & CrLf & - " - Image name: {3}" & CrLf & - " - Image description: {4}" & CrLf & - " - Image size: {5} bytes ({6})" & CrLf & - " - Architecture: {7}" & CrLf & - " - HAL: {8}" & CrLf & - " - Service Pack build: {9}" & CrLf & - " - Service Pack level: {10}" & CrLf & - " - Edition: {11}" & CrLf & - " - Installation Type: {12}" & CrLf & - " - Product type: {13}" & CrLf & - " - Product suite: {14}" & CrLf & - " - System root directory: {15}" & CrLf & - " - File count: {16} file(s) in {17} folder(s)" & CrLf & - " - Creation date: {18}" & CrLf & - " - Modification date: {19}" & CrLf & - " - Languages: {20}" & CrLf & CrLf, + TextContents &= String.Format(GetValueFromLanguageData("MainForm.ImageInformationSummary_ImageBlock"), imageInfoCollection.IndexOf(imageInfo) + 1, imageCount, imageInfo.ProductVersion.ToString(), imageInfo.ImageName, diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/My Project/AssemblyInfo.vb b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/My Project/AssemblyInfo.vb index 9c8904fd2..59fa99a65 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/My Project/AssemblyInfo.vb +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' mediante el carácter '*', como se muestra a continuación: ' - - + + diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/RuntimeFormLocalization.vb b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/RuntimeFormLocalization.vb new file mode 100644 index 000000000..6c0b4180e --- /dev/null +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/RuntimeFormLocalization.vb @@ -0,0 +1,96 @@ +Imports System + +' Runtime localization is intentionally kept outside Windows Forms designer files. +' English design-time text remains available to the Visual Studio form designer. + +Partial Class DiskSpaceChecker + + Protected Overrides Sub OnLoad(e As EventArgs) + ApplyRuntimeLocalization() + MyBase.OnLoad(e) + End Sub + + Private Sub ApplyRuntimeLocalization() + Me.Label1.Text = GetValueFromLanguageData("DiskSpaceChecker.WndDesc") + Me.Label2.Text = GetValueFromLanguageData("DiskSpaceChecker.DSC_GenericProgress") + Me.Text = GetValueFromLanguageData("DiskSpaceChecker.WndTitle") + End Sub + +End Class + +Partial Class MainForm + + Protected Overrides Sub OnLoad(e As EventArgs) + ApplyRuntimeLocalization() + MyBase.OnLoad(e) + End Sub + + Private Sub ApplyRuntimeLocalization() + Me.GetImgInfoBtn.Text = GetValueFromLanguageData("MainForm.GetImageInformationButton") + Me.ExportDrvsBtn.Text = GetValueFromLanguageData("MainForm.ExportDriversButton") + Me.BackButton.Text = GetValueFromLanguageData("MainForm.NavigationBackButtonText") + Me.NextButton.Text = GetValueFromLanguageData("MainForm.NavigationNextButtonText") + Me.ExitButton.Text = GetValueFromLanguageData("MainForm.NavigationExitButtonText") + Me.Label38.Text = GetValueFromLanguageData("MainForm.ErrorPanel_PossibleFixes") + Me.Label37.Text = GetValueFromLanguageData("MainForm.ErrorPanel_Description") + Me.Label36.Text = GetValueFromLanguageData("MainForm.ErrorPanel_Header") + Me.RestartButton.Text = GetValueFromLanguageData("MainForm.FinishPanel_RestartNow") + Me.Label32.Text = GetValueFromLanguageData("MainForm.FinishPanel_Description") + Me.Label35.Text = GetValueFromLanguageData("MainForm.FinishPanel_RestartTimer_Beginning") + Me.Label33.Text = GetValueFromLanguageData("MainForm.FinishPanel_Header") + Me.Label20.Text = GetValueFromLanguageData("MainForm.PreparationPanel_Step1") + Me.Label27.Text = GetValueFromLanguageData("MainForm.PreparationPanel_Step2") + Me.Label31.Text = GetValueFromLanguageData("MainForm.PreparationPanel_Step3") + Me.Label34.Text = String.Format(GetValueFromLanguageData("MainForm.PreparationPanel_ApiProgress"), 0) + Me.Label19.Text = GetValueFromLanguageData("MainForm.PreparationPanel_GenericProgress") + Me.Label17.Text = GetValueFromLanguageData("MainForm.PreparationPanel_Description") + Me.Label18.Text = GetValueFromLanguageData("MainForm.PreparationPanel_Header") + Me.Label15.Text = GetValueFromLanguageData("MainForm.ExplanationPanel_Description") + Me.Label16.Text = GetValueFromLanguageData("MainForm.ExplanationPanel_Header") + Me.GroupBox2.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_InstallImageInfoGroup") + Me.ColumnHeader1.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_IndexColumnHeader") + Me.ColumnHeader2.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_InstallImageName") + Me.ColumnHeader3.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_InstallImageDescription") + Me.ColumnHeader4.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_InstallImageVersion") + Me.ColumnHeader5.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_InstallImageArchitecture") + Me.GroupBox1.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageInfoGroup") + Me.Label10.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageArchitecture") + Me.Label9.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageVersion") + Me.Label13.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageArchitecturePlaceholder") + Me.Label12.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageVersionPlaceholder") + Me.Label11.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageNamePlaceholder") + Me.Label8.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_BootImageName") + Me.Label6.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_ComputerArchitecturePlaceholder") + Me.Label7.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_ImageArchitectureMismatchError") + Me.Label5.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_ComputerArchitecture") + Me.Label14.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_DIM_Notice") + Me.Label3.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_Description") + Me.Label4.Text = GetValueFromLanguageData("MainForm.ReviewImageInfo_Header") + Me.CheckBox1.Text = GetValueFromLanguageData("MainForm.DisclaimerPanel_DisclaimerCheck") + Me.TabPage1.Text = GetValueFromLanguageData("MainForm.DisclaimerPanel_ContentTabTitle1") + Me.TextBox1.Text = GetValueFromLanguageData("MainForm.DisclaimerPanel_Warranties") + Me.TabPage2.Text = GetValueFromLanguageData("MainForm.DisclaimerPanel_ContentTabTitle2") + Me.TextBox2.Text = GetValueFromLanguageData("MainForm.DisclaimerPanel_UseOfDiscImages") + Me.TabPage3.Text = GetValueFromLanguageData("MainForm.DisclaimerPanel_ContentTabTitle3") + Me.Label2.Text = GetValueFromLanguageData("MainForm.DisclaimerPanel_Description") + Me.Label1.Text = GetValueFromLanguageData("MainForm.DisclaimerPanel_Header") + Me.ExportDrvsFBD.Description = GetValueFromLanguageData("MainForm.ExportDriversFolderDialog") + End Sub + +End Class + +Partial Class SplashForm + + Protected Overrides Sub OnLoad(e As EventArgs) + ApplyRuntimeLocalization() + MyBase.OnLoad(e) + End Sub + + Private Sub ApplyRuntimeLocalization() + Me.VersionLabel.Text = GetValueFromLanguageData("SplashScreen.VersionLabel") + Me.Label1.Text = GetValueFromLanguageData("SplashScreen.OSInstTitle") + Me.Label2.Text = GetValueFromLanguageData("SplashScreen.OSInstStatus_StartingUp") + Me.Text = GetValueFromLanguageData("SplashScreen.WindowTitle") + End Sub + +End Class diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/SplashForm.vb b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/SplashForm.vb index 1bbf12280..c4a00c44b 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/SplashForm.vb +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/SplashForm.vb @@ -1,4 +1,4 @@ -Imports System.IO +Imports System.IO Public Class SplashForm @@ -11,10 +11,10 @@ Public Class SplashForm Public TestBCD As Boolean = Environment.GetCommandLineArgs().Contains("/bcdtest") Sub ChangeLanguage(LanguageCode As String) - If Not File.Exists(Path.Combine(Application.StartupPath, "Languages", "lang_" & LanguageCode & ".ini")) Then - LanguageCode = "en" - End If - LoadLanguageFile(Path.Combine(Application.StartupPath, "Languages", "lang_" & LanguageCode & ".ini")) + Dim languageFile As String = GetInstallerLanguageFilePath(LanguageCode) + LoadLanguageFile(languageFile) + Text = GetValueFromLanguageData("SplashScreen.WindowTitle") + VersionLabel.Text = GetValueFromLanguageData("SplashScreen.VersionLabel") Label1.Text = GetValueFromLanguageData("SplashScreen.OSInstTitle") Label2.Text = GetValueFromLanguageData("SplashScreen.OSInstStatus_StartingUp") End Sub @@ -25,7 +25,7 @@ Public Class SplashForm BackgroundPicture = Image.FromFile(Application.StartupPath & "\Resources\SplashScreen\background.jpg") ResizeImage() End If - ChangeLanguage(My.Computer.Info.InstalledUICulture.TwoLetterISOLanguageName) + ChangeLanguage(ResolveInstallerLanguageCode()) ' Change status font size Dim ReferenceSize As Size = New Size(1024, 768) If Width <= ReferenceSize.Width AndAlso Height <= ReferenceSize.Height Then diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Util/LanguageFileParser.vb b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Util/LanguageFileParser.vb index d474d8dc5..7d36c1e3f 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Util/LanguageFileParser.vb +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/Util/LanguageFileParser.vb @@ -3,9 +3,13 @@ Imports IniParser.Model Imports System.IO Imports Microsoft.VisualBasic.ControlChars Imports System.Text +Imports System.Windows.Forms +Imports System.Collections.Generic Module LanguageFileParser + Private Const DefaultLanguageCode As String = "en-US" + Dim LanguageData As IniData Sub LoadLanguageFile(LanguageFile As String) @@ -18,22 +22,134 @@ Module LanguageFileParser LanguageData = parser.ReadData(Reader) End Using Catch ex As Exception - Throw ex + Throw End Try End Sub - Function GetValueFromLanguageData(ItemKey As String) As String - If LanguageData IsNot Nothing Then + Public Function ResolveInstallerLanguageCode() As String + Dim availableLanguages As Dictionary(Of String, String) = GetAvailableInstallerLanguages() + Dim explicitLanguage As String = ResolveLanguageFromCommandLine(availableLanguages) + If explicitLanguage <> "" Then Return explicitLanguage + + If availableLanguages.ContainsKey(DefaultLanguageCode) Then Return DefaultLanguageCode + For Each languageCode As String In availableLanguages.Keys + Return languageCode + Next + + Return DefaultLanguageCode + End Function + + Public Function GetInstallerLanguageFilePath(LanguageCode As String) As String + Dim availableLanguages As Dictionary(Of String, String) = GetAvailableInstallerLanguages() + Dim normalizedCode As String = NormalizeLanguageCode(LanguageCode, availableLanguages) + + If normalizedCode = "" AndAlso availableLanguages.ContainsKey(DefaultLanguageCode) Then + normalizedCode = DefaultLanguageCode + End If + + If normalizedCode <> "" AndAlso availableLanguages.ContainsKey(normalizedCode) Then + Return availableLanguages(normalizedCode) + End If + + Return "" + End Function + + Private Function GetAvailableInstallerLanguages() As Dictionary(Of String, String) + Dim availableLanguages As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase) + Dim languageDirectory As String = Path.Combine(Application.StartupPath, "Languages") + If Not Directory.Exists(languageDirectory) Then Return availableLanguages + + Dim languageFiles As String() = Directory.GetFiles(languageDirectory, "*.ini", SearchOption.TopDirectoryOnly) + Array.Sort(languageFiles, StringComparer.OrdinalIgnoreCase) + + For Each languageFile As String In languageFiles Try - Dim KeySections() As String = ItemKey.Split(".") - Return LanguageData(KeySections(0))(KeySections(1)).Replace(Quote, "").Replace("{quot;}", Quote).Replace("{crlf;}", CrLf) - Catch ex As Exception - Return ItemKey + Dim parser = New FileIniDataParser() + Dim languageFileData As IniData + Using reader As New StreamReader(languageFile, Encoding.UTF8) + languageFileData = parser.ReadData(reader) + End Using + + Dim languageCode As String = "" + Try + languageCode = languageFileData("LanguageFileInformation")("LanguageCode").Replace(Quote, "").Trim() + Catch + End Try + + If languageCode <> "" AndAlso Not availableLanguages.ContainsKey(languageCode) Then + availableLanguages.Add(languageCode, languageFile) + End If + Catch End Try - Else - Return ItemKey + Next + + Return availableLanguages + End Function + + Private Function ResolveLanguageFromCommandLine(availableLanguages As Dictionary(Of String, String)) As String + Dim args() As String = Environment.GetCommandLineArgs() + For index As Integer = 0 To args.Length - 1 + Dim argument As String = args(index) + If String.IsNullOrWhiteSpace(argument) Then Continue For + + Dim value As String = "" + If argument.StartsWith("/lang:", StringComparison.OrdinalIgnoreCase) OrElse argument.StartsWith("/lang=", StringComparison.OrdinalIgnoreCase) Then + value = argument.Substring(6) + ElseIf argument.StartsWith("--lang=", StringComparison.OrdinalIgnoreCase) Then + value = argument.Substring(7) + ElseIf argument.StartsWith("--language=", StringComparison.OrdinalIgnoreCase) Then + value = argument.Substring(11) + ElseIf (argument.Equals("/lang", StringComparison.OrdinalIgnoreCase) OrElse argument.Equals("--lang", StringComparison.OrdinalIgnoreCase) OrElse argument.Equals("--language", StringComparison.OrdinalIgnoreCase)) AndAlso index + 1 < args.Length Then + value = args(index + 1) + End If + + Dim normalized As String = NormalizeLanguageCode(value, availableLanguages) + If normalized <> "" Then Return normalized + Next + + Return "" + End Function + + Private Function NormalizeLanguageCode(value As String, availableLanguages As Dictionary(Of String, String)) As String + If String.IsNullOrWhiteSpace(value) Then Return "" + + Dim cleaned As String = value.Trim().Trim(ChrW(34)).Replace("_", "-") + For Each languageCode As String In availableLanguages.Keys + If languageCode.Equals(cleaned, StringComparison.OrdinalIgnoreCase) Then Return languageCode + Next + + Dim neutralLanguage As String = cleaned.Split("-"c)(0) + For Each languageCode As String In availableLanguages.Keys + Dim availableNeutralLanguage As String = languageCode.Split("-"c)(0) + If availableNeutralLanguage.Equals(neutralLanguage, StringComparison.OrdinalIgnoreCase) Then Return languageCode + Next + + Return "" + End Function + + Function GetValueFromLanguageData(ItemKey As String) As String + If LanguageData Is Nothing Then + Throw New InvalidOperationException("HotInstall language data has not been loaded.") End If - Return Nothing + + If String.IsNullOrWhiteSpace(ItemKey) OrElse Not ItemKey.Contains("."c) Then + Throw New InvalidOperationException("HotInstall localization key is invalid: " & If(ItemKey, "")) + End If + + Dim separatorIndex As Integer = ItemKey.LastIndexOf("."c) + Dim sectionName As String = ItemKey.Substring(0, separatorIndex) + Dim valueName As String = ItemKey.Substring(separatorIndex + 1) + + Try + Dim value As String = LanguageData(sectionName)(valueName) + If value Is Nothing Then Throw New KeyNotFoundException() + Return value.Replace(Quote, "").Replace("{quot;}", Quote).Replace("{crlf;}", CrLf).Replace("{space;}", " ").Replace("{tab;}", vbTab) + Catch ex As Exception + Throw New InvalidOperationException("HotInstall localization key was not found." & CrLf & CrLf & + "Section: " & sectionName & CrLf & + "Key: " & valueName & CrLf & + "Full key: " & ItemKey, ex) + End Try End Function End Module diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/packages.config b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/packages.config index 7a150b7c8..04902c73c 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/packages.config +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/Installer/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file diff --git a/Helpers/extps1/PE_Helper/tools/HotInstall/README.md b/Helpers/extps1/PE_Helper/tools/HotInstall/README.md index e47c7e45a..46f96fb96 100644 --- a/Helpers/extps1/PE_Helper/tools/HotInstall/README.md +++ b/Helpers/extps1/PE_Helper/tools/HotInstall/README.md @@ -23,6 +23,12 @@ HotInstall is included with the ISO files you create with DISMTools. To start th Then, follow the steps of the wizard. +## Localization + +HotInstall discovers its own language files dynamically from the `Languages` folder. Each INI must contain `LanguageCode` and `LanguageName` in `[LanguageFileInformation]`. The file name is not used as the language identifier. + +The PE Helper passes the current DISMTools `LanguageCode` to HotInstall. HotInstall uses the matching translation when it exists and falls back to English, `en-US`, when it does not. Only translations that actually exist in the HotInstall package are included. + > [!NOTE] > Make sure that you created your ISO file with the correct Windows image to test. You will be able to see some information about this image. > diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/ApplicationEvents.vb b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/ApplicationEvents.vb new file mode 100644 index 000000000..102c71441 --- /dev/null +++ b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/ApplicationEvents.vb @@ -0,0 +1,11 @@ +Namespace My + + Partial Friend Class MyApplication + + Private Sub MyApplication_Startup(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup + LocalizationService.Initialize() + End Sub + + End Class + +End Namespace diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/MainForm.vb b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/MainForm.vb index 2e402b0e6..bc67ec666 100644 --- a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/MainForm.vb +++ b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/MainForm.vb @@ -1,11 +1,11 @@ -Imports Microsoft.Win32 +Imports Microsoft.Win32 Imports System.IO Imports Microsoft.VisualBasic.ControlChars Imports System.ComponentModel Public Class MainForm - Private RestartMessage As String, ProcessExitCodeMessage As String + Private RestartMessage As String Friend AutoCapture As Boolean = False Friend CopyProfile As Boolean = False @@ -24,88 +24,20 @@ Public Class MainForm PictureBox4.Image = If(instTypeVal.ToLower().Contains("server"), My.Resources.arrow_normal, My.Resources.arrow_disabled) PictureBox4.Enabled = (instTypeVal.ToLower().Contains("server")) - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - RestartMessage = "This will restart your computer. Make sure you have configured your computer to boot via installation media. Do you want to restart?" - ProcessExitCodeMessage = "Process exited with code 0x{0}:" & CrLf & CrLf & "{1}" - Label1.Text = "What do you want to do?" - Label3.Text = "Start a PXE Helper Server for Network Installation" - LinkLabel1.Text = "Install an Operating System" - LinkLabel2.Text = "Restart to Installation Media" - LinkLabel3.Text = "Start a PXE Helper Server for Network Installation" - LinkLabel4.Text = "Prepare System for Image Capture" - LinkLabel5.Text = "Back" - LinkLabel6.Text = "Explore contents of this disc" - LinkLabel7.Text = "Start PXE Helper Server for FOG" - LinkLabel8.Text = "Start PXE Helper Server for Windows Deployment Services" - LinkLabel9.Text = "Copy boot image to WDS server..." - ExitLink.Text = "Exit" - pxeServerPortSwitcherMessage = "Hold down SHIFT to change the port to use for this PXE Helper Server" - Case "ESN" - RestartMessage = "Esto reiniciará su equipo. Asegúrese de haber configurado el equipo para iniciar este medio de instalación. ¿Desea reiniciar?" - ProcessExitCodeMessage = "El proceso terminó con código 0x{0}:" & CrLf & CrLf & "{1}" - Label1.Text = "¿Qué desea hacer?" - Label3.Text = "Iniciar un servidor de PXE Helpers para instalación en red" - LinkLabel1.Text = "Instalar un sistema operativo" - LinkLabel2.Text = "Reiniciar desde el medio de instalación" - LinkLabel3.Text = "Iniciar un servidor de PXE Helpers para instalación en red" - LinkLabel4.Text = "Preparar el sistema para captura de imágenes" - LinkLabel5.Text = "Atrás" - LinkLabel6.Text = "Explorar los contenidos de este disco" - LinkLabel7.Text = "Iniciar el servidor de PXE Helpers para FOG" - LinkLabel8.Text = "Iniciar el servidor de PXE Helpers para WDS" - LinkLabel9.Text = "Copiar imagen de arranque al servidor WDS..." - ExitLink.Text = "Salir" - pxeServerPortSwitcherMessage = "Mantenga pulsado SHIFT para cambiar el puerto a usar para este servidor de PXE Helpers" - Case "FRA" - RestartMessage = "Votre ordinateur va redémarrer. Assurez-vous qu’il est configuré pour démarrer sur le média d’installation. Voulez-vous redémarrer ?" - ProcessExitCodeMessage = "Processus terminé avec le code 0x{0} :" & CrLf & CrLf & "{1}" - Label1.Text = "Que voulez-vous faire ?" - Label3.Text = "Démarrer un serveur PXE Helper pour l’installation réseau" - LinkLabel1.Text = "Installer un système d’exploitation" - LinkLabel2.Text = "Redémarrer sur le média d’installation" - LinkLabel3.Text = "Démarrer un serveur PXE Helper pour l’installation réseau" - LinkLabel4.Text = "Préparer le système pour la capture d’image" - LinkLabel5.Text = "Retour" - LinkLabel6.Text = "Explorer le contenu de ce disque" - LinkLabel7.Text = "Démarrer un serveur PXE Helper pour FOG" - LinkLabel8.Text = "Démarrer un serveur PXE Helper pour WDS" - LinkLabel9.Text = "Copier l'image de démarrage sur le serveur WDS..." - ExitLink.Text = "Sortie" - pxeServerPortSwitcherMessage = "Maintenez la touche MAJ enfoncée pour modifier le port à utiliser pour ce serveur PXE Helper" - Case "PTB", "PTG" - RestartMessage = "O computador será reiniciado. Certifique-se de que está configurado para iniciar pelo meio de instalação. Deseja reiniciar?" - ProcessExitCodeMessage = "Processo terminou com o código 0x{0}:" & CrLf & CrLf & "{1}" - Label1.Text = "O que deseja fazer?" - Label3.Text = "Iniciar servidor PXE Helper para instalação em rede" - LinkLabel1.Text = "Instalar um sistema operativo" - LinkLabel2.Text = "Reiniciar para o meio de instalação" - LinkLabel3.Text = "Iniciar servidor PXE Helper para instalação em rede" - LinkLabel4.Text = "Preparar sistema para captura de imagem" - LinkLabel5.Text = "Voltar" - LinkLabel6.Text = "Explore o conteúdo deste disco" - LinkLabel7.Text = "Iniciar servidor PXE Helper para FOG" - LinkLabel8.Text = "Iniciar servidor PXE Helper para WDS" - LinkLabel9.Text = "Copiar imagem de arranque para o servidor WDS..." - ExitLink.Text = "Sair" - pxeServerPortSwitcherMessage = "Mantenha premida a tecla SHIFT para alterar a porta a utilizar neste servidor auxiliar PXE" - Case "ITA" - RestartMessage = "Il computer verrà riavviato. Assicurati che sia configurato per avviarsi dal supporto di installazione. Vuoi riavviare?" - ProcessExitCodeMessage = "Processo completato con codice 0x{0}:" & CrLf & CrLf & "{1}" - Label1.Text = "Cosa vuoi fare?" - Label3.Text = "Avvia server PXE Helper per installazione di rete" - LinkLabel1.Text = "Installa un sistema operativo" - LinkLabel2.Text = "Riavvia con il supporto di installazione" - LinkLabel3.Text = "Avvia server PXE Helper per installazione di rete" - LinkLabel4.Text = "Prepara sistema per acquisizione immagine" - LinkLabel5.Text = "Indietro" - LinkLabel6.Text = "Esplora i contenuti di questo disco" - LinkLabel7.Text = "Avvia server PXE Helper per FOG" - LinkLabel8.Text = "Avvia server PXE Helper per WDS" - LinkLabel9.Text = "Copia l'immagine di avvio sul server WDS..." - ExitLink.Text = "Esci" - pxeServerPortSwitcherMessage = "Tenere premuto il tasto SHIFT per modificare la porta da utilizzare per questo server PXE Helper" - End Select + RestartMessage = LocalizationService.ForSection("PEHelper.Restart")("Warning.Message") + Label1.Text = LocalizationService.ForSection("PEHelper.Main")("WhatWant.Label") + Label3.Text = LocalizationService.ForSection("PEHelper.Main")("StartServer.Label") + LinkLabel1.Text = LocalizationService.ForSection("PEHelper.Main")("Install.Operating.Link") + LinkLabel2.Text = LocalizationService.ForSection("PEHelper.Main")("Restart.Install.Media.Link") + LinkLabel3.Text = LocalizationService.ForSection("PEHelper.Main")("StartServer.Network.Link") + LinkLabel4.Text = LocalizationService.ForSection("PEHelper.Main")("Prepare.System.Image.Link") + LinkLabel5.Text = LocalizationService.ForSection("PEHelper.Main")("Back.Button") + LinkLabel6.Text = LocalizationService.ForSection("PEHelper.Main")("Explore.Contents.Disc.Link") + LinkLabel7.Text = LocalizationService.ForSection("PEHelper.Main")("StartServer.Fog.Link") + LinkLabel8.Text = LocalizationService.ForSection("PEHelper.Main")("StartServer.Wds.Link") + LinkLabel9.Text = LocalizationService.ForSection("PEHelper.Main")("Copy.Boot.Image.Link") + ExitLink.Text = LocalizationService.ForSection("PEHelper.Main")("Exit.Button") + pxeServerPortSwitcherMessage = LocalizationService.ForSection("PEHelper.PXE")("ChangePort.Tooltip") End Sub Private Sub ExitLink_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles ExitLink.LinkClicked @@ -143,13 +75,15 @@ Public Class MainForm Dim exitCode As Integer = ProcessHelper.RunProcess(FilePath, Arguments, WorkingDirectory, RunAsAdmin) Visible = True If exitCode <> 0 Then - MsgBox(String.Format(ProcessExitCodeMessage, Hex(exitCode), New Win32Exception(exitCode).Message), + MsgBox(LocalizationService.ForSection("PEHelper.Process").Format("ExitCode.Message", Hex(exitCode), New Win32Exception(exitCode).Message), vbOKOnly + vbExclamation, Text) End If End Sub Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked - RunProcess(Path.Combine(Application.StartupPath, "setup.exe"), RunAsAdmin:=True) + RunProcess(Path.Combine(Application.StartupPath, "setup.exe"), + "--language=" & Quote & LocalizationService.CurrentCultureCode & Quote, + RunAsAdmin:=True) End Sub Private Sub LinkLabel2_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel2.LinkClicked diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/PEHelperMainMenu.vbproj b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/PEHelperMainMenu.vbproj index 82b12962c..aaedb6cc9 100644 --- a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/PEHelperMainMenu.vbproj +++ b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/PEHelperMainMenu.vbproj @@ -1,4 +1,4 @@ - + @@ -77,6 +77,11 @@ + + + + Utilities\LocalizationService.vb + Form @@ -186,4 +191,4 @@ COPY /Y autorun.exe.config "$(ProjectDir)out" --> - \ No newline at end of file + diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_hovered.png b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_hovered.png index 6465079fd..ffce734a0 100644 Binary files a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_hovered.png and b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_hovered.png differ diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_hovered_left.png b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_hovered_left.png index c9377c506..04ee377fa 100644 Binary files a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_hovered_left.png and b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_hovered_left.png differ diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_normal.png b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_normal.png index fd40b5876..f76621fa1 100644 Binary files a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_normal.png and b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_normal.png differ diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_normal_left.png b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_normal_left.png index 4dee7c92a..8bfa75bff 100644 Binary files a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_normal_left.png and b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/Resources/arrow_normal_left.png differ diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/RuntimeFormLocalization.vb b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/RuntimeFormLocalization.vb new file mode 100644 index 000000000..8fb6b6980 --- /dev/null +++ b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/RuntimeFormLocalization.vb @@ -0,0 +1,105 @@ +Imports System + +' Runtime localization is intentionally kept outside Windows Forms designer files. +' English design-time text remains available to the Visual Studio form designer. + +Partial Class MainForm + + Protected Overrides Sub OnLoad(e As EventArgs) + ApplyRuntimeLocalization() + MyBase.OnLoad(e) + End Sub + + Private Sub ApplyRuntimeLocalization() + Me.Label1.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("WhatWant.Label") + Me.LinkLabel1.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("Install.Operating.Link") + Me.LinkLabel2.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("Restart.Install.Media.Link") + Me.LinkLabel3.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("StartPXE.Link") + Me.ExitLink.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("Exit.Button") + Me.LinkLabel6.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("Explore.Contents.Disc.Link") + Me.LinkLabel4.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("Prepare.System.Image.Link") + Me.Label2.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("PE.Helper.Message") + Me.Label3.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("StartPXE.Label") + Me.LinkLabel5.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("Back.Button") + Me.LinkLabel10.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("Copy.Install.Image.Link") + Me.LinkLabel9.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("Copy.Boot.Image.Link") + Me.LinkLabel7.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("StartPXE.PXEFOG.Link") + Me.LinkLabel8.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("StartPXE.PXE.Windows.Link") + Me.Text = LocalizationService.ForSection("PEHelper.Designer.Main")("DISM.Tools.PE.Label") + End Sub + +End Class + +Partial Class ServerPortSpecifier + + Protected Overrides Sub OnLoad(e As EventArgs) + ApplyRuntimeLocalization() + MyBase.OnLoad(e) + End Sub + + Private Sub ApplyRuntimeLocalization() + Me.OK_Button.Text = LocalizationService.ForSection("PEHelper.Designer.ServerPort")("Ok.Button") + Me.Cancel_Button.Text = LocalizationService.ForSection("PEHelper.Designer.ServerPort")("Cancel.Button") + Me.Label1.Text = LocalizationService.ForSection("PEHelper.Designer.ServerPort")("Components.Disc.Rely.Message") + Me.Label2.Text = LocalizationService.ForSection("PEHelper.Designer.ServerPort")("Port.Server.Label") + Me.Button1.Text = LocalizationService.ForSection("PEHelper.Designer.ServerPort")("Default.Button") + Me.Button2.Text = LocalizationService.ForSection("PEHelper.Designer.ServerPort")("Check.Button") + Me.Text = LocalizationService.ForSection("PEHelper.Designer.ServerPort")("ServerComponents.Label") + End Sub + +End Class + +Partial Class SysprepPreparatorModeDialog + + Protected Overrides Sub OnLoad(e As EventArgs) + ApplyRuntimeLocalization() + MyBase.OnLoad(e) + End Sub + + Private Sub ApplyRuntimeLocalization() + Me.Label1.Text = LocalizationService.ForSection("PEHelper.Designer.Sysprep")("Responsibility.Message") + Me.LinkLabel3.Text = LocalizationService.ForSection("PEHelper.Designer.Sysprep")("Cancel.Link") + Me.LinkLabel2.Text = LocalizationService.ForSection("PEHelper.Designer.Sysprep")("ManualMode.Link") + Me.LinkLabel1.Text = LocalizationService.ForSection("PEHelper.Designer.Sysprep")("AutomaticMode.Link") + Me.CheckBox1.Text = LocalizationService.ForSection("PEHelper.Designer.Sysprep")("CaptureImage.CheckBox") + Me.CheckBox2.Text = LocalizationService.ForSection("PEHelper.Designer.Sysprep")("CopyRegistry.CheckBox") + Me.Text = LocalizationService.ForSection("PEHelper.Designer.Sysprep")("PrepareCapture.Label") + End Sub + +End Class + +Partial Class WDSBootImageArchitectureSelector + + Protected Overrides Sub OnLoad(e As EventArgs) + ApplyRuntimeLocalization() + MyBase.OnLoad(e) + End Sub + + Private Sub ApplyRuntimeLocalization() + Me.OK_Button.Text = LocalizationService.ForSection("PEHelper.Designer.WDSArch")("Okbutton.Button") + Me.Cancel_Button.Text = LocalizationService.ForSection("PEHelper.Designer.WDSArch")("CancelButton.Button") + Me.Label1.Text = LocalizationService.ForSection("PEHelper.Designer.WDSArch")("Architecture.Label") + Me.Text = LocalizationService.ForSection("PEHelper.Designer.WDSArch")("Architecture.Label.Label") + End Sub + +End Class + +Partial Class WDSImageGroupSpecifier + + Protected Overrides Sub OnLoad(e As EventArgs) + ApplyRuntimeLocalization() + MyBase.OnLoad(e) + End Sub + + Private Sub ApplyRuntimeLocalization() + Me.OK_Button.Text = LocalizationService.ForSection("PEHelper.Designer.WDSGroup")("Ok.Button") + Me.Cancel_Button.Text = LocalizationService.ForSection("PEHelper.Designer.WDSGroup")("Cancel.Button") + Me.Label1.Text = LocalizationService.ForSection("PEHelper.Designer.WDSGroup")("Action.Choose.Label") + Me.Refresh_Button.Text = LocalizationService.ForSection("PEHelper.Designer.WDSGroup")("Refresh.Button") + Me.RadioButton1.Text = LocalizationService.ForSection("PEHelper.Designer.WDSGroup")("Upload.RadioButton") + Me.RadioButton2.Text = LocalizationService.ForSection("PEHelper.Designer.WDSGroup")("CreateGroup.RadioButton") + Me.Label2.Text = LocalizationService.ForSection("PEHelper.Designer.WDSGroup")("Already.Exists.Label") + Me.Text = LocalizationService.ForSection("PEHelper.Designer.WDSGroup")("SpecifyGroup.Button") + End Sub + +End Class diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/ServerPortSpecifier.vb b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/ServerPortSpecifier.vb index 1e94f35f0..954f9418a 100644 --- a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/ServerPortSpecifier.vb +++ b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/ServerPortSpecifier.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports System.IO Imports Microsoft.VisualBasic.ControlChars @@ -37,10 +37,10 @@ Public Class ServerPortSpecifier netstatProc.WaitForExit() If netstatProc.ExitCode = 0 Then ' This port is in use - MessageBox.Show(String.Format("The specified port, {0}, is already in use.", NumericUpDown1.Value), Text, MessageBoxButtons.OK, MessageBoxIcon.Information) + MessageBox.Show(LocalizationService.ForSection("PEHelper.ServerPort").Format("Already.Message", NumericUpDown1.Value), Text, MessageBoxButtons.OK, MessageBoxIcon.Information) Else ' This port is free - MessageBox.Show(String.Format("The specified port, {0}, is not in use.", NumericUpDown1.Value), Text, MessageBoxButtons.OK, MessageBoxIcon.Information) + MessageBox.Show(LocalizationService.ForSection("PEHelper.ServerPort").Format("InvalidPort.Message", NumericUpDown1.Value), Text, MessageBoxButtons.OK, MessageBoxIcon.Information) End If End Using End Sub diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/SysprepPreparatorModeDialog.Designer.vb b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/SysprepPreparatorModeDialog.Designer.vb index b1aca168c..8dcf67d1d 100644 --- a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/SysprepPreparatorModeDialog.Designer.vb +++ b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/SysprepPreparatorModeDialog.Designer.vb @@ -64,7 +64,7 @@ Partial Class SysprepPreparatorModeDialog ' 'LinkLabel3 ' - Me.LinkLabel3.ActiveLinkColor = System.Drawing.Color.DodgerBlue + Me.LinkLabel3.ActiveLinkColor = System.Drawing.Color.LawnGreen Me.LinkLabel3.AutoSize = True Me.LinkLabel3.BackColor = System.Drawing.Color.Transparent Me.LinkLabel3.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) @@ -80,7 +80,7 @@ Partial Class SysprepPreparatorModeDialog ' 'LinkLabel2 ' - Me.LinkLabel2.ActiveLinkColor = System.Drawing.Color.DodgerBlue + Me.LinkLabel2.ActiveLinkColor = System.Drawing.Color.LawnGreen Me.LinkLabel2.AutoSize = True Me.LinkLabel2.BackColor = System.Drawing.Color.Transparent Me.LinkLabel2.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) @@ -96,7 +96,7 @@ Partial Class SysprepPreparatorModeDialog ' 'LinkLabel1 ' - Me.LinkLabel1.ActiveLinkColor = System.Drawing.Color.DodgerBlue + Me.LinkLabel1.ActiveLinkColor = System.Drawing.Color.LawnGreen Me.LinkLabel1.AutoSize = True Me.LinkLabel1.BackColor = System.Drawing.Color.Transparent Me.LinkLabel1.Font = New System.Drawing.Font("Segoe UI", 14.25!, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/SysprepPreparatorModeDialog.vb b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/SysprepPreparatorModeDialog.vb index 0e77ac3fc..bb462ee76 100644 --- a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/SysprepPreparatorModeDialog.vb +++ b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/SysprepPreparatorModeDialog.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports Microsoft.VisualBasic.ControlChars Public Class SysprepPreparatorModeDialog @@ -25,57 +25,11 @@ Public Class SysprepPreparatorModeDialog Private Sub SysprepPreparatorModeDialog_Load(sender As Object, e As EventArgs) Handles MyBase.Load Text = MainForm.LinkLabel4.Text - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label1.Text = "The Sysprep Preparation Tool, responsible for preparing systems for image capture, can operate in 2 modes: Automatic mode and Manual mode." & CrLf & CrLf & - "- Automatic mode performs checks and, if said checks pass, prepares and generalizes your computer automatically. You don't need to interact with the tool, unless checks fail or complete with warnings. A default set of options for Sysprep will also be used" & CrLf & - "- Manual mode lets you configure Sysprep launch settings and lets you go through each step of the tool at your own pace. This is recommended for advanced users" & CrLf & CrLf & - "Select the mode you want to use:" - LinkLabel1.Text = "Launch in Automatic mode (recommended)" - LinkLabel2.Text = "Launch in Manual mode (advanced)" - LinkLabel3.Text = "Cancel launch of this tool" - CheckBox1.Text = "Capture image after preparing the system" - CheckBox2.Text = "Copy registry changes and other current preferences for new user profiles" - Case "ESN" - Label1.Text = "La herramienta de preparación de Sysprep, utilizada para preparar sistemas, puede operar en 2 modos: modo automático y modo manual" & CrLf & CrLf & - "- El modo automático realiza comprobaciones y, si dichas comprobaciones se realizaron correctamente, prepara y generaliza su equipo automáticamente. No tiene que interactuar con la herramienta a menos que las comprobaciones fallen o completen con advertencias. Una configuración predeterminada para Sysprep también será usada" & CrLf & - "- El modo manual le permite configurar las opciones de Sysprep y le permite realizar cada paso de la herramienta a su propio ritmo. Esto es recomendado para usuarios avanzados" & CrLf & CrLf & - "Seleccione el modo que quiera usar:" - LinkLabel1.Text = "Iniciar en modo automático (recomendado)" - LinkLabel2.Text = "Iniciar en modo manual (avanzado)" - LinkLabel3.Text = "Cancelar el inicio de esta herramienta" - CheckBox1.Text = "Capturar imagen tras preparar el sistema" - CheckBox2.Text = "Copiar cambios en el registro y otras preferencias actuales para nuevos perfiles de usuario" - Case "FRA" - Label1.Text = "L’outil de préparation Sysprep, chargé de préparer les systèmes pour la capture d’image, peut fonctionner en 2 modes : mode automatique et mode manuel." & CrLf & CrLf & - "- Le mode automatique effectue des vérifications et, si celles-ci réussissent, prépare et généralise automatiquement votre ordinateur. Vous n’avez pas besoin d’interagir avec l’outil, sauf si les vérifications échouent ou renvoient des avertissements. Un ensemble d’options par défaut pour Sysprep sera également utilisé" & CrLf & - "- Le mode manuel vous permet de configurer les paramètres de lancement de Sysprep et de suivre chaque étape de l’outil à votre rythme. Il est recommandé pour les utilisateurs avancés" & CrLf & CrLf & - "Sélectionnez le mode que vous souhaitez utiliser :" - LinkLabel1.Text = "Lancer en mode automatique (recommandé)" - LinkLabel2.Text = "Lancer en mode manuel (avancé)" - LinkLabel3.Text = "Annuler le lancement de cet outil" - CheckBox1.Text = "Capturez l'image après avoir préparé le système" - CheckBox2.Text = "Copier les modifications du registre et autres préférences actuelles pour les nouveaux profils utilisateur" - Case "PTB", "PTG" - Label1.Text = "A ferramenta de preparação Sysprep, responsável por preparar sistemas para a captura de imagem, pode funcionar em 2 modos: modo automático e modo manual." & CrLf & CrLf & - "- O modo automático realiza verificações e, se estas forem bem-sucedidas, prepara e generaliza o computador automaticamente. Não é necessário interagir com a ferramenta, a menos que as verificações falhem ou retornem avisos. Será também usado um conjunto de opções padrão para o Sysprep" & CrLf & - "- O modo manual permite configurar as definições de execução do Sysprep e avançar por cada etapa da ferramenta ao seu próprio ritmo. É recomendado para utilizadores avançados" & CrLf & CrLf & - "Selecione o modo que deseja usar:" - LinkLabel1.Text = "Iniciar em modo automático (recomendado)" - LinkLabel2.Text = "Iniciar em modo manual (avançado)" - LinkLabel3.Text = "Cancelar o lançamento desta ferramenta" - CheckBox1.Text = "Capture a imagem após preparar o sistema" - CheckBox2.Text = "Copiar alterações no registo e outras preferências atuais para novos perfis de utilizador" - Case "ITA" - Label1.Text = "Lo strumento di preparazione Sysprep, responsabile della preparazione dei sistemi per l’acquisizione dell’immagine, può funzionare in 2 modalità: automatica e manuale." & CrLf & CrLf & - "- La modalità automatica esegue dei controlli e, se superati, prepara e generalizza automaticamente il computer. Non è necessario interagire con lo strumento, a meno che i controlli falliscano o restituiscano avvisi. Verrà anche utilizzato un set di opzioni predefinite per Sysprep" & CrLf & - "- La modalità manuale consente di configurare le impostazioni di avvio di Sysprep e di procedere attraverso ogni fase dello strumento al proprio ritmo. È consigliata agli utenti avanzati" & CrLf & CrLf & - "Seleziona la modalità che vuoi utilizzare:" - LinkLabel1.Text = "Avvia in modalità automatica (consigliata)" - LinkLabel2.Text = "Avvia in modalità manuale (avanzata)" - LinkLabel3.Text = "Annulla l’avvio di questo strumento" - CheckBox1.Text = "Acquisizione dell'immagine dopo aver preparato il sistema" - CheckBox2.Text = "Copia le modifiche al registro e altre preferenze correnti per i nuovi profili utente" - End Select + Label1.Text = LocalizationService.ForSection("PEHelper.Sysprep")("Responsibility.Message") + LinkLabel1.Text = LocalizationService.ForSection("PEHelper.Sysprep")("AutomaticMode.Link") + LinkLabel2.Text = LocalizationService.ForSection("PEHelper.Sysprep")("ManualMode.Link") + LinkLabel3.Text = LocalizationService.ForSection("PEHelper.Sysprep")("Cancel.Link") + CheckBox1.Text = LocalizationService.ForSection("PEHelper.Sysprep")("CaptureImage.CheckBox") + CheckBox2.Text = LocalizationService.ForSection("PEHelper.Sysprep")("CopyRegistry.CheckBox") End Sub End Class diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/WDSImageGroupSpecifier.vb b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/WDSImageGroupSpecifier.vb index 0b80c4216..db418e4e2 100644 --- a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/WDSImageGroupSpecifier.vb +++ b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/WDSImageGroupSpecifier.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports System.Xml.Serialization Imports System.IO @@ -10,7 +10,7 @@ Public Class WDSImageGroupSpecifier Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click ' If we chose to create the image group we'll do that first, then we select it If RadioButton2.Checked AndAlso Not CreateWdsImageGroup(TextBox1.Text) Then - MessageBox.Show("The specified WDS image group could not be created.", Text, MessageBoxButtons.OK, MessageBoxIcon.Warning) + MessageBox.Show(LocalizationService.ForSection("PEHelper.WDSImageGroup")("CreateFailed.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Warning) Exit Sub End If @@ -43,7 +43,7 @@ Public Class WDSImageGroupSpecifier End If End If Catch ex As Exception - MsgBox("Could not get image groups.", vbOKOnly + vbCritical, Text) + MsgBox(LocalizationService.ForSection("PEHelper.WDSImageGroup")("LoadFailed.Message"), vbOKOnly + vbCritical, Text) End Try End Sub @@ -93,53 +93,14 @@ Public Class WDSImageGroupSpecifier End Function Private Sub WDSImageGroupSpecifier_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Specify a group in your WDS server..." - Label1.Text = "Choose an action:" - Label2.Text = "This group already exists." - RadioButton1.Text = "Upload this image to the following WDS image group:" - RadioButton2.Text = "Create the following WDS image group for me and upload this image there:" - Refresh_Button.Text = "Refresh" - OK_Button.Text = "OK" - Cancel_Button.Text = "Cancel" - Case "ESN" - Text = "Especificar un grupo en su servidor WDS..." - Label1.Text = "Escoja una acción:" - Label2.Text = "Este grupo ya existe." - RadioButton1.Text = "Subir esta imagen al siguiente grupo de WDS:" - RadioButton2.Text = "Crear el siguiente grupo de WDS por mí y subir esta imagen ahí:" - Refresh_Button.Text = "Actuaizar" - OK_Button.Text = "Aceptar" - Cancel_Button.Text = "Cancelar" - Case "FRA" - Text = "Spécifiez un groupe sur votre serveur WDS..." - Label1.Text = "Choisissez une action :" - Label2.Text = "Ce groupe existe déjà." - RadioButton1.Text = "Télécharger cette image dans le groupe d'images WDS suivant :" - RadioButton2.Text = "Créer le groupe d'images WDS suivant pour moi et y télécharger cette image :" - Refresh_Button.Text = "Actualiser" - OK_Button.Text = "OK" - Cancel_Button.Text = "Annuler" - Case "PTB", "PTG" - Text = "Especifique um grupo no seu servidor WDS..." - Label1.Text = "Escolha uma ação:" - Label2.Text = "Este grupo já existe." - RadioButton1.Text = "Carregar esta imagem para o seguinte grupo de imagens WDS:" - RadioButton2.Text = "Criar o seguinte grupo de imagens WDS para mim e carregar esta imagem para lá:" - Refresh_Button.Text = "Atualizar" - OK_Button.Text = "OK" - Cancel_Button.Text = "Cancelar" - Case "ITA" - Text = "Specificare un gruppo nel proprio server WDS..." - Label1.Text = "Scegliere un'azione:" - Label2.Text = "Questo gruppo esiste già." - RadioButton1.Text = "Carica questa immagine nel seguente gruppo di immagini WDS:" - RadioButton2.Text = "Crea per me il seguente gruppo di immagini WDS e carica questa immagine lì:" - Refresh_Button.Text = "Aggiorna" - OK_Button.Text = "OK" - Cancel_Button.Text = "Annulla" - End Select + Text = LocalizationService.ForSection("PEHelper.WDSImageGroup")("SpecifyGroup.Button") + Label1.Text = LocalizationService.ForSection("PEHelper.WDSImageGroup")("Action.Choose.Label") + Label2.Text = LocalizationService.ForSection("PEHelper.WDSImageGroup")("Already.Exists.Label") + RadioButton1.Text = LocalizationService.ForSection("PEHelper.WDSImageGroup")("Upload.RadioButton") + RadioButton2.Text = LocalizationService.ForSection("PEHelper.WDSImageGroup")("CreateGroup.RadioButton") + Refresh_Button.Text = LocalizationService.ForSection("PEHelper.WDSImageGroup")("Refresh.Button") + OK_Button.Text = LocalizationService.ForSection("PEHelper.WDSImageGroup")("Ok.Button") + Cancel_Button.Text = LocalizationService.ForSection("PEHelper.WDSImageGroup")("Cancel.Button") ComboBox1.Items.Clear() GetWdsGroups() Try diff --git a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/out/autorun.exe b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/out/autorun.exe index dd78ffac5..5aca5c280 100644 Binary files a/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/out/autorun.exe and b/Helpers/extps1/PE_Helper/tools/PEHelperMainMenu/out/autorun.exe differ diff --git a/Helpers/extps1/extappx.ps1 b/Helpers/extps1/extappx.ps1 index d14d79a30..342085e8c 100644 --- a/Helpers/extps1/extappx.ps1 +++ b/Helpers/extps1/extappx.ps1 @@ -1,4 +1,4 @@ -# DISMTools 0.8 - Extended AppX package getter for online installations +# DISMTools 0.8.1 - Extended AppX package getter for online installations param ( [Parameter(Position = 0)] [string] $noNonRemovable = "false", diff --git a/Helpers/extps1/mImgMgr.ps1 b/Helpers/extps1/mImgMgr.ps1 index 7c0db1b43..d289d6759 100644 --- a/Helpers/extps1/mImgMgr.ps1 +++ b/Helpers/extps1/mImgMgr.ps1 @@ -3,7 +3,7 @@ # .'^""""""^. # '^`'. '^"""""""^. # .^"""""`' .^"""""""^. --------------------------------------------------------- -# .^""""""` ^"""""""` | DISMTools 0.8 | +# .^""""""` ^"""""""` | DISMTools 0.8.1 | # ."""""""^. `""""""""' `,` | The connected place for Windows system administration | # '`""""""`. """""""""^ `,,," --------------------------------------------------------- # '^"""""`. ^""""""""""'. .`,,,,,^ | Mounted image manager (CLI version) | @@ -39,7 +39,7 @@ if (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]: Import-Module Dism -$ver = "0.8" +$ver = "0.8.1" # Set window title $host.UI.RawUI.WindowTitle = "Mounted image manager" diff --git a/Installer/ISCC.exe b/Installer/ISCC.exe index 8ef9e7469..f15d4ceee 100644 Binary files a/Installer/ISCC.exe and b/Installer/ISCC.exe differ diff --git a/Installer/ISCmplr.dll b/Installer/ISCmplr.dll index 8546736d4..1dde0ed33 100644 Binary files a/Installer/ISCmplr.dll and b/Installer/ISCmplr.dll differ diff --git a/Installer/ISCmplr.dll.issig b/Installer/ISCmplr.dll.issig index 02f5a02c9..c05bfbd72 100644 --- a/Installer/ISCmplr.dll.issig +++ b/Installer/ISCmplr.dll.issig @@ -1,8 +1,8 @@ format issig-v2 file-name "ISCmplr.dll" -file-size 1523856 -file-hash 4a801a535f8ac8329ef1ab431ecf57296afa24dde5c0e29feea28ba60b20ef85 +file-size 2266016 +file-hash a7a58961ca61bfb2570e66a29b40021b887c9a41d3cbf3ae79611538257864ee file-tag "" key-id def020edee3c4835fd54d85eff8b66d4d899b22a777353ca4a114b652e5e7a28 -sig-r 1fa06a5ac1c4487506def67970ad1136bb88282ed9e2182d6092fa9ffcaa4a02 -sig-s 4920075fd10dad257833e08069c0e760a56c0cb0937060e84498ad6ff690465b +sig-r 91792e3fc50f2a65f96176050065ce7aee95fb9c0655835d32593d3088422c46 +sig-s 5b66457f95baea08348236ee5f6cb343cee3de1773213ee743f249374beb9d83 diff --git a/Installer/ISPP.dll b/Installer/ISPP.dll index 6e42d3947..b9fa07d25 100644 Binary files a/Installer/ISPP.dll and b/Installer/ISPP.dll differ diff --git a/Installer/ISPP.dll.issig b/Installer/ISPP.dll.issig index 9f48b669d..f43b20aa6 100644 --- a/Installer/ISPP.dll.issig +++ b/Installer/ISPP.dll.issig @@ -1,8 +1,8 @@ format issig-v2 file-name "ISPP.dll" -file-size 1006224 -file-hash 81af06aa1d1211b9d5fd162da059072c496d7036874d80ca5801f29d8a3c707c +file-size 1608096 +file-hash f875ddf920f17dceaaad05280dafd6d5376a1a4111cbd5fe97bfc47c286b5a41 file-tag "" key-id def020edee3c4835fd54d85eff8b66d4d899b22a777353ca4a114b652e5e7a28 -sig-r 8053f559c5d2e8310ab1f1b93ec4d24a6cf54bab8e47d9ebc85b30b496f2cffc -sig-s 0cf69b297a466f37559dc485a2fbeea31f55b5fb705ff262271d3281213ee63f +sig-r 32cc3fe7c94ff2028285c17835bba6efa2f5db4b35a1516d8f70ee76c07ee5f8 +sig-s 1eaf33a24b03f4a0663fc55960547356d1a0296b1f09e65240ae0013e316230c diff --git a/Installer/ISPPBuiltins.iss b/Installer/ISPPBuiltins.iss index 2c57fb93f..24a4e2ca0 100644 --- a/Installer/ISPPBuiltins.iss +++ b/Installer/ISPPBuiltins.iss @@ -71,6 +71,11 @@ #define HKEY_LOCAL_MACHINE_64 0x82000002UL #define HKEY_USERS_64 0x82000003UL #define HKEY_CURRENT_CONFIG_64 0x82000005UL +#define HKEY_CLASSES_ROOT_32 0x81000000UL +#define HKEY_CURRENT_USER_32 0x81000001UL +#define HKEY_LOCAL_MACHINE_32 0x81000002UL +#define HKEY_USERS_32 0x81000003UL +#define HKEY_CURRENT_CONFIG_32 0x81000005UL #define HKCR HKEY_CLASSES_ROOT #define HKCU HKEY_CURRENT_USER @@ -82,6 +87,11 @@ #define HKLM64 HKEY_LOCAL_MACHINE_64 #define HKU64 HKEY_USERS_64 #define HKCC64 HKEY_CURRENT_CONFIG_64 +#define HKCR32 HKEY_CLASSES_ROOT_32 +#define HKCU32 HKEY_CURRENT_USER_32 +#define HKLM32 HKEY_LOCAL_MACHINE_32 +#define HKU32 HKEY_USERS_32 +#define HKCC32 HKEY_CURRENT_CONFIG_32 // Exec constants @@ -137,25 +147,45 @@ // GetStringFileInfo helpers -#define GetFileCompany(str FileName) GetStringFileInfo(FileName, COMPANY_NAME) -#define GetFileDescription(str FileName) GetStringFileInfo(FileName, FILE_DESCRIPTION) +#define GetFileCompanyString(str FileName) GetStringFileInfo(FileName, COMPANY_NAME) +#define GetFileDescriptionString(str FileName) GetStringFileInfo(FileName, FILE_DESCRIPTION) #define GetFileVersionString(str FileName) GetStringFileInfo(FileName, FILE_VERSION) -#define GetFileCopyright(str FileName) GetStringFileInfo(FileName, LEGAL_COPYRIGHT) -#define GetFileOriginalFilename(str FileName) GetStringFileInfo(FileName, ORIGINAL_FILENAME) -#define GetFileProductVersion(str FileName) GetStringFileInfo(FileName, PRODUCT_VERSION) +#define GetFileCopyrightString(str FileName) GetStringFileInfo(FileName, LEGAL_COPYRIGHT) +#define GetFileOriginalFilenameString(str FileName) GetStringFileInfo(FileName, ORIGINAL_FILENAME) +#define GetFileProductVersionString(str FileName) GetStringFileInfo(FileName, PRODUCT_VERSION) + +#define GetFileCompany(str FileName) \ + WarnRenamedVersion("GetFileCompany", "GetFileCompanyString"), \ + GetFileCompanyString(FileName) + +#define GetFileDescription(str FileName) \ + WarnRenamedVersion("GetFileDescription", "GetFileDescriptionString"), \ + GetFileDescriptionString(FileName) + +#define GetFileCopyright(str FileName) \ + WarnRenamedVersion("GetFileCopyright", "GetFileCopyrightString"), \ + GetFileCopyrightString(FileName) + +#define GetFileOriginalFilename(str FileName) \ + WarnRenamedVersion("GetFileOriginalFilename", "GetFileOriginalFilenameString"), \ + GetFileOriginalFilenameString(FileName) + +#define GetFileProductVersion(str FileName) \ + WarnRenamedVersion("GetFileProductVersion", "GetFileProductVersionString"), \ + GetFileProductVersionString(FileName) #define DeleteToFirstPeriod(str *S) \ Local[1] = Copy(S, 1, (Local[0] = Pos(".", S)) - 1), \ S = Copy(S, Local[0] + 1), \ Local[1] -#define GetVersionComponents(str FileName, *Major, *Minor, *Rev, *Build) \ +#define GetVersionComponents(str FileName, *Major, *Minor, *Revision, *Build) \ Local[1] = Local[0] = GetVersionNumbersString(FileName), \ Local[1] == "" ? "" : ( \ - Major = Int(DeleteToFirstPeriod(Local[1])), \ - Minor = Int(DeleteToFirstPeriod(Local[1])), \ - Rev = Int(DeleteToFirstPeriod(Local[1])), \ - Build = Int(Local[1]), \ + Major = Int(DeleteToFirstPeriod(Local[1])), \ + Minor = Int(DeleteToFirstPeriod(Local[1])), \ + Revision = Int(DeleteToFirstPeriod(Local[1])), \ + Build = Int(Local[1]), \ Local[0]) #define GetPackedVersion(str FileName, *Version) \ @@ -163,26 +193,26 @@ Version = PackVersionComponents(Local[1], Local[2], Local[3], Local[4]), \ Local[0] -#define GetVersionNumbers(str FileName, *MS, *LS) \ +#define GetVersionNumbers(str FileName, *VersionMS, *VersionLS) \ Local[0] = GetPackedVersion(FileName, Local[1]), \ - UnpackVersionNumbers(Local[1], MS, LS), \ + UnpackVersionNumbers(Local[1], VersionMS, VersionLS), \ Local[0] #define PackVersionNumbers(int VersionMS, int VersionLS) \ VersionMS << 32 | (VersionLS & 0xFFFFFFFF) -#define PackVersionComponents(int Major, int Minor, int Rev, int Build) \ - Major << 48 | (Minor & 0xFFFF) << 32 | (Rev & 0xFFFF) << 16 | (Build & 0xFFFF) +#define PackVersionComponents(int Major, int Minor, int Revision, int Build) \ + Major << 48 | (Minor & 0xFFFF) << 32 | (Revision & 0xFFFF) << 16 | (Build & 0xFFFF) #define UnpackVersionNumbers(int Version, *VersionMS, *VersionLS) \ VersionMS = Version >> 32, \ VersionLS = Version & 0xFFFFFFFF, \ void -#define UnpackVersionComponents(int Version, *Major, *Minor, *Rev, *Build) \ +#define UnpackVersionComponents(int Version, *Major, *Minor, *Revision, *Build) \ Major = Version >> 48, \ Minor = (Version >> 32) & 0xFFFF, \ - Rev = (Version >> 16) & 0xFFFF, \ + Revision = (Version >> 16) & 0xFFFF, \ Build = Version & 0xFFFF, \ void @@ -290,16 +320,16 @@ !P ? 1 : X * Power(X, P - 1) #define Min(int A, int B, int C = MaxInt) \ - A < B ? A < C ? Int(A) : Int(C) : Int(B) + A < B ? A < C ? Int(A) : Int(C) : B < C ? Int(B) : Int(C) #define Max(int A, int B, int C = MinInt) \ - A > B ? A > C ? Int(A) : Int(C) : Int(B) + A > B ? A > C ? Int(A) : Int(C) : B > C ? Int(B) : Int(C) #define SameText(str S1, str S2) \ S1 == S2 #define WarnRenamedVersion(str OldName, str NewName) \ - Warning("Function """ + OldName + """ has been renamed. Use """ + NewName + """ instead.") + Warning(Format('Function "%s" has been renamed. Use "%s" instead.', OldName, NewName)) #define ParseVersion(str FileName, *Major, *Minor, *Rev, *Build) \ WarnRenamedVersion("ParseVersion", "GetVersionComponents"), \ @@ -309,6 +339,34 @@ WarnRenamedVersion("GetFileVersion", "GetVersionNumbersString"), \ GetVersionNumbersString(FileName) +#sub GLS_ProcessFoundLanguagesFile + #define Filename FindGetFileName(GLS_FindHandle) + #define Name LowerCase(RemoveFileExt(Filename)) + #define MessagesFile "compiler:Languages\" + Filename + #emit Format('Name: %s; MessagesFile: %s', Name, MessagesFile) +#endsub + +#define GLS_FindPathName +#define GLS_FindHandle +#define GLS_FindResult + +#sub GLS_DoFindFiles + #for {GLS_FindHandle = GLS_FindResult = FindFirst(GLS_FindPathName + "*.isl", 0); GLS_FindResult; GLS_FindResult = FindNext(GLS_FindHandle)} GLS_ProcessFoundLanguagesFile + #if GLS_FindHandle + #call FindClose(GLS_FindHandle) + #endif +#endsub + +#define GLS_FindFiles(str PathName) \ + GLS_FindPathName = PathName, \ + GLS_DoFindFiles + +#sub EmitLanguagesSection + #emit "[Languages]" + #emit "Name: english; MessagesFile: compiler:Default.isl" + #call GLS_FindFiles(CompilerPath + "Languages\") +#endsub + #ifdef DisablePOptP # pragma parseroption -p- #endif diff --git a/Installer/Setup.e32 b/Installer/Setup.e32 index 7b8bfea8c..ab546e1c1 100644 Binary files a/Installer/Setup.e32 and b/Installer/Setup.e32 differ diff --git a/Installer/Setup.e32.issig b/Installer/Setup.e32.issig index 08240a1b3..0aed1c53d 100644 --- a/Installer/Setup.e32.issig +++ b/Installer/Setup.e32.issig @@ -1,8 +1,8 @@ format issig-v2 file-name "Setup.e32" -file-size 4425216 -file-hash 1e6507e3233ff2cb7845ab36fedb1110fb11797166527c86f3332a06f1f56e66 +file-size 4455424 +file-hash b9e9f8f7c9105ba50404705d7958f46a7981a2656fa4d8141a959822963985e2 file-tag "" key-id def020edee3c4835fd54d85eff8b66d4d899b22a777353ca4a114b652e5e7a28 -sig-r 219442b2fff35e9c2a1a5538cda8613b5d713df2c2713ed54de56b9a573ff23d -sig-s 547eb3bae5f6d1c4bf3853021c54a5edd19d44e33487639607406509460b5d88 +sig-r 9d20ef6d2f0de54bbfc76dbe03d9e6131cba87e0bbf34c03d40a0f7c7dd5fbfd +sig-s d4fc53e5b0d38135e1f482e919354780cf594352cff34126950dd93a178db701 diff --git a/Installer/Setup.e64 b/Installer/Setup.e64 new file mode 100644 index 000000000..9112bee72 Binary files /dev/null and b/Installer/Setup.e64 differ diff --git a/Installer/Setup.e64.issig b/Installer/Setup.e64.issig new file mode 100644 index 000000000..987704f4b --- /dev/null +++ b/Installer/Setup.e64.issig @@ -0,0 +1,8 @@ +format issig-v2 +file-name "Setup.e64" +file-size 6915072 +file-hash ad12a06d09afefa9d1283c6616ef4d56289dc14a7137a12b24653a12637216bb +file-tag "" +key-id def020edee3c4835fd54d85eff8b66d4d899b22a777353ca4a114b652e5e7a28 +sig-r 34a41e15dd694831dd9f6cfe09aa9b82ee6f9735ff381c9240c6c401c427a2c1 +sig-s a390e528207775e0ab1838151c80d219c13704dca6d4e9abe85fbd541be918bd diff --git a/Installer/SetupCustomStyle.e32 b/Installer/SetupCustomStyle.e32 index 4a6b08734..3afe6815c 100644 Binary files a/Installer/SetupCustomStyle.e32 and b/Installer/SetupCustomStyle.e32 differ diff --git a/Installer/SetupCustomStyle.e32.issig b/Installer/SetupCustomStyle.e32.issig index 91cb18db1..08c5e6d48 100644 --- a/Installer/SetupCustomStyle.e32.issig +++ b/Installer/SetupCustomStyle.e32.issig @@ -1,8 +1,8 @@ format issig-v2 file-name "SetupCustomStyle.e32" -file-size 5809152 -file-hash f459154570d75398bd7e3d4ab7f1977edb05031f6ce310c0e2220d434ae94448 +file-size 5960704 +file-hash 0fb31770c86a8b9eee387456a984063e04332c4bdbb38842db290c03d8130ad7 file-tag "" key-id def020edee3c4835fd54d85eff8b66d4d899b22a777353ca4a114b652e5e7a28 -sig-r 68928c9cedc2e19f66f785019c4eafcfb59c8aa2fa7f112ab85ad612575ffe29 -sig-s 58632a499fe13c25dcdb2930b635c6d840068a0b01d5f0a2b0e40f28c06f28fe +sig-r 2c4e8074a8e74ba136dbdd1782c63913cd602c15d24c5f0bb198a1579af3bfdf +sig-s 4cd493e05b0319a1b0c1e239eb6c7f67e99cad1a728653da581b03f84539f324 diff --git a/Installer/SetupCustomStyle.e64 b/Installer/SetupCustomStyle.e64 new file mode 100644 index 000000000..23b995a38 Binary files /dev/null and b/Installer/SetupCustomStyle.e64 differ diff --git a/Installer/SetupCustomStyle.e64.issig b/Installer/SetupCustomStyle.e64.issig new file mode 100644 index 000000000..30c6c7ca0 --- /dev/null +++ b/Installer/SetupCustomStyle.e64.issig @@ -0,0 +1,8 @@ +format issig-v2 +file-name "SetupCustomStyle.e64" +file-size 8670208 +file-hash 256f33b462473a6979314ffddc4df3a3d4eb680d35f0c82ae6ff7842c3f7f1a6 +file-tag "" +key-id def020edee3c4835fd54d85eff8b66d4d899b22a777353ca4a114b652e5e7a28 +sig-r f39514f0b5b2fc733abe59e57a422ce69d1b3b4e29655ac4e3413661442f4b91 +sig-s 480e4c3c40f3b9d11e68e94a04956e1a1da765eb503f02aa8a3be7eacbcb384f diff --git a/Installer/SetupLdr.e32 b/Installer/SetupLdr.e32 index 139edd5ec..08cbba24f 100644 Binary files a/Installer/SetupLdr.e32 and b/Installer/SetupLdr.e32 differ diff --git a/Installer/SetupLdr.e32.issig b/Installer/SetupLdr.e32.issig index 4e25358d4..a829576dc 100644 --- a/Installer/SetupLdr.e32.issig +++ b/Installer/SetupLdr.e32.issig @@ -1,8 +1,8 @@ format issig-v2 file-name "SetupLdr.e32" -file-size 949760 -file-hash 52d555c7880baa710ca72482ae7e6d323d2a923fda846e1a7ea8d8e7eb5cf8cf +file-size 946688 +file-hash 19f02749f8a9e3fdae72d8094d5cc2484f3a4e9264bee78d2191f9334da3b9c7 file-tag "" key-id def020edee3c4835fd54d85eff8b66d4d899b22a777353ca4a114b652e5e7a28 -sig-r 5b146ff3f18c1d469ffdac0291a6abf106dc8de9b5facc6e91e6324add783411 -sig-s 3687fdc94507cf1e59d80fd6d23c653a931835d3b3eeb4f5fde5fad98643103e +sig-r 87f0dade1b2a8f584600bf3a822b71cc31f5e3a61c467b2e21c00b7902b6796c +sig-s 6666f03d479df1c95ec46c94aceb7a235a3a082ba347329435b070a4d1a0f566 diff --git a/Installer/SetupLdr.e64 b/Installer/SetupLdr.e64 new file mode 100644 index 000000000..99a86db7e Binary files /dev/null and b/Installer/SetupLdr.e64 differ diff --git a/Installer/SetupLdr.e64.issig b/Installer/SetupLdr.e64.issig new file mode 100644 index 000000000..9bcf1776c --- /dev/null +++ b/Installer/SetupLdr.e64.issig @@ -0,0 +1,8 @@ +format issig-v2 +file-name "SetupLdr.e64" +file-size 1416192 +file-hash ee1fdf9c8c352a5e699645f8a11fa25e69ef31ab76977c201ef00f470a4d387d +file-tag "" +key-id def020edee3c4835fd54d85eff8b66d4d899b22a777353ca4a114b652e5e7a28 +sig-r 1504709f8169fbf096c5e2804b7c16f0b47166f6ab0e0dc487b8fb1301c8da41 +sig-s 014a9a4914b143fa86df616f44f8bed1927a7d083c6c93830c200babe6520a70 diff --git a/Installer/dt.iss b/Installer/dt.iss index 88fa5f2cc..235c4fdca 100644 --- a/Installer/dt.iss +++ b/Installer/dt.iss @@ -1,7 +1,7 @@ ; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! -#define verConst "0.8" +#define verConst "0.8.1 Preview" #define MyAppName "DISMTools" #define MyAppExeName "DISMTools.exe" @@ -12,9 +12,9 @@ #define MyAppAssocExt ".dtproj" #define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt -#define pfDir "{commonpf}\DISMTools\Stable" +#define pfDir "{commonpf}\DISMTools\Preview" -#define scName "DISMTools" +#define scName "DISMTools Preview" #define CurrentYear GetDateTimeString('yyyy','','') #define MyAppCopyright "(c) 2022-" + CurrentYear + " " + MyAppPublisher @@ -24,7 +24,7 @@ [Setup] ; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) -AppId={{BC1A3BB3-3B0A-4D21-B778-0B21C136C6E0}} +AppId={{AB033696-A4AC-4DF2-B802-9D8BB8B0EEB5}} AppName={#MyAppName} AppVersion={#MyAppVersion} AppVerName={#MyAppName} {#MyAppVersion} @@ -100,12 +100,12 @@ Name: "autoreload"; Description: "Install automatic image reload service"; Group [Files] Source: ".\files\{#MyAppExeName}"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\ActiveDirectoryObjectPicker.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion +Source: ".\files\BDELib.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\DarkUI.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\IniFileParser.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\LICENSE"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\Markdig.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion -Source: ".\files\Microsoft.Dism.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion -Source: ".\files\Microsoft.WindowsAPI*.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion +Source: ".\files\Microsoft*.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\Presentation*.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\Scintilla.NET.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion @@ -114,6 +114,7 @@ Source: ".\files\System.Co*.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.Design.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.Drawing.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.IO.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion +Source: ".\files\System.IO.Pipelines.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.Management.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.Memory.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.Net.Http.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion @@ -123,6 +124,9 @@ Source: ".\files\System.Runtime.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.Runtime.CompilerServices.Unsafe.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.Security*.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.ServiceModel.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion +Source: ".\files\System.Text.*.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion +Source: ".\files\System.Threading.Tasks.Extensions.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion +Source: ".\files\System.ValueTuple.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.Windows.Forms.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.Xml.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\System.Xml.Linq.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion @@ -132,10 +136,10 @@ Source: ".\files\AutoUnattend\*"; DestDir: "{#pfDir}\AutoUnattend"; Flags: ignor Source: ".\files\AutoReload\*"; DestDir: "{#pfDir}\AutoReload"; Flags: ignoreversion recursesubdirs createallsubdirs skipifsourcedoesntexist Source: ".\files\bin\*"; DestDir: "{#pfDir}\bin"; Flags: ignoreversion recursesubdirs createallsubdirs Source: ".\files\docs\*"; DestDir: "{#pfDir}\docs"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\files\language\*"; DestDir: "{#pfDir}\language"; Flags: ignoreversion recursesubdirs createallsubdirs Source: ".\files\runtimes\*"; DestDir: "{#pfDir}\runtimes"; Flags: ignoreversion recursesubdirs createallsubdirs Source: ".\files\tools\*"; DestDir: "{#pfDir}\tools"; Flags: ignoreversion recursesubdirs createallsubdirs Source: ".\files\videos\*"; DestDir: "{#pfDir}\videos"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: ".\files\DT_WinADK.reg"; DestDir: "{#pfDir}"; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Registry] @@ -153,96 +157,100 @@ Root: HKA; Subkey: "Software\Classes\Applications\StarterScriptEditor.exe\Suppor ; Program registry entries Root: HKCU; Subkey: "Software\DISMTools"; ValueType: none; Flags: uninsdeletekey createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable"; ValueType: none; Flags: uninsdeletekey createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\AdvBgProcesses"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\AdvBgProcesses"; ValueType: dword; ValueName: "DetectAllDrivers"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\AdvBgProcesses"; ValueType: dword; ValueName: "EnhancedAppxGetter"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\AdvBgProcesses"; ValueType: dword; ValueName: "RunAllProcs"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\AdvBgProcesses"; ValueType: dword; ValueName: "SkipFrameworks"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\AdvBgProcesses"; ValueType: dword; ValueName: "SkipNonRemovable"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\BgProcesses"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\BgProcesses"; ValueType: dword; ValueName: "NotifyFrequency"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\BgProcesses"; ValueType: dword; ValueName: "ShowNotification"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; ValueType: dword; ValueName: "NoNTSamMappings"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; ValueType: dword; ValueName: "NoRestart"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; ValueType: string; ValueName: "PEHelper.UnattendedFile"; ValueData: ""; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; ValueType: dword; ValueName: "PEHelper.CopyToVentoy"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; ValueType: dword; ValueName: "PEHelper.Use2023EFI"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; ValueType: dword; ValueName: "PEHelper.IncludeSysDrvs"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; ValueType: dword; ValueName: "Quiet"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; ValueType: dword; ValueName: "AppxRemovalDisplayNameFormat"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; ValueType: dword; ValueName: "PreventSystemFromSleeping"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ImgOps"; ValueType: dword; ValueName: "HumanizeDates"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\Logs"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\Logs"; ValueType: dword; ValueName: "AutoLogs"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Logs"; ValueType: expandsz; ValueName: "LogFile"; ValueData: "{win}\Logs\DISM\DISM.log"; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Logs"; ValueType: dword; ValueName: "LogLevel"; ValueData: 3; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Logs"; ValueType: expandsz; ValueName: "SystemEditor"; ValueData: "{win}\system32\notepad.exe"; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Logs"; ValueType: dword; ValueName: "EnableDynaLog"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\Output"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\Output"; ValueType: dword; ValueName: "EnglishOutput"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Output"; ValueType: dword; ValueName: "ReportView"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: dword; ValueName: "AllCaps"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: dword; ValueName: "ColorMode"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: dword; ValueName: "ColorTheme_Dark"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: dword; ValueName: "ColorTheme_Light"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: dword; ValueName: "ExpandedProgressPanel"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: dword; ValueName: "Language"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: string; ValueName: "LogFont"; ValueData: "Consolas"; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: dword; ValueName: "LogFontBold"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: dword; ValueName: "LogFontSi"; ValueData: 11; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: dword; ValueName: "SecondaryProgressPanelStyle"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Personalization"; ValueType: dword; ValueName: "ShowDateAndTime"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\Program"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\Program"; ValueType: expandsz; ValueName: "DismExe"; ValueData: "{win}\system32\dism.exe"; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Program"; ValueType: dword; ValueName: "SaveOnSettingsIni"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\ScratchDir"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\ScratchDir"; ValueType: dword; ValueName: "AutoScratch"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ScratchDir"; ValueType: expandsz; ValueName: "ScratchDirLocation"; ValueData: ""; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\ScratchDir"; ValueType: dword; ValueName: "UseScratch"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\Startup"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\Startup"; ValueType: dword; ValueName: "CheckForUpdates"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\Startup"; ValueType: dword; ValueName: "RemountImages"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\Shutdown"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\Shutdown"; ValueType: dword; ValueName: "AutoCleanMounts"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\WndParams"; Flags: uninsdeletekey createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\InfoSaver"; Flags: uninsdeletekey createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\InfoSaver"; ValueType: dword; ValueName: "SkipQuestions"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\InfoSaver"; ValueType: dword; ValueName: "Pkg_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\InfoSaver"; ValueType: dword; ValueName: "Feat_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\InfoSaver"; ValueType: dword; ValueName: "AppX_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\InfoSaver"; ValueType: dword; ValueName: "Cap_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\InfoSaver"; ValueType: dword; ValueName: "Drv_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\SearchSettings"; Flags: uninsdeletekey -Root: HKCU; Subkey: "Software\DISMTools\Stable\SearchSettings"; ValueType: string; ValueName: "EngineName"; ValueData: "DuckDuckGo"; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\SearchSettings"; ValueType: dword; ValueName: "AITolerance"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist - -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: dword; ValueName: "ShowWatermark"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: dword; ValueName: "WDSHCGraphoView"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: dword; ValueName: "DTDimShowPnputilOut"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: dword; ValueName: "WDSHCConnAttempts"; ValueData: 5; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: dword; ValueName: "PartTableOverridePreference"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: dword; ValueName: "UEFICA23Preference"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: dword; ValueName: "AutoUnattendCopytoSysprep"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: dword; ValueName: "PXEServerPort"; ValueData: 8080; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: string; ValueName: "KeyboardLayoutCode"; ValueData: "00000409"; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: dword; ValueName: "KeyboardLayoutOverrideExistingLayout"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist -Root: HKCU; Subkey: "Software\DISMTools\Stable\PEPolicy"; ValueType: dword; ValueName: "AnswerFileConflictResponse"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview"; ValueType: none; Flags: uninsdeletekey createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\AdvBgProcesses"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\AdvBgProcesses"; ValueType: dword; ValueName: "DetectAllDrivers"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\AdvBgProcesses"; ValueType: dword; ValueName: "EnhancedAppxGetter"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\AdvBgProcesses"; ValueType: dword; ValueName: "RunAllProcs"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\AdvBgProcesses"; ValueType: dword; ValueName: "SkipFrameworks"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\AdvBgProcesses"; ValueType: dword; ValueName: "SkipNonRemovable"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\BgProcesses"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\BgProcesses"; ValueType: dword; ValueName: "NotifyFrequency"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\BgProcesses"; ValueType: dword; ValueName: "ShowNotification"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "NoNTSamMappings"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "NoRestart"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: string; ValueName: "PEHelper.UnattendedFile"; ValueData: ""; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "PEHelper.CopyToVentoy"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "PEHelper.Use2023EFI"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "PEHelper.IncludeSysDrvs"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "PEHelper.MaxConcurrentISO"; ValueData: 2; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "Quiet"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "AppxRemovalDisplayNameFormat"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "PreventSystemFromSleeping"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "HumanizeDates"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ImgOps"; ValueType: dword; ValueName: "LockUnlockedVolumes"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\Logs"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\Logs"; ValueType: dword; ValueName: "AutoLogs"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Logs"; ValueType: expandsz; ValueName: "LogFile"; ValueData: "{win}\Logs\DISM\DISM.log"; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Logs"; ValueType: dword; ValueName: "LogLevel"; ValueData: 3; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Logs"; ValueType: expandsz; ValueName: "SystemEditor"; ValueData: "{win}\system32\notepad.exe"; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Logs"; ValueType: dword; ValueName: "EnableDynaLog"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\Output"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\Output"; ValueType: dword; ValueName: "EnglishOutput"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Output"; ValueType: dword; ValueName: "ReportView"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: dword; ValueName: "AllCaps"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: dword; ValueName: "ColorMode"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: dword; ValueName: "ColorTheme_Dark"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: dword; ValueName: "ColorTheme_Light"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: dword; ValueName: "ExpandedProgressPanel"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: string; ValueName: "LanguageCode"; ValueData: "en-US"; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: string; ValueName: "LogFont"; ValueData: "Consolas"; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: dword; ValueName: "LogFontBold"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: dword; ValueName: "LogFontSi"; ValueData: 11; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: dword; ValueName: "SecondaryProgressPanelStyle"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Personalization"; ValueType: dword; ValueName: "ShowDateAndTime"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\Program"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\Program"; ValueType: expandsz; ValueName: "DismExe"; ValueData: "{win}\system32\dism.exe"; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Program"; ValueType: dword; ValueName: "SaveOnSettingsIni"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\ScratchDir"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\ScratchDir"; ValueType: dword; ValueName: "AutoScratch"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ScratchDir"; ValueType: expandsz; ValueName: "ScratchDirLocation"; ValueData: ""; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\ScratchDir"; ValueType: dword; ValueName: "UseScratch"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\Startup"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\Startup"; ValueType: dword; ValueName: "CheckForUpdates"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\Startup"; ValueType: dword; ValueName: "RemountImages"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\Shutdown"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\Shutdown"; ValueType: dword; ValueName: "AutoCleanMounts"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\WndParams"; Flags: uninsdeletekey createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\InfoSaver"; Flags: uninsdeletekey createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\InfoSaver"; ValueType: dword; ValueName: "SkipQuestions"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\InfoSaver"; ValueType: dword; ValueName: "Pkg_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\InfoSaver"; ValueType: dword; ValueName: "Feat_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\InfoSaver"; ValueType: dword; ValueName: "AppX_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\InfoSaver"; ValueType: dword; ValueName: "Cap_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\InfoSaver"; ValueType: dword; ValueName: "Drv_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\SearchSettings"; Flags: uninsdeletekey +Root: HKCU; Subkey: "Software\DISMTools\Preview\SearchSettings"; ValueType: string; ValueName: "EngineName"; ValueData: "DuckDuckGo"; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\SearchSettings"; ValueType: dword; ValueName: "AITolerance"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist + +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "ShowWatermark"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "WDSHCGraphoView"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "DTDimShowPnputilOut"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "WDSHCConnAttempts"; ValueData: 5; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "PartTableOverridePreference"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "UEFICA23Preference"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "AutoUnattendCopytoSysprep"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "PXEServerPort"; ValueData: 8080; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: string; ValueName: "KeyboardLayoutCode"; ValueData: "00000409"; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "KeyboardLayoutOverrideExistingLayout"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "AnswerFileConflictResponse"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "ScanBootImages"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist +Root: HKCU; Subkey: "Software\DISMTools\Preview\PEPolicy"; ValueType: dword; ValueName: "ImageSelectorDefaultOption"; ValueData: 0; Flags: uninsdeletevalue createvalueifdoesntexist ; Special - Set Internet Explorer browser emulation settings Root: HKCU; Subkey: "Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"; ValueType: dword; ValueName: "DISMTools.exe"; ValueData: 11001; Flags: uninsdeletevalue createvalueifdoesntexist diff --git a/Installer/isbzip-x64.dll b/Installer/isbzip-x64.dll new file mode 100644 index 000000000..4abecbe52 Binary files /dev/null and b/Installer/isbzip-x64.dll differ diff --git a/Installer/isbzip-x64.dll.issig b/Installer/isbzip-x64.dll.issig new file mode 100644 index 000000000..40d131b6b --- /dev/null +++ b/Installer/isbzip-x64.dll.issig @@ -0,0 +1,8 @@ +format issig-v2 +file-name "isbzip-x64.dll" +file-size 50592 +file-hash c93a9ae438d92616a1985e01599f6c06c5d6a1c436b69fb69fb910714f5d376b +file-tag "" +key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38 +sig-r 9d62b616c3230c374631fc763c82de2e3f174ec98c1d14d101d43511b549959e +sig-s 32fff3c5d405d9a4377c27bcd2f2f8f441fd3fba1b58265c174d6ae6f6f27026 diff --git a/Installer/isbzip.dll.issig b/Installer/isbzip.dll.issig deleted file mode 100644 index 7c0b124da..000000000 --- a/Installer/isbzip.dll.issig +++ /dev/null @@ -1,6 +0,0 @@ -format issig-v1 -file-size 39200 -file-hash 8072e83385afc4a84006271a87a11fc0a22b149cbd77322669ca56c470d28ced -key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38 -sig-r c5d2720f9be49d87c4800bd8717066613173fae1e26ffb9f31f304a1be40e71e -sig-s c68f97d069e34e7b2b410222032401254c35641d293ebf3fa0078d19b3478db4 diff --git a/Installer/islzma-Arm64EC.dll b/Installer/islzma-Arm64EC.dll new file mode 100644 index 000000000..a6f2987fa Binary files /dev/null and b/Installer/islzma-Arm64EC.dll differ diff --git a/Installer/islzma-Arm64EC.dll.issig b/Installer/islzma-Arm64EC.dll.issig new file mode 100644 index 000000000..efb9ddc78 --- /dev/null +++ b/Installer/islzma-Arm64EC.dll.issig @@ -0,0 +1,8 @@ +format issig-v2 +file-name "islzma-Arm64EC.dll" +file-size 177568 +file-hash 4f508499878e29d151806ca6a65f9c35a407ce5b226bfbc5a7ed0accbe610f57 +file-tag "" +key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38 +sig-r 32048db7a47356ff914c9d8baa6f1136ace486d8f3edecaa1eda1afcb7416eda +sig-s 1d2e634e783e99d0eb601f63b13f2a76ab8d4aa17037389d4f169bbd92dfd50d diff --git a/Installer/islzma-x64.dll b/Installer/islzma-x64.dll new file mode 100644 index 000000000..032c181ed Binary files /dev/null and b/Installer/islzma-x64.dll differ diff --git a/Installer/islzma-x64.dll.issig b/Installer/islzma-x64.dll.issig new file mode 100644 index 000000000..f38907935 --- /dev/null +++ b/Installer/islzma-x64.dll.issig @@ -0,0 +1,8 @@ +format issig-v2 +file-name "islzma-x64.dll" +file-size 167328 +file-hash 40ff69ac37464035cec3338637f360f035f69beff8263c47f5913cbac8813158 +file-tag "" +key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38 +sig-r f0ff4a88964b79087c3e3ba36a955b6ef7fb3cce156083899110a9d056f24d6d +sig-s ba2dab12610ab47adc53ce8624f3087155474994d105bcc227acb783e5ecfe4b diff --git a/Installer/isscint-x64.dll b/Installer/isscint-x64.dll new file mode 100644 index 000000000..d135ebeb9 Binary files /dev/null and b/Installer/isscint-x64.dll differ diff --git a/Installer/isscint-x64.dll.issig b/Installer/isscint-x64.dll.issig new file mode 100644 index 000000000..6de3c4d82 --- /dev/null +++ b/Installer/isscint-x64.dll.issig @@ -0,0 +1,8 @@ +format issig-v2 +file-name "isscint-x64.dll" +file-size 1026192 +file-hash 9e4fd496118127aefe132c4fdea4d133a5300a5dcfb2c86c85c686b28daf462c +file-tag "" +key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38 +sig-r 6fde5caf8329b4c1a89f887fb1413794497b6add12dcc81372cfbf20ebff497b +sig-s 5c1603071dc0ae052f020b3f8c13575223bbb44cee78f26524271b9acd448cc5 diff --git a/Installer/isscint.dll b/Installer/isscint.dll deleted file mode 100644 index bdad50e38..000000000 Binary files a/Installer/isscint.dll and /dev/null differ diff --git a/Installer/isscint.dll.issig b/Installer/isscint.dll.issig deleted file mode 100644 index 3d8230381..000000000 --- a/Installer/isscint.dll.issig +++ /dev/null @@ -1,8 +0,0 @@ -format issig-v2 -file-name "isscint.dll" -file-size 809616 -file-hash ddd2748bc79122a67eed77f6039f6508245e0aa7f0fdbbfca99d1e922a1e8ce4 -file-tag "" -key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38 -sig-r 92103884a7ec028b4d88dc1a4b4d3142992878b6f1ef7b205a1c29e4722846d6 -sig-s a0f544145e34b6fe0dc6c558d5b077f37d408e8935b444c6d1e8407e6ec6d320 diff --git a/Installer/isunzlib-x64.dll b/Installer/isunzlib-x64.dll new file mode 100644 index 000000000..def51d701 Binary files /dev/null and b/Installer/isunzlib-x64.dll differ diff --git a/Installer/isunzlib-x64.dll.issig b/Installer/isunzlib-x64.dll.issig new file mode 100644 index 000000000..42f6f4f08 --- /dev/null +++ b/Installer/isunzlib-x64.dll.issig @@ -0,0 +1,8 @@ +format issig-v2 +file-name "isunzlib-x64.dll" +file-size 28064 +file-hash 372a70a4c31228f5147066e791183eb02b148da33e56dca762bae1481a932160 +file-tag "" +key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38 +sig-r ecada544c8b02cb8c40928811300092d454a0962d15ae770bb8f1abcd67674df +sig-s 20578ef763d7f3a1125465aed9ff7c23b0edebb635cec864fcd9bd88204a75f2 diff --git a/Installer/isunzlib.dll b/Installer/isunzlib.dll new file mode 100644 index 000000000..4940c62ee Binary files /dev/null and b/Installer/isunzlib.dll differ diff --git a/Installer/isunzlib.dll.issig b/Installer/isunzlib.dll.issig new file mode 100644 index 000000000..9149da1a7 --- /dev/null +++ b/Installer/isunzlib.dll.issig @@ -0,0 +1,8 @@ +format issig-v2 +file-name "isunzlib.dll" +file-size 26528 +file-hash 960df5e51ead0d15b7f594b02b2782217b9b4f3221dfda293413f94cd6c0d054 +file-tag "" +key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38 +sig-r 03f05dfe501f3860ff4e51527fdbe936116c5451ab14bd7d172dc240f028aaf6 +sig-s c69c53313cf58f44ea97053e8aee779062bf4d854074d4c9e4c751d3586e05f1 diff --git a/Installer/iszlib-x64.dll b/Installer/iszlib-x64.dll new file mode 100644 index 000000000..3a80dae0c Binary files /dev/null and b/Installer/iszlib-x64.dll differ diff --git a/Installer/iszlib-x64.dll.issig b/Installer/iszlib-x64.dll.issig new file mode 100644 index 000000000..029b0afdb --- /dev/null +++ b/Installer/iszlib-x64.dll.issig @@ -0,0 +1,8 @@ +format issig-v2 +file-name "iszlib-x64.dll" +file-size 38304 +file-hash 098ab5ab0d642c75f5266d603df394d76c5e4bc29354a8328d348d87e824bace +file-tag "" +key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38 +sig-r 2434c5223c71df57d2ab9b69150d8db1cc956f09d24a069a0a62f03086a0c50f +sig-s f72741f0528bb741933e435eaad710b58db8b24577d0bfa84c75ecc19fe5590e diff --git a/Installer/iszlib.dll b/Installer/iszlib.dll deleted file mode 100644 index b326e3a7d..000000000 Binary files a/Installer/iszlib.dll and /dev/null differ diff --git a/Installer/iszlib.dll.issig b/Installer/iszlib.dll.issig deleted file mode 100644 index 6cd14b3c4..000000000 --- a/Installer/iszlib.dll.issig +++ /dev/null @@ -1,8 +0,0 @@ -format issig-v2 -file-name "iszlib.dll" -file-size 34592 -file-hash 14c0d4a2a41572384f8309cdf03de5c6e7ed46bef64cce70d989b2665eff1a47 -file-tag "" -key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38 -sig-r d31c63bffb15dc179f8c589cf956a08967e312f58f268dea451ff8dcc609c108 -sig-s 63aff5169ca160ac3af6fe4b1ab6b03897cc3072dc9ab4f460592c92c106ddfa diff --git a/Installer/mainImg.bmp b/Installer/mainImg.bmp index 6214f02f7..4be1d30c1 100644 Binary files a/Installer/mainImg.bmp and b/Installer/mainImg.bmp differ diff --git a/Installer/mainImg_dark.bmp b/Installer/mainImg_dark.bmp index 2bd253366..d21b0af39 100644 Binary files a/Installer/mainImg_dark.bmp and b/Installer/mainImg_dark.bmp differ diff --git a/MainForm.vb b/MainForm.vb index 8b8222681..5009bbd7a 100644 --- a/MainForm.vb +++ b/MainForm.vb @@ -1,4 +1,4 @@ -Imports System.Net +Imports System.Net Imports System.IO Imports System.Threading Imports Microsoft.VisualBasic.ControlChars @@ -22,6 +22,8 @@ Imports System.Threading.Tasks Imports System.Globalization Imports DISMTools.Elements.InfinityHome Imports System.Text.RegularExpressions +Imports BDELib.BDELib +Imports BDELib.Classes Public Class MainForm @@ -48,7 +50,7 @@ Public Class MainForm Public DismExe As String Public SaveOnSettingsIni As Boolean Public ColorMode As Integer - Public Language As Integer + Public LanguageCode As String = LocalizationService.CurrentCultureCode Public LogFont As String Public LogFile As String Public LogLevel As Integer = 3 @@ -104,8 +106,8 @@ Public Class MainForm Public isSqlServerDTProj As Boolean ' Set branch name and codenames - Public dtBranch As String = "stable" - Public dt_codeName As String = "Infinity" + Public dtBranch As String = "dt_pre_infinity_mk2_relcndid" + Public dt_codeName As String = "InfinityMk2" ' Arrays and other variables used on background processes Public areBackgroundProcessesDone As Boolean @@ -150,12 +152,13 @@ Public Class MainForm Dim IsCompatible As Boolean = True - Dim SysVer As Version + Dim SysVer As New Version Dim NoMigration As Boolean ' Set this variable to true ONLY if the IDE started the program Public SkipUpdates As Boolean ' Same for this one Public drivePath As String = "" + Public InBitLockerMode As Boolean = False Public EnableExperiments As Boolean @@ -201,6 +204,7 @@ Public Class MainForm Public PEHelper_CopyToVentoy As Boolean = False ' Whether to copy new ISO files to Ventoy drives automatically Public PEHelper_Use2023EFI As Boolean = False ' Whether to use Windows UEFI CA 2023-signed boot binaries (EFI ONLY) Public PEHelper_IncludeSysDrvs As Boolean = True ' Whether to include SCSI adapters and network controllers in the DTPE + Public PEHelper_MaxConcurrentISO As Integer = 2 ' Limit for concurrent ISO file creation ' Web Search Settings Public SearchEngineName As String = "DuckDuckGo" ' The name of the selected search engine @@ -226,10 +230,13 @@ Public Class MainForm Public KeyboardLayoutCode As String = "00000409" Public KeyboardLayoutOverrideExistingLayout As Boolean = False Public AnswerFileConflictResponse As Integer = 0 + Public ScanBootImages As Boolean = False + Public ImageSelectorDefaultOption As Integer = 0 ' INFINITY settings Public PreventSystemFromSleeping As Boolean = True ' Whether to call system APIs to prevent the machine from sleeping during image operations Public HumanizeDates As Boolean = True ' Whether to display all date fields in a human-readable format + Public LockUnlockedVolumes As Boolean = True ' Whether to lock unlocked bitlocker volumes after ending offline management Public ReinitializeCurImage As Boolean = True @@ -249,28 +256,7 @@ Public Class MainForm ElseIf args.Length = 2 And args(1) = "/?" Then DynaLog.LogMessage("Help has been requested by the user. Showing help message...") ' Show command-line argument help - MsgBox("You can pass command line arguments like this:" & CrLf & CrLf & _ - " DISMTools.exe " & CrLf & CrLf & _ - "The command line arguments that are available to you are the following:" & CrLf & CrLf & _ - " /setup" & CrLf & _ - " Shows the initial setup wizard and reconfigures the program" & CrLf & _ - " /load=" & CrLf & _ - " Loads a project file. You need to provide an absolute path for a project file, like this:" & CrLf & _ - " DISMTools.exe /load=" & Quote & "C:\foo\bar.dtproj" & Quote & CrLf & _ - " /online" & CrLf & _ - " Enters the online installation management mode" & CrLf & _ - " /offline:" & CrLf & _ - " Enters the offline installation management mode. You need to provide a drive, like this:" & CrLf & _ - " DISMTools.exe /offline:E:\" & CrLf & _ - " /migrate" & CrLf & _ - " Forces setting migration. While you can use this parameter, it should be used by the update system" & CrLf & _ - " /nomig" & CrLf & _ - " Skips setting migration. This parameter speeds up testing" & CrLf & _ - " /noupd" & CrLf & _ - " Disables update checks. Don't use this parameter unless you're testing a change" & CrLf & _ - " /exp" & CrLf & _ - " Enables program experiments if there are any" & CrLf & CrLf & _ - "DISMTools will continue starting up after you close this help message.", vbOKOnly + vbInformation, "DISMTools command line arguments") + MsgBox(LocalizationService.ForSection("Main.CommandLineHelp")("Pass.Arguments.Message"), vbOKOnly + vbInformation, LocalizationService.ForSection("Main.CommandLineHelp")("DISM.Tools.Title")) DynaLog.LogMessage("User accepted the dialog. Continuing startup...") Else DynaLog.LogMessage("Parsing command-line arguments...") @@ -287,31 +273,7 @@ Public Class MainForm argProjPath = arg.Replace("/load=", "").Trim() Else DynaLog.LogMessage("Specified project does NOT satisfy all requirements (either projfile or dir doesn't exist). Cannot continue loading project") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("An invalid project has been specified", vbOKOnly + vbCritical, Text) - Case "ESN" - MsgBox("Se ha especificado un proyecto no válido", vbOKOnly + vbCritical, Text) - Case "FRA" - MsgBox("Un projet non valide a été spécifié", vbOKOnly + vbCritical, Text) - Case "PTB", "PTG" - MsgBox("Foi especificado um projeto inválido", vbOKOnly + vbCritical, Text) - Case "ITA" - MsgBox("È stato specificato un progetto non valido", vbOKOnly + vbCritical, Text) - End Select - Case 1 - MsgBox("An invalid project has been specified", vbOKOnly + vbCritical, Text) - Case 2 - MsgBox("Se ha especificado un proyecto no válido", vbOKOnly + vbCritical, Text) - Case 3 - MsgBox("Un projet non valide a été spécifié", vbOKOnly + vbCritical, Text) - Case 4 - MsgBox("Foi especificado um projeto inválido", vbOKOnly + vbCritical, Text) - Case 5 - MsgBox("È stato specificato un progetto non valido", vbOKOnly + vbCritical, Text) - End Select + MsgBox(LocalizationService.ForSection("Main.GetArguments")("Project.Message"), vbOKOnly + vbCritical, Text) End If ElseIf arg.StartsWith("/online", StringComparison.OrdinalIgnoreCase) Then DynaLog.LogMessage("Detecting if no projects had been passed by the /load flag...") @@ -350,7 +312,6 @@ Public Class MainForm ElseIf arg.StartsWith("/migrate", StringComparison.OrdinalIgnoreCase) Then DynaLog.LogMessage("Setting migration has been requested by the user or by DTUCS. Migrating settings...") MigrationForm.ShowDialog() - Thread.Sleep(1500) ElseIf arg.StartsWith("/nomig", StringComparison.OrdinalIgnoreCase) Then DynaLog.LogMessage("Setting migration has been disabled. Unless you are testing a build straight out of the build process, a configuration file may be incompatible") NoMigration = True @@ -590,7 +551,9 @@ Public Class MainForm " Compilation Preprocessor by og-mrk (https://github.com/og-mrk), modified from WinUtil: (c) " & GetCopyrightTimespan(2022, 2022) & " CT Tech Group LLC" & CrLf & " Driver Installation Module: (c) " & GetCopyrightTimespan(2024, Date.Now.Year) & " CodingWonders Software" & CrLf & " HotInstall: (c) " & GetCopyrightTimespan(2025, Date.Now.Year) & " CodingWonders Software" & CrLf & - " Preboot eXecution Environment (PXE) Helpers: (c) " & GetCopyrightTimespan(2025, Date.Now.Year) & " CodingWonders Software") + " Preboot eXecution Environment (PXE) Helpers: (c) " & GetCopyrightTimespan(2025, Date.Now.Year) & " CodingWonders Software" & CrLf & + " Sysprep Preparation Tool: (c) " & GetCopyrightTimespan(2025, Date.Now.Year) & " CodingWonders Software. Testing helped by Real-MullaC" & CrLf & + " BDE-GUI: (c) " & GetCopyrightTimespan(2026, Date.Now.Year) & " CodingWonders Software, DaleCooper.") DynaLog.LogMessage("- Scintilla.NET: " & "(c) " & GetCopyrightTimespan(2017, 2017) & " Jacob Slusser, " & "(c) " & GetCopyrightTimespan(2020, 2022) & " VPKSoft, " & @@ -613,8 +576,13 @@ Public Class MainForm "Peter William Wagner (" & GetCopyrightTimespan(2017, 2024) & ")") DynaLog.LogMessage("- INI File Parser: (c) " & GetCopyrightTimespan(2008, 2008) & " Ricardo Amores Hernández") DynaLog.LogMessage("- Active Directory Object Picker: Armand du Plessis, Tulpep") + DynaLog.LogMessage("- DynaLog Log Viewer: (c) " & GetCopyrightTimespan(2025, Date.Now.Year) & " CodingWonders Software") + DynaLog.LogMessage("- DISMTools Theme Designer: (c) " & GetCopyrightTimespan(2025, Date.Now.Year) & " CodingWonders Software") + DynaLog.LogMessage("- Starter Script Editor: (c) " & GetCopyrightTimespan(2026, Date.Now.Year) & " CodingWonders Software" & CrLf & + " Starter Script Library: (c) " & GetCopyrightTimespan(2026, Date.Now.Year) & " CodingWonders Software. Testing made by Abs and DaleCooper") + DynaLog.LogMessage("- BitLocker Drive Encryption Managed Library (BDELib): (c) " & GetCopyrightTimespan(2026, Date.Now.Year) & " CodingWonders Software") DynaLog.BeginLogging() - DynaLog.LogMessage("-------- Powered by CONTEMPOR/\NE\/S Wave 1 PREVIEW 2 --------") + DynaLog.LogMessage("-------- Powered by CONTEMPOR/\NE\/S --------") End Sub Private Async Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load @@ -629,7 +597,7 @@ Public Class MainForm If Environment.OSVersion.Version.Major = 6 And Environment.OSVersion.Version.Minor < 2 Then DynaLog.LogMessage("Windows 7 or an earlier version has been detected on this system. Program incompatible -- aborting any future procedures!") SplashScreen.Hide() - MsgBox("This program is incompatible with Windows 7 and Server 2008 R2." & CrLf & "This program uses the DISM API, which requires files from the Assessment and Deployment Kit (ADK). However, support for Windows 7 is not included." & CrLf & CrLf & "The program will be closed.", vbOKOnly + vbCritical, "DISMTools") + MsgBox(LocalizationService.ForSection("Main.Messages")("Incompatible.Win7.Message"), vbOKOnly + vbCritical, "DISMTools") Environment.Exit(1) End If ' Detect .NET Framework version, as the program somehow runs without it @@ -643,7 +611,7 @@ Public Class MainForm If NDPReleaseInt < 528040 Then DynaLog.LogMessage(NDPReleaseInt & " < 528040 - Incompatible .NET Framework Release -- aborting any future procedures!") SplashScreen.Hide() - MsgBox("This program requires .NET Framework 4.8 to function." & CrLf & "You can download it from: dotnet.microsoft.com. Install the framework and run the program again. You may need to restart your system" & CrLf & CrLf & "The program will be closed.", vbOKOnly + vbCritical, "DISMTools") + MsgBox(LocalizationService.ForSection("Main.Messages")("Requires.NET.Message"), vbOKOnly + vbCritical, "DISMTools") Environment.Exit(1) End If Catch ex As Exception @@ -670,12 +638,11 @@ Public Class MainForm End Try End If If Not Debugger.IsAttached Then SplashScreen.Show() - Thread.Sleep(2000) ' I once tested this on a computer which didn't require me to ask for admin privileges. This is a requirement of DISM. Check this If Not My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator) Then DynaLog.LogMessage("This user is not part of the Administrators group/role -- aborting any future procedures!") SplashScreen.Hide() - MsgBox("This program must be run as an administrator." & CrLf & "There are certain software configurations in which Windows will run this program without admin privileges, so you must ask for them manually." & CrLf & CrLf & "Right-click the executable, and select " & Quote & "Run as administrator" & Quote, vbOKOnly + vbCritical, "DISMTools") + MsgBox(LocalizationService.ForSection("Main.Messages")("Run.Admin.Message"), vbOKOnly + vbCritical, "DISMTools") Environment.Exit(1) End If Visible = False @@ -721,8 +688,8 @@ Public Class MainForm End If If Environment.GetCommandLineArgs().Contains("/english") Then DynaLog.LogMessage("DISMTools is forced to use English as its language because /english has been passed. Changing language...") - Language = 1 - ChangeLangs(Language) + LanguageCode = LocalizationService.DefaultCultureCode + ApplyLanguage(LanguageCode) End If UnblockPSHelpers() If StartupRemount Then RemountOrphanedImages() Else HasRemounted = True @@ -860,41 +827,8 @@ Public Class MainForm DynaLog.LogMessage("A custom theme has been detected. There may be visual issues with DISMTools") Dim msg As String = "" Dim titleMsg As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = "Beware of custom themes" - msg = "DISMTools has detected that a custom theme has been set on this system. Some custom themes make the program not look correctly, so it's recommended to switch to the default theme." - Case "ESN" - titleMsg = "Cuidado con temas personalizados" - msg = "DISMTools ha detectado que se ha establecido un tema personalizado en este sistema. Algunos temas de terceros hacen que el programa tenga errores visuales, así que se recomienda que cambie al tema predeterminado." - Case "FRA" - titleMsg = "Attention aux thèmes personnalisés" - msg = "DISMTools a détecté qu'un thème personnalisé a été défini sur ce système. Certains thèmes personnalisés font que le programme ne s'affiche pas correctement, il est donc recommandé de passer au thème par défaut." - Case "PTB", "PTG" - titleMsg = "Cuidado com os temas personalizados" - msg = "O DISMTools detectou que foi definido um tema personalizado neste sistema. Alguns temas personalizados fazem com que o programa não tenha um aspeto correto, pelo que se recomenda a mudança para o tema predefinido." - Case "ITA" - titleMsg = "Attenzione ai temi personalizzati" - msg = "DISMTools ha rilevato che in questo sistema è stato impostato un tema personalizzato. Alcuni temi personalizzati fanno sì che il programma non abbia un aspetto corretto, quindi si consiglia di passare al tema predefinito." - End Select - Case 1 - titleMsg = "Beware of custom themes" - msg = "DISMTools has detected that a custom theme has been set on this system. Some custom themes make the program not look correctly, so it's recommended to switch to the default theme." - Case 2 - titleMsg = "Cuidado con temas personalizados" - msg = "DISMTools ha detectado que se ha establecido un tema personalizado en este sistema. Algunos temas de terceros hacen que el programa tenga errores visuales, así que se recomienda que cambie al tema predeterminado." - Case 3 - titleMsg = "Attention aux thèmes personnalisés" - msg = "DISMTools a détecté qu'un thème personnalisé a été défini sur ce système. Certains thèmes personnalisés font que le programme ne s'affiche pas correctement, il est donc recommandé de passer au thème par défaut." - Case 4 - titleMsg = "Cuidado com os temas personalizados" - msg = "O DISMTools detectou que foi definido um tema personalizado neste sistema. Alguns temas personalizados fazem com que o programa não tenha um aspeto correto, pelo que se recomenda a mudança para o tema predefinido." - Case 5 - titleMsg = "Attenzione ai temi personalizzati" - msg = "DISMTools ha rilevato che in questo sistema è stato impostato un tema personalizzato. Alcuni temi personalizzati fanno sì che il programma non abbia un aspetto corretto, quindi si consiglia di passare al tema predefinito." - End Select + titleMsg = LocalizationService.ForSection("Main.InitDynaLog")("Beware.Custom.Themes.Title") + msg = LocalizationService.ForSection("Main.InitDynaLog")("DISM.Tools.Detected.Message") MsgBox(msg, vbOKOnly + vbExclamation, titleMsg) Else DynaLog.LogMessage("System Theme and PrePolicy Theme are the same.") @@ -923,9 +857,8 @@ Public Class MainForm ' about this. If dx > 120 Or dy > 120 Then DynaLog.LogMessage("Display scaling is over 125%. The program may not look correctly...") - MsgBox("DISMTools has detected that a higher display scaling setting has been set. This can make the program look incorrectly." & CrLf & CrLf & - "We recommend that you lower your scaling setting to 125% (120 DPI) or less, unless you have a small display panel set to a large resolution.", - vbOKOnly + vbInformation, "Higher display scaling setting detected") + MsgBox(LocalizationService.ForSection("Main.Messages")("DISM.Tools.Detected.Message"), + vbOKOnly + vbInformation, LocalizationService.ForSection("Main.Messages")("Higher.Display.Scaling.Title")) End If Catch ex As Exception DynaLog.LogMessage("Could not check DPI settings. Error message: " & ex.Message) @@ -934,8 +867,8 @@ Public Class MainForm If DetectPossibleADKs() = 1 Then DynaLog.LogMessage("An ADK has been installed but is not detected by DISMTools") Dim msg As String = "" - msg = "DISMTools has found a possible Assessment and Deployment Kit installed on your system. However, it is not being detected. Do you want to fix it?" - If MsgBox(msg, vbYesNo + vbQuestion, "Possible ADK installed on your system") = MsgBoxResult.Yes Then + msg = LocalizationService.ForSection("Main.Messages")("DISM.Tools.Found.Message") + If MsgBox(msg, vbYesNo + vbQuestion, LocalizationService.ForSection("Main.Messages")("Possible.ADK.Title")) = MsgBoxResult.Yes Then Try DynaLog.LogMessage("Creating keys...") Dim AdkProc As New Process() @@ -955,55 +888,27 @@ Public Class MainForm DynaLog.LogMessage(SystemInformation.BootMode) If SystemInformation.BootMode <> BootMode.Normal Then DynaLog.LogMessage("This system is in limp home mode. Offering choice to enter online installation management mode...") - Dim safeModeMessage As String = "This computer has booted into Safe Mode. This mode is designed for live operating system recovery." & CrLf & CrLf & - "DISMTools can automatically load the online installation management mode so that you can start attempting repairs." & CrLf & CrLf & - "Do you want to load the online installation management mode?" - If MsgBox(safeModeMessage, vbYesNo + vbQuestion, "Windows is in Safe Mode") = MsgBoxResult.Yes Then + Dim safeModeMessage As String = LocalizationService.ForSection("Main.Messages")("SafeMode.Prompt") + If MsgBox(safeModeMessage, vbYesNo + vbQuestion, LocalizationService.ForSection("Main.Messages")("Windows.Title")) = MsgBoxResult.Yes Then DynaLog.LogMessage("It is official. We are entering online installation management mode to (try to) save this installation...") BeginOnlineManagement(False) End If End If If IsFirstTime Then - Dim tourMessage As String = "Is this your first time using DISMTools? If so, we can help you get started with the Tour." & CrLf & CrLf & - "With the Tour, you can make your first Windows image and test it afterwards. You can follow the tour at any pace you prefer, and you can access it at any time by going to the Help menu." & CrLf & CrLf & - "Do you want to launch the Tour now?" - If MsgBox(tourMessage, vbYesNo + vbQuestion, "Getting Started with DISMTools") = MsgBoxResult.Yes Then + Dim tourMessage As String = LocalizationService.ForSection("Main.Messages")("Tour.Prompt") + If MsgBox(tourMessage, vbYesNo + vbQuestion, LocalizationService.ForSection("Main.Messages")("Getting.Started.DISM.Title")) = MsgBoxResult.Yes Then If Directory.Exists(Path.Combine(Application.StartupPath, "docs", "tour")) Then DynaLog.LogMessage("Tour directory exists. Starting the tour!") - Dim languageCode As String = "en" - - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - languageCode = "en" - Case "ESN" - languageCode = "es" - Case "FRA" - languageCode = "fr" - Case "PTB", "PTG" - languageCode = "pt" - Case "ITA" - languageCode = "it" - End Select - Case 1 - languageCode = "en" - Case 2 - languageCode = "es" - Case 3 - languageCode = "fr" - Case 4 - languageCode = "pt" - Case 5 - languageCode = "it" - End Select + Dim languageCode As String = LocalizationService.GetDocumentationLanguageCode() - tourServer.StartServer() - If tourServer.IsListenerAlive() Then - Process.Start(String.Format("http://localhost:2022/{0}/tour-start.html", languageCode)) - TourActionsTSMI.Visible = True + If tourServer IsNot Nothing Then + tourServer.StartServer() + If tourServer.IsListenerAlive() Then + Process.Start(String.Format("http://localhost:2022/{0}/tour-start.html", languageCode)) + TourActionsTSMI.Visible = True + End If End If End If End If @@ -1026,8 +931,8 @@ Public Class MainForm ColumnHeader4.Width = WindowHelper.ScaleLogical(375) If InstallationType.Equals("Server Core", StringComparison.InvariantCultureIgnoreCase) Then - MessageBox.Show("DISMTools has detected that it is running on a Windows Server Core system. Some functionality may not work as expected.", - "Windows Server Core detected", MessageBoxButtons.OK, MessageBoxIcon.Warning) + MessageBox.Show(LocalizationService.ForSection("Main.Messages")("DISM.Tools.Running.Message"), + LocalizationService.ForSection("Main.Messages")("ServerCore.Title"), MessageBoxButtons.OK, MessageBoxIcon.Warning) End If ' If the window size is lower than 720p (1280x720), then we'll make it 1280x720, since, @@ -1102,121 +1007,16 @@ Public Class MainForm ManualIPStr As String = "", DHCPStr As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - BuildStr = "build" - SysMemStr = "of system memory" - CurDiskStr = "used out of" - NoDomStr = "Not part of a domain" - DomainStr = "Part of a domain" - BDCStr = "Backup domain controller" - PDCStr = "Primary domain controller" - NoIPStr = "Not connected to a network" - ManualIPStr = "Manual" - DHCPStr = "Automatic (assigned by DHCP)" - Case "ESN" - BuildStr = "compilación" - SysMemStr = "de memoria de sistema" - CurDiskStr = "usados de" - NoDomStr = "No es parte de un dominio" - DomainStr = "Es parte de un dominio" - BDCStr = "Controlador de dominio secundario" - PDCStr = "Controlador de dominio primario" - NoIPStr = "No conectado a una red" - ManualIPStr = "Manual" - DHCPStr = "Automática (asignada por DHCP)" - Case "FRA" - BuildStr = "build" - SysMemStr = "de la mémoire système" - CurDiskStr = "utilisé sur" - NoDomStr = "N'appartient pas à un domaine" - DomainStr = "Appartient à un domaine" - BDCStr = "Contrôleur de domaine de secours" - PDCStr = "Contrôleur de domaine principal" - NoIPStr = "Non connecté à un réseau" - ManualIPStr = "Manuel" - DHCPStr = "Automatique (attribué par DHCP)" - Case "PTB", "PTG" - BuildStr = "compilação" - SysMemStr = "da memória do sistema" - CurDiskStr = "utilizada de" - NoDomStr = "Não faz parte de um domínio" - DomainStr = "Faz parte de um domínio" - BDCStr = "Controlador de domínio de backup" - PDCStr = "Controlador de domínio primário" - NoIPStr = "Não está ligado a uma rede" - ManualIPStr = "Manual" - DHCPStr = "Automático (atribuído por DHCP)" - Case "ITA" - BuildStr = "build" - SysMemStr = "della memoria di sistema" - CurDiskStr = "utilizzata su" - NoDomStr = "Non fa parte di un dominio" - DomainStr = "Fa parte di un dominio" - BDCStr = "Controller di dominio di backup" - PDCStr = "Controller di dominio primario" - NoIPStr = "Non connesso a una rete" - ManualIPStr = "Manuale" - DHCPStr = "Automatico (assegnato da DHCP)" - End Select - Case 1 - BuildStr = "build" - SysMemStr = "of system memory" - CurDiskStr = "used out of" - NoDomStr = "Not part of a domain" - DomainStr = "Part of a domain" - BDCStr = "Backup domain controller" - PDCStr = "Primary domain controller" - NoIPStr = "Not connected to a network" - ManualIPStr = "Manual" - DHCPStr = "Automatic (assigned by DHCP)" - Case 2 - BuildStr = "compilación" - SysMemStr = "de memoria de sistema" - CurDiskStr = "usados de" - NoDomStr = "No es parte de un dominio" - DomainStr = "Es parte de un dominio" - BDCStr = "Controlador de dominio secundario" - PDCStr = "Controlador de dominio primario" - NoIPStr = "No conectado a una red" - ManualIPStr = "Manual" - DHCPStr = "Automática (asignada por DHCP)" - Case 3 - BuildStr = "build" - SysMemStr = "de la mémoire système" - CurDiskStr = "utilisé sur" - NoDomStr = "N'appartient pas à un domaine" - DomainStr = "Appartient à un domaine" - BDCStr = "Contrôleur de domaine de secours" - PDCStr = "Contrôleur de domaine principal" - NoIPStr = "Non connecté à un réseau" - ManualIPStr = "Manuel" - DHCPStr = "Automatique (attribué par DHCP)" - Case 4 - BuildStr = "compilação" - SysMemStr = "da memória do sistema" - CurDiskStr = "utilizada de" - NoDomStr = "Não faz parte de um domínio" - DomainStr = "Faz parte de um domínio" - BDCStr = "Controlador de domínio de backup" - PDCStr = "Controlador de domínio primário" - NoIPStr = "Não está ligado a uma rede" - ManualIPStr = "Manual" - DHCPStr = "Automático (atribuído por DHCP)" - Case 5 - BuildStr = "build" - SysMemStr = "della memoria di sistema" - CurDiskStr = "utilizzata su" - NoDomStr = "Non fa parte di un dominio" - DomainStr = "Fa parte di un dominio" - BDCStr = "Controller di dominio di backup" - PDCStr = "Controller di dominio primario" - NoIPStr = "Non connesso a una rete" - ManualIPStr = "Manuale" - DHCPStr = "Automatico (assegnato da DHCP)" - End Select + BuildStr = LocalizationService.ForSection("Main.ComputerInfo")("Build.Label") + SysMemStr = LocalizationService.ForSection("Main.ComputerInfo")("SystemMemory.Label") + CurDiskStr = LocalizationService.ForSection("Main.ComputerInfo")("UsedOut.Label") + NoDomStr = LocalizationService.ForSection("Main.ComputerInfo")("Part.Domain.Label") + DomainStr = LocalizationService.ForSection("Main.ComputerInfo")("PartDomain.Label") + BDCStr = LocalizationService.ForSection("Main.ComputerInfo")("Backup.Domain.Label") + PDCStr = LocalizationService.ForSection("Main.ComputerInfo")("Primary.Domain.Label") + NoIPStr = LocalizationService.ForSection("Main.ComputerInfo")("ConnectedNetwork.Label") + ManualIPStr = LocalizationService.ForSection("Main.ComputerInfo")("Manual.Label") + DHCPStr = LocalizationService.ForSection("Main.ComputerInfo")("Automatic.Assigned.Label") ' Computer Information ComputerOSLabel.Text = String.Format("{0} ({1} {2})", My.Computer.Info.OSFullName, BuildStr, Environment.OSVersion.Version.Build) @@ -1228,7 +1028,7 @@ Public Class MainForm ComputerModelLabel.Text = ComputerSystemProps("Model") ComputerProcessorLabel.Text = WMIHelper.GetObjectValue(ComputerProcMOC(0), "Name") ComputerMemoryLabel.Text = String.Format("{0} {1}", Converters.BytesToReadableSize(ComputerSystemProps("TotalPhysicalMemory"), - (Language = 0 AndAlso My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName = "FRA") OrElse Language = 3), SysMemStr) + LanguageCode.Equals("fr-FR", StringComparison.OrdinalIgnoreCase)), SysMemStr) Try Dim CurrentVolProps As Dictionary(Of String, Object) = WMIHelper.GetObjectValues(ComputerCurrentVolMOC(0), "Capacity", "FreeSpace", "Label"), DiskCapacity As Long = CurrentVolProps("Capacity"), @@ -1237,9 +1037,9 @@ Public Class MainForm DiskVolumeLetter As String = Environment.GetEnvironmentVariable("SYSTEMDRIVE"), DiskLabel As String = CurrentVolProps("Label") ComputerStorageLabel.Text = String.Format("{0}\{1}: {2} {3} {4} ({5}%)", DiskVolumeLetter, If(DiskLabel <> "", String.Format(" ({0})", DiskLabel), ""), - Converters.BytesToReadableSize(DiskUsedSpace, (Language = 0 AndAlso My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName = "FRA") OrElse Language = 3), + Converters.BytesToReadableSize(DiskUsedSpace, LanguageCode.Equals("fr-FR", StringComparison.OrdinalIgnoreCase)), CurDiskStr, - Converters.BytesToReadableSize(DiskCapacity, (Language = 0 AndAlso My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName = "FRA") OrElse Language = 3), + Converters.BytesToReadableSize(DiskCapacity, LanguageCode.Equals("fr-FR", StringComparison.OrdinalIgnoreCase)), Math.Round((DiskUsedSpace / DiskCapacity) * 100, 2)) Catch ex As Exception DynaLog.LogMessage("Could not display disk information: " & ex.Message) @@ -1375,31 +1175,7 @@ Public Class MainForm Sub CheckForUpdates(branch As String) DynaLog.LogMessage("Checking for program updates...") UpdateLink.LinkArea = New LinkArea(0, 0) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - UpdateLink.Text = "Checking for updates..." - Case "ESN" - UpdateLink.Text = "Comprobando actualizaciones..." - Case "FRA" - UpdateLink.Text = "Vérification des mises à jour en cours..." - Case "PTB", "PTG" - UpdateLink.Text = "Verificar actualizações..." - Case "ITA" - UpdateLink.Text = "Verifica aggiornamenti..." - End Select - Case 1 - UpdateLink.Text = "Checking for updates..." - Case 2 - UpdateLink.Text = "Comprobando actualizaciones..." - Case 3 - UpdateLink.Text = "Vérification des mises à jour en cours..." - Case 4 - UpdateLink.Text = "Verificar actualizações..." - Case 5 - UpdateLink.Text = "Verifica aggiornamenti..." - End Select + UpdateLink.Text = LocalizationService.ForSection("Main.CheckForUpdates")("CheckingUpdates.Link") Dim latestVer As String = "" Using client As New WebClient() DynaLog.LogMessage("Downloading update information from DISMTools repository...") @@ -1429,41 +1205,8 @@ Public Class MainForm UpdatePanel.Visible = False Else DynaLog.LogMessage("The program is outdated. Recommending the user to update in a subtle way...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - UpdateLink.Text = "A new version is available for download and installation. Click here to learn more" - UpdateLink.LinkArea = New LinkArea(58, 24) - Case "ESN" - UpdateLink.Text = "Hay una nueva versión disponible para su descarga e instalación. Haga clic aquí para saber más" - UpdateLink.LinkArea = New LinkArea(65, 29) - Case "FRA" - UpdateLink.Text = "Une nouvelle version est disponible pour le téléchargement et l'installation. Cliquez ici pour en savoir plus" - UpdateLink.LinkArea = New LinkArea(78, 31) - Case "PTB", "PTG" - UpdateLink.Text = "Está disponível uma nova versão para transferência e instalação. Clique aqui para saber mais" - UpdateLink.LinkArea = New LinkArea(65, 27) - Case "ITA" - UpdateLink.Text = "È disponibile una nuova versione da scaricare e installare. Fare clic qui per saperne di più" - UpdateLink.LinkArea = New LinkArea(60, 32) - End Select - Case 1 - UpdateLink.Text = "A new version is available for download and installation. Click here to learn more" - UpdateLink.LinkArea = New LinkArea(58, 24) - Case 2 - UpdateLink.Text = "Hay una nueva versión disponible para su descarga e instalación. Haga clic aquí para saber más" - UpdateLink.LinkArea = New LinkArea(65, 29) - Case 3 - UpdateLink.Text = "Une nouvelle version est disponible pour le téléchargement et l'installation. Cliquez ici pour en savoir plus" - UpdateLink.LinkArea = New LinkArea(78, 31) - Case 4 - UpdateLink.Text = "Está disponível uma nova versão para transferência e instalação. Clique aqui para saber mais" - UpdateLink.LinkArea = New LinkArea(65, 27) - Case 5 - UpdateLink.Text = "È disponibile una nuova versione da scaricare e installare. Fai clic qui per saperne di più" - UpdateLink.LinkArea = New LinkArea(60, 32) - End Select + UpdateLink.Text = LocalizationService.ForSection("Main.CheckForUpdates")("NewVersion.Available.Link") + UpdateLink.LinkArea = LocalizationService.GetLinkArea(UpdateLink.Text, LocalizationService.ForSection("Main.CheckForUpdates")("Learn.Link")) UpdatePanel.Visible = True End If End If @@ -1484,59 +1227,11 @@ Public Class MainForm DynaLog.LogMessage("Determining if an image is mounted in the project. This is also run at startup...") If imgStatus = 0 Then DynaLog.LogMessage("Nothing/Zero/Zilch/Nada. Report so") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label50.Text = "No" - Case "ESN" - Label50.Text = "No" - Case "FRA" - Label50.Text = "Non" - Case "PTB", "PTG" - Label50.Text = "Não" - Case "ITA" - Label50.Text = "No" - End Select - Case 1 - Label50.Text = "No" - Case 2 - Label50.Text = "No" - Case 3 - Label50.Text = "Non" - Case 4 - Label50.Text = "Não" - Case 5 - Label50.Text = "No" - End Select + Label50.Text = LocalizationService.ForSection("Main.ChangeImgStatus")("No.Button") LinkLabel14.Visible = True Else DynaLog.LogMessage("Yes, we have an image mounted here...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label50.Text = "Yes" - Case "ESN" - Label50.Text = "Sí" - Case "FRA" - Label50.Text = "Oui" - Case "PTB", "PTG" - Label50.Text = "Sim" - Case "ITA" - Label50.Text = "Sì" - End Select - Case 1 - Label50.Text = "Yes" - Case 2 - Label50.Text = "Sí" - Case 3 - Label50.Text = "Oui" - Case 4 - Label50.Text = "Sim" - Case 5 - Label50.Text = "Sì" - End Select + Label50.Text = LocalizationService.ForSection("Main.ChangeImgStatus")("Yes.Button") LinkLabel14.Visible = False End If End Sub @@ -1565,7 +1260,7 @@ Public Class MainForm ColorMode = PersKey.GetValue("ColorMode") DarkThemeIndex = PersKey.GetValue("ColorTheme_Dark") LightThemeIndex = PersKey.GetValue("ColorTheme_Light") - Language = PersKey.GetValue("Language") + LanguageCode = LocalizationService.ResolveStartupCultureCode(PersKey.GetValue("LanguageCode", LocalizationService.DefaultCultureCode)) LogFont = PersKey.GetValue("LogFont").ToString() LogFontSize = CInt(PersKey.GetValue("LogFontSi")) LogFontIsBold = (CInt(PersKey.GetValue("LogFontBold")) = 1) @@ -1590,9 +1285,11 @@ Public Class MainForm PEHelper_CopyToVentoy = (CInt(ImgOpKey.GetValue("PEHelper.CopyToVentoy")) = 1) PEHelper_Use2023EFI = (CInt(ImgOpKey.GetValue("PEHelper.Use2023EFI")) = 1) PEHelper_IncludeSysDrvs = (CInt(ImgOpKey.GetValue("PEHelper.IncludeSysDrvs")) = 1) + PEHelper_MaxConcurrentISO = CInt(ImgOpKey.GetValue("PEHelper.MaxConcurrentISO")) AppxDisplayNameFormatOnRemoval = CInt(ImgOpKey.GetValue("AppxRemovalDisplayNameFormat")) PreventSystemFromSleeping = CInt(ImgOpKey.GetValue("PreventSystemFromSleeping", 1)) = 1 HumanizeDates = CInt(ImgOpKey.GetValue("HumanizeDates", 1)) = 1 + LockUnlockedVolumes = CInt(ImgOpKey.GetValue("LockUnlockedVolumes", 1)) = 1 ImgOpKey.Close() Dim ScrDirKey As RegistryKey = Key.OpenSubKey("ScratchDir") UseScratch = (CInt(ScrDirKey.GetValue("UseScratch")) = 1) @@ -1656,12 +1353,14 @@ Public Class MainForm KeyboardLayoutCode = PEPolicyKey.GetValue("KeyboardLayoutCode", "00000409") KeyboardLayoutOverrideExistingLayout = CInt(PEPolicyKey.GetValue("KeyboardLayoutOverrideExistingLayout", 0)) = 1 AnswerFileConflictResponse = CInt(PEPolicyKey.GetValue("AnswerFileConflictResponse", 0)) + ScanBootImages = CInt(PEPolicyKey.GetValue("ScanBootImages", 0)) = 1 + ImageSelectorDefaultOption = CInt(PEPolicyKey.GetValue("ImageSelectorDefaultOption", 0)) PEPolicyKey.Close() Key.Close() ' Apply program colors immediately ChangePrgColors(ColorMode) ' Apply language settings immediately - ChangeLangs(Language) + ApplyLanguage(LanguageCode) Catch ex As Exception DynaLog.LogMessage("Could not grab settings from registry: " & ex.Message & ". Loading from INI File...") LoadDTSettings(1, True) @@ -1684,10 +1383,13 @@ Public Class MainForm ColorMode = CInt(settingData("Personalization")("ColorMode")) If ColorMode < 0 Then ColorMode = 0 If ColorMode > 2 Then ColorMode = 2 - Language = CInt(settingData("Personalization")("Language")) - If Language < 0 Then Language = 0 - If Language > 5 Then Language = 5 - ChangeLangs(Language) + Dim rawLanguageSetting As String = "" + Try + rawLanguageSetting = settingData("Personalization")("LanguageCode") + Catch + End Try + LanguageCode = LocalizationService.ResolveStartupCultureCode(rawLanguageSetting) + ApplyLanguage(LanguageCode) LightThemeIndex = CInt(settingData("Personalization")("ColorTheme_Light")) DarkThemeIndex = CInt(settingData("Personalization")("ColorTheme_Dark")) ChangePrgColors(ColorMode) @@ -1721,9 +1423,11 @@ Public Class MainForm PEHelper_CopyToVentoy = CInt(settingData("ImgOps")("PEHelper.CopyToVentoy")) = 1 PEHelper_Use2023EFI = CInt(settingData("ImgOps")("PEHelper.Use2023EFI")) = 1 PEHelper_IncludeSysDrvs = CInt(settingData("ImgOps")("PEHelper.IncludeSysDrvs")) = 1 + PEHelper_MaxConcurrentISO = CInt(settingData("ImgOps")("PEHelper.MaxConcurrentISO")) AppxDisplayNameFormatOnRemoval = CInt(settingData("ImgOps")("AppxRemovalDisplayNameFormat")) PreventSystemFromSleeping = CInt(settingData("ImgOps")("PreventSystemFromSleeping")) = 1 HumanizeDates = CInt(settingData("ImgOps")("HumanizeDates")) = 1 + LockUnlockedVolumes = CInt(settingData("ImgOps")("LockUnlockedVolumes")) = 1 If AppxDisplayNameFormatOnRemoval < 0 Then AppxDisplayNameFormatOnRemoval = 0 If AppxDisplayNameFormatOnRemoval > 2 Then AppxDisplayNameFormatOnRemoval = 2 UseScratch = CInt(settingData("ScratchDir")("UseScratch")) = 1 @@ -1776,6 +1480,8 @@ Public Class MainForm KeyboardLayoutCode = settingData("PEPolicy")("KeyboardLayoutCode").Replace(Quote, "") KeyboardLayoutOverrideExistingLayout = CInt(settingData("PEPolicy")("KeyboardLayoutOverrideExistingLayout")) = 1 AnswerFileConflictResponse = CInt(settingData("PEPolicy")("AnswerFileConflictResponse")) + ScanBootImages = CInt(settingData("PEPolicy")("ScanBootImages")) = 1 + ImageSelectorDefaultOption = CInt(settingData("PEPolicy")("ImageSelectorDefaultOption")) Catch ex As Exception DynaLog.LogMessage("Settings could not be loaded. Error message: " & ex.Message) End Try @@ -1832,17 +1538,14 @@ Public Class MainForm End Try End If End If - If AppxDisplayNameFormatOnRemoval < 0 OrElse AppxDisplayNameFormatOnRemoval > 2 Then - AppxDisplayNameFormatOnRemoval = 1 - End If - If isExeProblematic Or isLogFontProblematic Or isLogFileProblematic Or isScratchDirProblematic Then - InvalidSettingsTSMI.Visible = True - End If + If AppxDisplayNameFormatOnRemoval < 0 OrElse AppxDisplayNameFormatOnRemoval > 2 Then AppxDisplayNameFormatOnRemoval = 1 + If isExeProblematic Or isLogFontProblematic Or isLogFileProblematic Or isScratchDirProblematic Then InvalidSettingsTSMI.Visible = True If PartTableOverridePreference < 0 OrElse PartTableOverridePreference > 2 Then PartTableOverridePreference = 0 If UEFICA23Preference < 0 OrElse UEFICA23Preference > 2 Then UEFICA23Preference = 0 If WDSHCConnAttempts < 2 OrElse WDSHCConnAttempts > 16 Then WDSHCConnAttempts = 5 If PXEServerPort < 80 OrElse PXEServerPort > 65535 Then PXEServerPort = 8080 If AnswerFileConflictResponse < 0 OrElse AnswerFileConflictResponse > 2 Then AnswerFileConflictResponse = 0 + If ImageSelectorDefaultOption < 0 OrElse ImageSelectorDefaultOption > 2 Then ImageSelectorDefaultOption = 0 Try Dim KeyboardLayoutRk As RegistryKey = Registry.LocalMachine.OpenSubKey("SYSTEM\CurrentControlSet\Control\Keyboard Layouts", False) Dim KeyboardLayoutCodes As String() = KeyboardLayoutRk.GetSubKeyNames() @@ -1852,35 +1555,34 @@ Public Class MainForm End Try WriteDefaultPEPolicy() + + If PEHelper_MaxConcurrentISO < 1 OrElse PEHelper_MaxConcurrentISO > 10 Then PEHelper_MaxConcurrentISO = 2 End Sub Public Sub WriteDefaultPEPolicy() Dim PartTableOverridePreferenceStr As String = "NoOverride" Select Case PartTableOverridePreference - Case 0 - PartTableOverridePreferenceStr = "NoOverride" - Case 1 - PartTableOverridePreferenceStr = "AlwaysMBR" - Case 2 - PartTableOverridePreferenceStr = "AlwaysGPT" + Case 0 : PartTableOverridePreferenceStr = "NoOverride" + Case 1 : PartTableOverridePreferenceStr = "AlwaysMBR" + Case 2 : PartTableOverridePreferenceStr = "AlwaysGPT" End Select Dim UEFICA23PreferenceStr As String = "AskUser" Select Case UEFICA23Preference - Case 0 - UEFICA23PreferenceStr = "AskUser" - Case 1 - UEFICA23PreferenceStr = "UseNever" - Case 2 - UEFICA23PreferenceStr = "UseAlways" + Case 0 : UEFICA23PreferenceStr = "AskUser" + Case 1 : UEFICA23PreferenceStr = "UseNever" + Case 2 : UEFICA23PreferenceStr = "UseAlways" End Select Dim AnswerFileConflictResponseStr As String = "AskUser" Select Case AnswerFileConflictResponse - Case 0 - AnswerFileConflictResponseStr = "AskUser" - Case 1 - AnswerFileConflictResponseStr = "PreferISO" - Case 2 - AnswerFileConflictResponseStr = "PreferWIM" + Case 0 : AnswerFileConflictResponseStr = "AskUser" + Case 1 : AnswerFileConflictResponseStr = "PreferISO" + Case 2 : AnswerFileConflictResponseStr = "PreferWIM" + End Select + Dim ImageSelectorDefaultOptionStr As String = "AskUser" + Select Case ImageSelectorDefaultOption + Case 0 : ImageSelectorDefaultOptionStr = "AskUser" + Case 1 : ImageSelectorDefaultOptionStr = "LargestFirst" + Case 2 : ImageSelectorDefaultOptionStr = "MostRecentFirst" End Select Dim regContents As String = String.Format("Windows Registry Editor Version 5.00{0}{0}" & @@ -1895,10 +1597,13 @@ Public Class MainForm "{1}PXEServerPort{1}=dword:{9}{0}" & "{1}KeyboardLayoutCode{1}={1}{10}{1}{0}" & "{1}KeyboardLayoutOverrideExistingLayout{1}=dword:0000000{11}{0}" & - "{1}AnswerFileConflictResponse{1}={1}{12}{1}{0}", + "{1}AnswerFileConflictResponse{1}={1}{12}{1}{0}" & + "{1}ScanBootImages{1}=dword:0000000{13}{0}" & + "{1}ImageSelectorDefaultOption{1}={1}{14}{1}{0}", CrLf, Quote, If(ShowWatermark, 1, 0), UEFICA23PreferenceStr, PartTableOverridePreferenceStr, Hex(WDSHCConnAttempts).PadLeft(8, "0"c).ToLowerInvariant(), If(WDSHCGraphoView, 1, 0), If(DTDimShowPnputilOut, 1, 0), - If(AutoUnattendCopytoSysprep, 1, 0), Hex(PXEServerPort).PadLeft(8, "0"c).ToLowerInvariant(), KeyboardLayoutCode, If(KeyboardLayoutOverrideExistingLayout, 1, 0), AnswerFileConflictResponseStr) + If(AutoUnattendCopytoSysprep, 1, 0), Hex(PXEServerPort).PadLeft(8, "0"c).ToLowerInvariant(), KeyboardLayoutCode, + If(KeyboardLayoutOverrideExistingLayout, 1, 0), AnswerFileConflictResponseStr, If(ScanBootImages, 1, 0), ImageSelectorDefaultOptionStr) Try File.WriteAllText(Path.Combine(Application.StartupPath, "bin", "extps1", "PE_Helper", "files", "DefaultPolicy.reg"), regContents) Catch ex As Exception @@ -1917,7 +1622,7 @@ Public Class MainForm "ColorMode = " & ColorMode & CrLf & "ColorTheme_Light = " & LightThemeIndex & CrLf & "ColorTheme_Dark = " & DarkThemeIndex & CrLf & - "Language = " & Language & CrLf & + "LanguageCode = " & Quote & LanguageCode & Quote & CrLf & "LogFont = " & Quote & LogFont & Quote & CrLf & "LogFontSi = " & LogFontSize & CrLf & "LogFontBold = " & LogFontIsBold & CrLf & @@ -1938,10 +1643,12 @@ Public Class MainForm "PEHelper_CopyToVentoy = " & PEHelper_CopyToVentoy & CrLf & "PEHelper_Use2023EFI = " & PEHelper_Use2023EFI & CrLf & "PEHelper_IncludeSysDrvs = " & PEHelper_IncludeSysDrvs & CrLf & + "PEHelper_MaxConcurrentISO = " & PEHelper_MaxConcurrentISO & CrLf & "NoRestart = " & SysNoRestart & CrLf & "AppxRemovalDisplayNameFrmt = " & AppxDisplayNameFormatOnRemoval & CrLf & "PreventSystemFromSleeping = " & PreventSystemFromSleeping & CrLf & "HumanizeDates = " & HumanizeDates & CrLf & + "LockUnlockedVolumes = " & LockUnlockedVolumes & CrLf & "UseScratch = " & UseScratch & CrLf & "AutoScratch = " & AutoScrDir & CrLf & "ScratchDirLocation = " & Quote & ScratchDir & Quote & CrLf & @@ -1979,7 +1686,9 @@ Public Class MainForm "PXEServerPort = " & PXEServerPort & CrLf & "KeyboardLayoutCode = " & KeyboardLayoutCode & CrLf & "KeyboardLayoutOverrideExistingLayout= " & KeyboardLayoutOverrideExistingLayout & CrLf & - "AnswerFileConflictResponse = " & AnswerFileConflictResponse) + "AnswerFileConflictResponse = " & AnswerFileConflictResponse & CrLf & + "ScanBootImages = " & ScanBootImages & CrLf & + "ImageSelectorDefaultOption = " & ImageSelectorDefaultOption) End Sub #Region "Background Processes" @@ -2090,59 +1799,11 @@ Public Class MainForm End Select DynaLog.LogMessage("Amount of steps: " & pbOpNums) If pbOpNums > 1 Then progressDivs = 100 / pbOpNums Else progressDivs = 0 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Running processes" - Case "ESN" - progressLabel = "Ejecutando procesos" - Case "FRA" - progressLabel = "Processus en cours" - Case "PTB", "PTG" - progressLabel = "Processos em curso" - Case "ITA" - progressLabel = "Processi in corso" - End Select - Case 1 - progressLabel = "Running processes" - Case 2 - progressLabel = "Ejecutando procesos" - Case 3 - progressLabel = "Processus en cours" - Case 4 - progressLabel = "Processos em curso" - Case 5 - progressLabel = "Processi in corso" - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("RunningProcesses.Label") ImgBW.ReportProgress(0) If GatherBasicInfo Then DynaLog.LogMessage("Beginning background process work by getting standard image info...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting basic image information..." - Case "ESN" - progressLabel = "Obteniendo información básica de la imagen..." - Case "FRA" - progressLabel = "Obtention des informations basiques sur l'image en cours..." - Case "PTB", "PTG" - progressLabel = "Obter informações básicas sobre a imagem..." - Case "ITA" - progressLabel = "Verifica informazioni elementari immagine..." - End Select - Case 1 - progressLabel = "Getting basic image information..." - Case 2 - progressLabel = "Obteniendo información básica de la imagen..." - Case 3 - progressLabel = "Obtention des informations basiques sur l'image en cours..." - Case 4 - progressLabel = "Obter informações básicas sobre a imagem..." - Case 5 - progressLabel = "Verifica informazioni principali dell'immagine..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Getting.Basic.Image.Label") ImgBW.ReportProgress(progressMin + progressDivs) GetBasicImageInfo(OnlineMode, OfflineMode) If isOrphaned Then @@ -2162,31 +1823,7 @@ Public Class MainForm If Not IsCompatible Then Exit Sub If GatherAdvancedInfo Then DynaLog.LogMessage("Getting the remaining bits of information...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting advanced image information..." - Case "ESN" - progressLabel = "Obteniendo información avanzada de la imagen..." - Case "FRA" - progressLabel = "Obtention des informations avancées sur l'image en cours..." - Case "PTB", "PTG" - progressLabel = "Obter informações avançadas sobre a imagem..." - Case "ITA" - progressLabel = "Verifica informazioni avanzate immagine..." - End Select - Case 1 - progressLabel = "Getting advanced image information..." - Case 2 - progressLabel = "Obteniendo información avanzada de la imagen..." - Case 3 - progressLabel = "Obtention des informations avancées sur l'image en cours..." - Case 4 - progressLabel = "Obter informações avançadas sobre a imagem..." - Case 5 - progressLabel = "Verifica informazioni dettagliate dell'immagine..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("AdvancedImageInfo.Label") ImgBW.ReportProgress(progressMin + progressDivs) GetAdvancedImageInfo(OnlineMode, OfflineMode) End If @@ -2251,31 +1888,7 @@ Public Class MainForm progressMin = 20 Select Case bgProcOptn Case 0 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting image packages..." - Case "ESN" - progressLabel = "Obteniendo paquetes de la imagen..." - Case "FRA" - progressLabel = "Obtention des paquets de l'image en cours..." - Case "PTB", "PTG" - progressLabel = "Obter pacotes de imagem..." - Case "ITA" - progressLabel = "Verifica pacchetti immagine..." - End Select - Case 1 - progressLabel = "Getting image packages..." - Case 2 - progressLabel = "Obteniendo paquetes de la imagen..." - Case 3 - progressLabel = "Obtention des paquets de l'image en cours..." - Case 4 - progressLabel = "Obter pacotes de imagem..." - Case 5 - progressLabel = "Ricerca pacchetti immagine..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Getting.Image.Packages.Label") ImgBW.ReportProgress(20) GetImagePackages(OnlineMode) If ImgBW.CancellationPending Then @@ -2283,31 +1896,7 @@ Public Class MainForm If session IsNot Nothing Then DismApi.CloseSession(session) Exit Sub End If - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting image features..." - Case "ESN" - progressLabel = "Obteniendo características de la imagen..." - Case "FRA" - progressLabel = "Obtention des caractéristiques de l'image en cours..." - Case "PTB", "PTG" - progressLabel = "Obter características de imagem..." - Case "ITA" - progressLabel = "Verifica funzionalità immagini..." - End Select - Case 1 - progressLabel = "Getting image features..." - Case 2 - progressLabel = "Obteniendo características de la imagen..." - Case 3 - progressLabel = "Obtention des caractéristiques de l'image en cours..." - Case 4 - progressLabel = "Obter características de imagem..." - Case 5 - progressLabel = "Verifica funzionalità immagine..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Getting.Image.Features.Label") ImgBW.ReportProgress(progressMin + progressDivs) GetImageFeatures(OnlineMode) If ImgBW.CancellationPending Then @@ -2319,31 +1908,7 @@ Public Class MainForm If Not (CurrentImage.ImageEditionId.Equals("WindowsPE", StringComparison.OrdinalIgnoreCase) OrElse CurrentImage.WinPeInDisguise) And Not (CurrentImage.ImageInstallationType.Contains("Nano") Or CurrentImage.ImageInstallationType.Contains("Core")) Then DynaLog.LogMessage("Windows 8 or later") pbOpNums += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting image provisioned AppX packages (Metro-style applications)..." - Case "ESN" - progressLabel = "Obteniendo paquetes aprovisionados AppX de la imagen (aplicaciones estilo Metro)..." - Case "FRA" - progressLabel = "Obtention des paquets AppX (applications de style Metro) provisionnés de l'image en cours..." - Case "PTB", "PTG" - progressLabel = "Obter pacotes AppX provisionados por imagem (aplicações de estilo Metro)..." - Case "ITA" - progressLabel = "Verifica pacchetti AppX immagine (applicazioni in stile Metro)..." - End Select - Case 1 - progressLabel = "Getting image provisioned AppX packages (Metro-style applications)..." - Case 2 - progressLabel = "Obteniendo paquetes aprovisionados AppX de la imagen (aplicaciones estilo Metro)..." - Case 3 - progressLabel = "Obtention des paquets AppX (applications de style Metro) provisionnés de l'image en cours..." - Case 4 - progressLabel = "Obter pacotes AppX provisionados por imagem (aplicações de estilo Metro)..." - Case 5 - progressLabel = "Ricerca pacchetti AppX immagine (applicazioni in stile Metro)..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Get.Image.Provisioned.Label") ImgBW.ReportProgress(progressMin + progressDivs) GetImageAppxPackages(OnlineMode) If ImgBW.CancellationPending Then @@ -2361,31 +1926,7 @@ Public Class MainForm If Not (CurrentImage.ImageEditionId.Equals("WindowsPE", StringComparison.OrdinalIgnoreCase) OrElse CurrentImage.WinPeInDisguise) And Not CurrentImage.ImageInstallationType.Contains("Nano") Then DynaLog.LogMessage("Windows 10 or later") pbOpNums += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting image Features on Demand (capabilities)..." - Case "ESN" - progressLabel = "Obteniendo características opcionales de la imagen (funcionalidades)..." - Case "FRA" - progressLabel = "Obtention de caractéristiques de l'image à la demande (capacités) en cours..." - Case "PTB", "PTG" - progressLabel = "Obter capacidades de imagem..." - Case "ITA" - progressLabel = "Verifica funzionalità su richiesta dell'immagine (capacità)..." - End Select - Case 1 - progressLabel = "Getting image Features on Demand (capabilities)..." - Case 2 - progressLabel = "Obteniendo características opcionales de la imagen (funcionalidades)..." - Case 3 - progressLabel = "Obtention de caractéristiques de l'image à la demande (capacités) en cours..." - Case 4 - progressLabel = "Obter capacidades de imagem..." - Case 5 - progressLabel = "Verifica funzionalità su richiesta dell'immagine (capacità)..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Get.Image.Features.Label") ImgBW.ReportProgress(progressMin + progressDivs) GetImageCapabilities(OnlineMode) If ImgBW.CancellationPending Then @@ -2399,31 +1940,7 @@ Public Class MainForm Else DynaLog.LogMessage("Not Windows 10 or later") End If - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting image drivers..." - Case "ESN" - progressLabel = "Obteniendo controladores de la imagen..." - Case "FRA" - progressLabel = "Obtention des pilotes de l'image en cours..." - Case "PTB", "PTG" - progressLabel = "Obter controladores de imagem..." - Case "ITA" - progressLabel = "Verifica driver dispositivo immagine..." - End Select - Case 1 - progressLabel = "Getting image drivers..." - Case 2 - progressLabel = "Obteniendo controladores de la imagen..." - Case 3 - progressLabel = "Obtention des pilotes de l'image en cours..." - Case 4 - progressLabel = "Obter controladores de imagem..." - Case 5 - progressLabel = "Ricerca driver immagine..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Getting.Image.Drivers.Label") ImgBW.ReportProgress(progressMin + progressDivs) GetImageDrivers(OnlineMode) If ImgBW.CancellationPending Then @@ -2433,60 +1950,12 @@ Public Class MainForm End If Case 1 DynaLog.LogMessage("Updating recorded OS package information...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting image packages..." - Case "ESN" - progressLabel = "Obteniendo paquetes de la imagen..." - Case "FRA" - progressLabel = "Obtention des paquets de l'image en cours..." - Case "PTB", "PTG" - progressLabel = "Obter pacotes de imagem..." - Case "ITA" - progressLabel = "Verifica pacchetti immagine..." - End Select - Case 1 - progressLabel = "Getting image packages..." - Case 2 - progressLabel = "Obteniendo paquetes de la imagen..." - Case 3 - progressLabel = "Obtention des paquets de l'image en cours..." - Case 4 - progressLabel = "Obter pacotes de imagem..." - Case 5 - progressLabel = "Ricerca pacchetti immagine..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Getting.Image.Packages.Label") ImgBW.ReportProgress(20) GetImagePackages(OnlineMode) Case 2 DynaLog.LogMessage("Updating recorded feature information...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting image features..." - Case "ESN" - progressLabel = "Obteniendo características de la imagen..." - Case "FRA" - progressLabel = "Obtention des caractéristiques de l'image en cours..." - Case "PTB", "PTG" - progressLabel = "Obter características de imagem..." - Case "ITA" - progressLabel = "Verifica funzionalità immagini..." - End Select - Case 1 - progressLabel = "Getting image features..." - Case 2 - progressLabel = "Obteniendo características de la imagen..." - Case 3 - progressLabel = "Obtention des caractéristiques de l'image en cours..." - Case 4 - progressLabel = "Obter características de imagem..." - Case 5 - progressLabel = "Verifica funzionalità immagine..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Getting.Image.Features.Label") ImgBW.ReportProgress(progressMin + progressDivs) GetImageFeatures(OnlineMode) Case 3 @@ -2494,31 +1963,7 @@ Public Class MainForm If IsWindows8OrHigher(MountDir & "\Windows\system32\ntoskrnl.exe") = True Then DynaLog.LogMessage("Windows 8 or later") pbOpNums += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting image provisioned AppX packages (Metro-style applications)..." - Case "ESN" - progressLabel = "Obteniendo paquetes aprovisionados AppX de la imagen (aplicaciones estilo Metro)..." - Case "FRA" - progressLabel = "Obtention des paquets AppX (applications de style Metro) provisionnés de l'image en cours..." - Case "PTB", "PTG" - progressLabel = "Obter pacotes AppX provisionados por imagem (aplicações de estilo Metro)..." - Case "ITA" - progressLabel = "Verifica pacchetti AppX immagine (applicazioni in stile Metro)..." - End Select - Case 1 - progressLabel = "Getting image provisioned AppX packages (Metro-style applications)..." - Case 2 - progressLabel = "Obteniendo paquetes aprovisionados AppX de la imagen (aplicaciones estilo Metro)..." - Case 3 - progressLabel = "Obtention des paquets AppX (applications de style Metro) provisionnés de l'image en cours..." - Case 4 - progressLabel = "Obter pacotes AppX provisionados por imagem (aplicações de estilo Metro)..." - Case 5 - progressLabel = "Ricerca pacchetti AppX immagine (applicazioni in stile Metro)..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Get.Image.Provisioned.Label") ImgBW.ReportProgress(progressMin + progressDivs) GetImageAppxPackages(OnlineMode) Else @@ -2530,31 +1975,7 @@ Public Class MainForm If IsWindows10OrHigher(MountDir & "\Windows\system32\ntoskrnl.exe") = True Then DynaLog.LogMessage("Windows 10 or later") pbOpNums += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting image Features on Demand (capabilities)..." - Case "ESN" - progressLabel = "Obteniendo características opcionales de la imagen (funcionalidades)..." - Case "FRA" - progressLabel = "Obtention de caractéristiques de l'image à la demande (capacités) en cours..." - Case "PTB", "PTG" - progressLabel = "Obter capacidades de imagem..." - Case "ITA" - progressLabel = "Verifica funzionalità su richiesta immagine (capacità)..." - End Select - Case 1 - progressLabel = "Getting image Features on Demand (capabilities)..." - Case 2 - progressLabel = "Obteniendo características opcionales de la imagen (funcionalidades)..." - Case 3 - progressLabel = "Obtention de caractéristiques de l'image à la demande (capacités) en cours..." - Case 4 - progressLabel = "Obter capacidades de imagem..." - Case 5 - progressLabel = "Verifica funzionalità su richiesta immagine (capacità)..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Get.Image.Features.Label") ImgBW.ReportProgress(progressMin + progressDivs) GetImageCapabilities(OnlineMode) Else @@ -2563,61 +1984,13 @@ Public Class MainForm End If Case 5 DynaLog.LogMessage("Updating recorded driver information...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Getting image drivers..." - Case "ESN" - progressLabel = "Obteniendo controladores de la imagen..." - Case "FRA" - progressLabel = "Obtention des pilotes de l'image en cours..." - Case "PTB", "PTG" - progressLabel = "Obter controladores de imagem..." - Case "ITA" - progressLabel = "Ricerca driver immagine..." - End Select - Case 1 - progressLabel = "Getting image drivers..." - Case 2 - progressLabel = "Obteniendo controladores de la imagen..." - Case 3 - progressLabel = "Obtention des pilotes de l'image en cours..." - Case 4 - progressLabel = "Obter controladores de imagem..." - Case 5 - progressLabel = "Ricerca driver immagine..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Getting.Image.Drivers.Label") ImgBW.ReportProgress(progressMin + progressDivs) GetImageDrivers(OnlineMode) End Select If bgProcOptn <> 0 And PendingTasks.Contains(True) Then DynaLog.LogMessage("Some tasks need to be finished before we're happy. Finishing them...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Running pending tasks. This may take some time..." - Case "ESN" - progressLabel = "Ejecutando tareas pendientes. Esto puede llevar algo de tiempo..." - Case "FRA" - progressLabel = "Exécution des tâches en cours. Cela peut prendre un certain temps ..." - Case "PTB", "PTG" - progressLabel = "Execução de tarefas pendentes. Isto pode demorar algum tempo..." - Case "ITA" - progressLabel = "Esecuzione di attività in sospeso. Questa operazione potrebbe richiedere del tempo..." - End Select - Case 1 - progressLabel = "Running pending tasks. This may take some time..." - Case 2 - progressLabel = "Ejecutando tareas pendientes. Esto puede llevar algo de tiempo..." - Case 3 - progressLabel = "Exécution des tâches en cours. Cela peut prendre un certain temps ..." - Case 4 - progressLabel = "Execução de tarefas pendentes. Isto pode demorar algum tempo..." - Case 5 - progressLabel = "Esecuzione di attività in sospeso. Questa operazione potrebbe richiedere del tempo..." - End Select + progressLabel = LocalizationService.ForSection("Main.Run.BgProcesses")("Running.Pending.Tasks.Label") ImgBW.ReportProgress(99) DynaLog.LogMessage("Determining whether or not OS package information processes remain. Do them if they do remain...") If PendingTasks(0) Then GetImagePackages(OnlineMode) @@ -2678,51 +2051,9 @@ Public Class MainForm Label48.Text = Environment.OSVersion.Version.Major & "." & Environment.OSVersion.Version.Minor & "." & Environment.OSVersion.Version.Build & "." & revisionNumber CurrentImage.ImageVersion = Environment.OSVersion.Version - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label41.Text = "(Online installation)" - Label47.Text = "(Online installation)" - Label49.Text = "(Online installation)" - Case "ESN" - Label41.Text = "(Instalación activa)" - Label47.Text = "(Instalación activa)" - Label49.Text = "(Instalación activa)" - Case "FRA" - Label41.Text = "(Installation en ligne)" - Label47.Text = "(Installation en ligne)" - Label49.Text = "(Installation en ligne)" - Case "PTB", "PTG" - Label41.Text = "(Instalação em linha)" - Label47.Text = "(Instalação em linha)" - Label49.Text = "(Instalação em linha)" - Case "ITA" - Label41.Text = "(Installazione attiva)" - Label47.Text = "(Installazione attiva)" - Label49.Text = "(Installazione attiva)" - End Select - Case 1 - Label41.Text = "(Online installation)" - Label47.Text = "(Online installation)" - Label49.Text = "(Online installation)" - Case 2 - Label41.Text = "(Instalación activa)" - Label47.Text = "(Instalación activa)" - Label49.Text = "(Instalación activa)" - Case 3 - Label41.Text = "(Installation en ligne)" - Label47.Text = "(Installation en ligne)" - Label49.Text = "(Installation en ligne)" - Case 4 - Label41.Text = "(Instalação em linha)" - Label47.Text = "(Instalação em linha)" - Label49.Text = "(Instalação em linha)" - Case 5 - Label41.Text = "(Installazione attiva)" - Label47.Text = "(Installazione attiva)" - Label49.Text = "(Installazione attiva)" - End Select + Label41.Text = LocalizationService.ForSection("Main.Get.Basic")("Online.Install.Label") + Label47.Text = LocalizationService.ForSection("Main.Get.Basic")("Online.Install.Label") + Label49.Text = LocalizationService.ForSection("Main.Get.Basic")("Online.Install.Label") Label46.Text = My.Computer.Info.OSFullName Label44.Text = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)) Label52.Text = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)) @@ -2742,61 +2073,10 @@ Public Class MainForm DynaLog.LogMessage("Getting information about the offline installation...") Label48.Text = FileVersionInfo.GetVersionInfo(MountDir & "\Windows\system32\ntoskrnl.exe").ProductVersion CurrentImage.ImageVersion = New Version(FileVersionInfo.GetVersionInfo(MountDir & "\Windows\system32\ntoskrnl.exe").ProductVersion) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label41.Text = "(Offline installation)" - Label46.Text = "(Offline installation)" - Label47.Text = "(Offline installation)" - Label49.Text = "(Offline installation)" - Case "ESN" - Label41.Text = "(Instalación fuera de línea)" - Label46.Text = "(Instalación fuera de línea)" - Label47.Text = "(Instalación fuera de línea)" - Label49.Text = "(Instalación fuera de línea)" - Case "FRA" - Label41.Text = "(Installation hors ligne)" - Label46.Text = "(Installation hors ligne)" - Label47.Text = "(Installation hors ligne)" - Label49.Text = "(Installation hors ligne)" - Case "PTB", "PTG" - Label41.Text = "(Instalação offline)" - Label46.Text = "(Instalação offline)" - Label47.Text = "(Instalação offline)" - Label49.Text = "(Instalação offline)" - Case "ITA" - Label41.Text = "(Installazione offline)" - Label46.Text = "(Installazione offline)" - Label47.Text = "(Installazione offline)" - Label49.Text = "(Installazione offline)" - End Select - Case 1 - Label41.Text = "(Offline installation)" - Label46.Text = "(Offline installation)" - Label47.Text = "(Offline installation)" - Label49.Text = "(Offline installation)" - Case 2 - Label41.Text = "(Instalación fuera de línea)" - Label46.Text = "(Instalación fuera de línea)" - Label47.Text = "(Instalación fuera de línea)" - Label49.Text = "(Instalación fuera de línea)" - Case 3 - Label41.Text = "(Installation hors ligne)" - Label46.Text = "(Installation hors ligne)" - Label47.Text = "(Installation hors ligne)" - Label49.Text = "(Installation hors ligne)" - Case 4 - Label41.Text = "(Instalação offline)" - Label46.Text = "(Instalação offline)" - Label47.Text = "(Instalação offline)" - Label49.Text = "(Instalação offline)" - Case 5 - Label41.Text = "(Installazione offline)" - Label46.Text = "(Installazione offline)" - Label47.Text = "(Installazione offline)" - Label49.Text = "(Installazione offline)" - End Select + Label41.Text = LocalizationService.ForSection("Main.Get.Basic")("Offline.Install.Item") + Label46.Text = LocalizationService.ForSection("Main.Get.Basic")("Offline.Install.Label") + Label47.Text = LocalizationService.ForSection("Main.Get.Basic")("Offline.Install.Item") + Label49.Text = LocalizationService.ForSection("Main.Get.Basic")("Offline.Install.Item") Label41.Text = MountDir Label44.Text = MountDir Label52.Text = MountDir @@ -3514,7 +2794,7 @@ Public Class MainForm FailedBGProcResultDic.Add(bgProcTitle, errorEx) End Sub - Sub ThrowAPIException(ProcessTitle As String, Optional APIException As DismException = Nothing, Optional GeneralException As Exception = Nothing) + Sub ThrowAPIException(ProcessTitle As String, Optional APIException As Exception = Nothing, Optional GeneralException As Exception = Nothing) Dim errorEx As Exception = Nothing If APIException IsNot Nothing Then errorEx = New Exception(String.Format("DISM API Task Error: {0}", New Win32Exception(APIException.HResult).Message), APIException) If GeneralException IsNot Nothing Then errorEx = New Exception(String.Format("DISM Task Error: {0}", New Win32Exception(GeneralException.HResult).Message), GeneralException) @@ -3610,9 +2890,14 @@ Public Class MainForm pkgReleaseTypeString <> "" AndAlso pkgInstallTimeString <> "" Then + Dim pkgInstallTime As DateTime + If Not DateTime.TryParse(pkgInstallTimeString, CultureInfo.CurrentCulture, DateTimeStyles.None, pkgInstallTime) Then + pkgInstallTime = Date.MinValue + End If + CurrentImage.ImagePackages_Backup.Add(New ImagePackage(pkgNameString, Casters.CastDismPackageStateString(pkgStateString), - New Date(pkgInstallTimeString), + pkgInstallTime, Casters.CastDismReleaseTypeString(pkgReleaseTypeString))) pkgNameString = "" pkgStateString = "" @@ -4141,7 +3426,7 @@ Public Class MainForm End Try settingsData("Personalization").AddKey("ColorTheme_Light", 1) settingsData("Personalization").AddKey("ColorTheme_Dark", 0) - settingsData("Personalization").AddKey("Language", 0) + settingsData("Personalization").AddKey("LanguageCode", Quote & LocalizationService.CurrentCultureCode & Quote) settingsData("Personalization").AddKey("LogFont", Quote & "Consolas" & Quote) settingsData("Personalization").AddKey("LogFontSi", 11) settingsData("Personalization").AddKey("LogFontBold", 0) @@ -4162,9 +3447,12 @@ Public Class MainForm settingsData("ImgOps").AddKey("PEHelper.UnattendedFile", Quote & Quote) settingsData("ImgOps").AddKey("PEHelper.CopyToVentoy", 0) settingsData("ImgOps").AddKey("PEHelper.Use2023EFI", 0) + settingsData("ImgOps").AddKey("PEHelper.IncludeSysDrvs", 1) + settingsData("ImgOps").AddKey("PEHelper.MaxConcurrentISO", 2) settingsData("ImgOps").AddKey("AppxRemovalDisplayNameFormat", 1) settingsData("ImgOps").AddKey("PreventSystemFromSleeping", 1) settingsData("ImgOps").AddKey("HumanizeDates", 1) + settingsData("ImgOps").AddKey("LockUnlockedVolumes", 1) settingsData.Sections.AddSection("ScratchDir") settingsData("ScratchDir").AddKey("UseScratch", 0) settingsData("ScratchDir").AddKey("AutoScratch", 1) @@ -4214,6 +3502,8 @@ Public Class MainForm settingsData("PEPolicy").AddKey("PXEServerPort", 8080) settingsData("PEPolicy").AddKey("KeyboardLayoutCode", Quote & KeyboardLayoutCode & Quote) settingsData("PEPolicy").AddKey("KeyboardLayoutOverrideExistingLayout", 0) + settingsData("PEPolicy").AddKey("ScanBootImages", 0) + settingsData("PEPolicy").AddKey("ImageSelectorDefaultOption", 0) parser.WriteFile(Path.Combine(Application.StartupPath, "settings.ini"), settingsData, UTF8) If File.Exists(Application.StartupPath & "\portable") Then Exit Sub DynaLog.LogMessage("Portable marker does not exist. Configuring settings in registry...") @@ -4236,7 +3526,7 @@ Public Class MainForm End Try PersKey.SetValue("ColorTheme_Light", 1, RegistryValueKind.DWord) PersKey.SetValue("ColorTheme_Dark", 0, RegistryValueKind.DWord) - PersKey.SetValue("Language", 0, RegistryValueKind.DWord) + PersKey.SetValue("LanguageCode", LocalizationService.DefaultCultureCode, RegistryValueKind.String) PersKey.SetValue("LogFont", "Consolas", RegistryValueKind.String) PersKey.SetValue("LogFontSi", 11, RegistryValueKind.DWord) PersKey.SetValue("LogFontBold", 0, RegistryValueKind.DWord) @@ -4260,9 +3550,12 @@ Public Class MainForm ImgOpKey.SetValue("PEHelper.UnattendedFile", "", RegistryValueKind.String) ImgOpKey.SetValue("PEHelper.CopyToVentoy", 0, RegistryValueKind.DWord) ImgOpKey.SetValue("PEHelper.Use2023EFI", 0, RegistryValueKind.DWord) + ImgOpKey.SetValue("PEHelper.IncludeSysDrvs", 1, RegistryValueKind.DWord) + ImgOpKey.SetValue("PEHelper.MaxConcurrentISO", 2, RegistryValueKind.DWord) ImgOpKey.SetValue("AppxRemovalDisplayNameFormat", 1, RegistryValueKind.DWord) ImgOpKey.SetValue("PreventSystemFromSleeping", 1, RegistryValueKind.DWord) ImgOpKey.SetValue("HumanizeDates", 1, RegistryValueKind.DWord) + ImgOpKey.SetValue("LockUnlockedVolumes", 1, RegistryValueKind.DWord) ImgOpKey.Close() Dim ScrDirKey As RegistryKey = Key.CreateSubKey("ScratchDir") ScrDirKey.SetValue("UseScratch", 0, RegistryValueKind.DWord) @@ -4321,6 +3614,8 @@ Public Class MainForm PEPolicyKey.SetValue("AutoUnattendCopytoSysprep", 0, RegistryValueKind.DWord) PEPolicyKey.SetValue("KeyboardLayoutCode", KeyboardLayoutCode, RegistryValueKind.String) PEPolicyKey.SetValue("KeyboardLayoutOverrideExistingLayout", 0, RegistryValueKind.DWord) + PEPolicyKey.SetValue("ScanBootImages", 0, RegistryValueKind.DWord) + PEPolicyKey.SetValue("ImageSelectorDefaultOption", 0, RegistryValueKind.DWord) PEPolicyKey.Close() Key.Close() End Sub @@ -4339,13 +3634,14 @@ Public Class MainForm Dim parser As New FileIniDataParser(), settingsData As New IniData() settingsData.Sections.AddSection("Program") - settingsData("Program").AddKey("DismExe", Quote & DismExe & Quote) + settingsData("Program").AddKey("DismExe", Quote & DismExe.Replace(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "{common:WinDir}") & Quote) settingsData("Program").AddKey("SaveOnSettingsIni", If(SaveOnSettingsIni, 1, 0)) settingsData.Sections.AddSection("Personalization") settingsData("Personalization").AddKey("ColorMode", ColorMode) settingsData("Personalization").AddKey("ColorTheme_Light", LightThemeIndex) settingsData("Personalization").AddKey("ColorTheme_Dark", DarkThemeIndex) - settingsData("Personalization").AddKey("Language", Language) + LanguageCode = LocalizationService.NormalizeCultureCode(LanguageCode) + settingsData("Personalization").AddKey("LanguageCode", Quote & LanguageCode & Quote) settingsData("Personalization").AddKey("LogFont", Quote & LogFont & Quote) settingsData("Personalization").AddKey("LogFontSi", LogFontSize) settingsData("Personalization").AddKey("LogFontBold", If(LogFontIsBold, 1, 0)) @@ -4354,10 +3650,10 @@ Public Class MainForm settingsData("Personalization").AddKey("ExpandedProgressPanel", If(ExpandedProgressPanel, 1, 0)) settingsData("Personalization").AddKey("ShowDateAndTime", If(ShowDateAndTime, 1, 0)) settingsData.Sections.AddSection("Logs") - settingsData("Logs").AddKey("LogFile", Quote & LogFile & Quote) + settingsData("Logs").AddKey("LogFile", Quote & LogFile.Replace(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "{common:WinDir}") & Quote) settingsData("Logs").AddKey("LogLevel", LogLevel) settingsData("Logs").AddKey("AutoLogs", If(AutoLogs, 1, 0)) - settingsData("Logs").AddKey("SystemEditor", Quote & SystemEditor & Quote) + settingsData("Logs").AddKey("SystemEditor", Quote & SystemEditor.Replace(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "{common:WinDir}") & Quote) settingsData("Logs").AddKey("EnableDynaLog", If(EnableDynaLog, 1, 0)) settingsData.Sections.AddSection("ImgOps") settingsData("ImgOps").AddKey("Quiet", If(QuietOperations, 1, 0)) @@ -4367,9 +3663,11 @@ Public Class MainForm settingsData("ImgOps").AddKey("PEHelper.CopyToVentoy", If(PEHelper_CopyToVentoy, 1, 0)) settingsData("ImgOps").AddKey("PEHelper.Use2023EFI", If(PEHelper_Use2023EFI, 1, 0)) settingsData("ImgOps").AddKey("PEHelper.IncludeSysDrvs", If(PEHelper_IncludeSysDrvs, 1, 0)) + settingsData("ImgOps").AddKey("PEHelper.MaxConcurrentISO", PEHelper_MaxConcurrentISO) settingsData("ImgOps").AddKey("AppxRemovalDisplayNameFormat", AppxDisplayNameFormatOnRemoval) settingsData("ImgOps").AddKey("PreventSystemFromSleeping", If(PreventSystemFromSleeping, 1, 0)) settingsData("ImgOps").AddKey("HumanizeDates", If(HumanizeDates, 1, 0)) + settingsData("ImgOps").AddKey("LockUnlockedVolumes", If(LockUnlockedVolumes, 1, 0)) settingsData.Sections.AddSection("ScratchDir") settingsData("ScratchDir").AddKey("UseScratch", If(UseScratch, 1, 0)) settingsData("ScratchDir").AddKey("AutoScratch", If(AutoScrDir, 1, 0)) @@ -4420,17 +3718,17 @@ Public Class MainForm settingsData("PEPolicy").AddKey("KeyboardLayoutCode", Quote & KeyboardLayoutCode & Quote) settingsData("PEPolicy").AddKey("KeyboardLayoutOverrideExistingLayout", If(KeyboardLayoutOverrideExistingLayout, 1, 0)) settingsData("PEPolicy").AddKey("AnswerFileConflictResponse", AnswerFileConflictResponse) + settingsData("PEPolicy").AddKey("ScanBootImages", If(ScanBootImages, 1, 0)) + settingsData("PEPolicy").AddKey("ImageSelectorDefaultOption", ImageSelectorDefaultOption) parser.WriteFile(Path.Combine(Application.StartupPath, "settings.ini"), settingsData, UTF8) Else DynaLog.LogMessage("Attempting to write to registry...") Try ' Tell settings file to use this method DynaLog.LogMessage("Forcing save to registry in INI File...") - Dim SettingRtb As New RichTextBox() With { - .Text = File.ReadAllText(Application.StartupPath & "\settings.ini", UTF8) - } - SettingRtb.Text = SettingRtb.Text.Replace("SaveOnSettingsIni=1", "SaveOnSettingsIni=0").Replace("SaveOnSettingsIni = 1", "SaveOnSettingsIni = 0").Trim() - File.WriteAllText(Application.StartupPath & "\settings.ini", SettingRtb.Text, ASCII) + Dim SettingContents As String = File.ReadAllText(Application.StartupPath & "\settings.ini", UTF8) + SettingContents = SettingContents.Replace("SaveOnSettingsIni=1", "SaveOnSettingsIni=0").Replace("SaveOnSettingsIni = 1", "SaveOnSettingsIni = 0").Trim() + File.WriteAllText(Application.StartupPath & "\settings.ini", SettingContents, ASCII) DynaLog.LogMessage("Setting key values...") Dim KeyStr As String = "Software\DISMTools\" & If(dtBranch.Contains("pre"), "Preview", "Stable") DynaLog.LogMessage("Destination path in registry: HKCU\" & KeyStr) @@ -4445,7 +3743,8 @@ Public Class MainForm PersKey.SetValue("ColorMode", ColorMode, RegistryValueKind.DWord) PersKey.SetValue("ColorTheme_Light", LightThemeIndex, RegistryValueKind.DWord) PersKey.SetValue("ColorTheme_Dark", DarkThemeIndex, RegistryValueKind.DWord) - PersKey.SetValue("Language", Language, RegistryValueKind.DWord) + LanguageCode = LocalizationService.NormalizeCultureCode(LanguageCode) + PersKey.SetValue("LanguageCode", LanguageCode, RegistryValueKind.String) PersKey.SetValue("LogFont", LogFont, RegistryValueKind.String) PersKey.SetValue("LogFontSi", LogFontSize, RegistryValueKind.DWord) PersKey.SetValue("LogFontBold", If(LogFontIsBold, 1, 0), RegistryValueKind.DWord) @@ -4471,9 +3770,11 @@ Public Class MainForm ImgOpKey.SetValue("PEHelper.CopyToVentoy", PEHelper_CopyToVentoy, RegistryValueKind.DWord) ImgOpKey.SetValue("PEHelper.Use2023EFI", PEHelper_Use2023EFI, RegistryValueKind.DWord) ImgOpKey.SetValue("PEHelper.IncludeSysDrvs", PEHelper_IncludeSysDrvs, RegistryValueKind.DWord) + ImgOpKey.SetValue("PEHelper.MaxConcurrentISO", PEHelper_MaxConcurrentISO, RegistryValueKind.DWord) ImgOpKey.SetValue("AppxRemovalDisplayNameFormat", AppxDisplayNameFormatOnRemoval, RegistryValueKind.DWord) ImgOpKey.SetValue("PreventSystemFromSleeping", PreventSystemFromSleeping, RegistryValueKind.DWord) ImgOpKey.SetValue("HumanizeDates", HumanizeDates, RegistryValueKind.DWord) + ImgOpKey.SetValue("LockUnlockedVolumes", LockUnlockedVolumes, RegistryValueKind.DWord) ImgOpKey.Close() DynaLog.LogMessage("Configuring scratch directory settings...") Dim ScrDirKey As RegistryKey = Key.CreateSubKey("ScratchDir") @@ -4545,6 +3846,8 @@ Public Class MainForm PEPolicyKey.SetValue("KeyboardLayoutCode", KeyboardLayoutCode, RegistryValueKind.String) PEPolicyKey.SetValue("KeyboardLayoutOverrideExistingLayout", KeyboardLayoutOverrideExistingLayout, RegistryValueKind.DWord) PEPolicyKey.SetValue("AnswerFileConflictResponse", AnswerFileConflictResponse, RegistryValueKind.DWord) + PEPolicyKey.SetValue("ScanBootImages", ScanBootImages, RegistryValueKind.DWord) + PEPolicyKey.SetValue("ImageSelectorDefaultOption", ImageSelectorDefaultOption, RegistryValueKind.DWord) PEPolicyKey.Close() Key.Close() Catch ex As Exception @@ -4750,3401 +4053,355 @@ Public Class MainForm Next End Sub - Sub ChangeLangs(LangCode As Integer) - DynaLog.LogMessage("Changing program language... (language code: " & LangCode & ")") - Select Case LangCode - Case 0 - DynaLog.LogMessage("Language code is 0. Getting language from host system (may give inaccurate results on systems with multiple MUI packs)...") - DynaLog.LogMessage("Host System language in 3 letters: " & My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName) - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ' Top-level menu items - FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&File".ToUpper(), "&File") - ProjectToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Project".ToUpper(), "&Project") - CommandsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Com&mands".ToUpper(), "Com&mands") - ToolsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Tools".ToUpper(), "&Tools") - HelpToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Help".ToUpper(), "&Help") - InvalidSettingsTSMI.Text = "Invalid settings have been detected" - ' Submenu items - ' Menu - File - NewProjectToolStripMenuItem.Text = "&New project..." - OpenExistingProjectToolStripMenuItem.Text = "&Open existing project" - ManageOnlineInstallationToolStripMenuItem.Text = "&Manage online installation" - ManageOfflineInstallationToolStripMenuItem.Text = "Manage o&ffline installation..." - RecentProjectsListMenu.Text = "Recent projects" - SaveProjectToolStripMenuItem.Text = "&Save project..." - SaveProjectasToolStripMenuItem.Text = "Save project &as..." - ExitToolStripMenuItem.Text = "E&xit" - ' Menu - Project - ViewProjectFilesInFileExplorerToolStripMenuItem.Text = "View project files in File Explorer" - UnloadProjectToolStripMenuItem.Text = "Unload project..." - SwitchImageIndexesToolStripMenuItem.Text = "Switch image indexes..." - ProjectPropertiesToolStripMenuItem.Text = "Project properties" - ImagePropertiesToolStripMenuItem.Text = "Image properties" - ' Menu - Commands - ImageManagementToolStripMenuItem.Text = "Image management" - OSPackagesToolStripMenuItem.Text = "OS packages" - ProvisioningPackagesToolStripMenuItem.Text = "Provisioning packages" - AppPackagesToolStripMenuItem.Text = "AppX packages" - AppPatchesToolStripMenuItem.Text = "App (MSP) servicing" - DefaultAppAssociationsToolStripMenuItem.Text = "Default app associations" - LanguagesAndRegionSettingsToolStripMenuItem.Text = "Languages and regional settings" - CapabilitiesToolStripMenuItem.Text = "Capabilities" - WindowsEditionsToolStripMenuItem.Text = "Windows editions" - DriversToolStripMenuItem.Text = "Drivers" - UnattendedAnswerFilesToolStripMenuItem.Text = "Unattended answer files" - WindowsPEServicingToolStripMenuItem.Text = "Windows PE servicing" - OSUninstallToolStripMenuItem.Text = "OS uninstall" - ReservedStorageToolStripMenuItem.Text = "Reserved storage" - ' Menu - Commands - Image management - AppendImage.Text = "Append capture directory to image..." - ApplyFFU.Text = "Apply FFU or SFU file..." - ApplyImage.Text = "Apply WIM or SWM file..." - CaptureCustomImage.Text = "Capture incremental changes to file..." - CaptureFFU.Text = "Capture partitions to FFU file..." - CaptureImage.Text = "Capture image of a drive to WIM file..." - CleanupMountpoints.Text = "Delete resources from corrupted image..." - CommitImage.Text = "Apply changes to image..." - DeleteImage.Text = "Delete volume images from WIM file..." - ExportImage.Text = "Export image..." - GetImageInfo.Text = "Get image information..." - GetWIMBootEntry.Text = "Get WIMBoot configuration entries..." - ListImage.Text = "List files and directories in image..." - MountImage.Text = "Mount image..." - OptimizeFFU.Text = "Optimize FFU file..." - OptimizeImage.Text = "Optimize image..." - RemountImage.Text = "Remount image for servicing..." - SplitFFU.Text = "Split FFU file into SFU files..." - SplitImage.Text = "Split WIM file into SWM files..." - UnmountImage.Text = "Unmount image..." - UpdateWIMBootEntry.Text = "Update WIMBoot configuration entry..." - ApplySiloedPackage.Text = "Apply siloed provisioning package..." - ' Menu - Commands - OS packages - GetPackages.Text = "Get package information..." - AddPackage.Text = "Add package..." - RemovePackage.Text = "Remove package..." - GetFeatures.Text = "Get feature information..." - EnableFeature.Text = "Enable feature..." - DisableFeature.Text = "Disable feature..." - CleanupImage.Text = "Perform cleanup or recovery operations..." - SaveImageInformationToolStripMenuItem.Text = "Save image information..." - ' Menu - Commands - Provisioning packages - AddProvisioningPackage.Text = "Add provisioning package..." - GetProvisioningPackageInfo.Text = "Get provisioning package information..." - ApplyCustomDataImage.Text = "Apply custom data image..." - ' Menu - Commands - App packages - GetProvisionedAppxPackages.Text = "Get AppX package information..." - AddProvisionedAppxPackage.Text = "Add provisioned AppX package..." - RemoveProvisionedAppxPackage.Text = "Remove provisioning for AppX package..." - OptimizeProvisionedAppxPackages.Text = "Optimize provisioned packages..." - SetProvisionedAppxDataFile.Text = "Add custom data file into AppX package..." - ' Menu - Commands - App (MSP) servicing - CheckAppPatch.Text = "Get application patch information..." - GetAppPatchInfo.Text = "Get detailed application patch information..." - GetAppPatches.Text = "Get basic installed application patch information..." - GetAppInfo.Text = "Get detailed Windows Installer (*.msi) application information..." - GetApps.Text = "Get basic Windows Installer (*.msi) application information..." - ' Menu - Commands - Default app associations - ExportDefaultAppAssociations.Text = "Export default application associations..." - GetDefaultAppAssociations.Text = "Get default application association information..." - ImportDefaultAppAssociations.Text = "Import default application associations..." - RemoveDefaultAppAssociations.Text = "Remove default application associations..." - ' Menu - Commands - Languages and regional settings - GetIntl.Text = "Get international settings and languages..." - SetUILang.Text = "Set UI language..." - SetUILangFallback.Text = "Set default UI fallback language..." - SetSysUILang.Text = "Set system preferred UI language..." - SetSysLocale.Text = "Set system locale..." - SetUserLocale.Text = "Set user locale..." - SetInputLocale.Text = "Set input locale..." - SetAllIntl.Text = "Set UI language and locales..." - SetTimeZone.Text = "Set default time zone..." - SetSKUIntlDefaults.Text = "Set default languages and locales..." - SetLayeredDriver.Text = "Set layered driver..." - GenLangINI.Text = "Generate Lang.ini file..." - SetSetupUILang.Text = "Set default Setup language..." - ' Menu - Commands - Capabilities - AddCapability.Text = "Add capability..." - ExportSource.Text = "Export capabilities into repository..." - GetCapabilities.Text = "Get capability information..." - RemoveCapability.Text = "Remove capability..." - ' Menu - Commands - Windows editions - GetCurrentEdition.Text = "Get current edition..." - GetTargetEditions.Text = "Get upgrade targets..." - SetEdition.Text = "Upgrade image..." - SetProductKey.Text = "Set product key..." - ' Menu - Commands - Drivers - GetDrivers.Text = "Get driver information..." - AddDriver.Text = "Add driver..." - RemoveDriver.Text = "Remove driver..." - ExportDriver.Text = "Export driver packages..." - ImportDriver.Text = "Import driver packages..." - ' Menu - Commands - Unattended answer files - ApplyUnattend.Text = "Apply unattended answer file..." - ' Menu - Commands - Windows PE servicing - GetPESettings.Text = "Get settings..." - SetScratchSpace.Text = "Set scratch space..." - SetTargetPath.Text = "Set target path..." - ' Menu - Commands - OS uninstall - GetOSUninstallWindow.Text = "Get uninstall window..." - InitiateOSUninstall.Text = "Initiate uninstall..." - RemoveOSUninstall.Text = "Remove roll back ability..." - SetOSUninstallWindow.Text = "Set uninstall window..." - ' Menu - Commands - Reserved storage - SetReservedStorageState.Text = "Set reserved storage state..." - GetReservedStorageState.Text = "Get reserved storage state..." - ' Menu - Commands - Microsoft Edge - AddEdge.Text = "Add Edge..." - AddEdgeBrowser.Text = "Add Edge browser..." - AddEdgeWebView.Text = "Add Edge WebView..." - ' Menu - Tools - ImageConversionToolStripMenuItem.Text = "Image conversion" - MergeSWM.Text = "Merge SWM files..." - RemountImageWithWritePermissionsToolStripMenuItem.Text = "Remount image with write permissions" - CommandShellToolStripMenuItem.Text = "Command Console" - UnattendedAnswerFileManagerToolStripMenuItem.Text = "Unattended answer file manager" - UnattendedAnswerFileCreatorToolStripMenuItem.Text = "Unattended answer file creator" - RegCplToolStripMenuItem.Text = "Manage image registry hives..." - WebResourcesToolStripMenuItem.Text = "Web Resources" - LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = "Download Languages and Optional Features ISOs..." - LanguagesAndFODWin10ToolStripMenuItem.Text = "Download Languages and FOD discs for Windows 10..." - ReportManagerToolStripMenuItem.Text = "Report manager" - MountedImageManagerTSMI.Text = "Mounted image manager" - CreateDiscImageToolStripMenuItem.Text = "Create disc image..." - CreateTestingEnvironmentToolStripMenuItem.Text = "Create a testing environment..." - WimScriptEditorCommand.Text = "Configuration list editor" - OptionsToolStripMenuItem.Text = "Options" - ' Menu - Help - HelpTopicsToolStripMenuItem.Text = "Help Topics" - AboutDISMToolsToolStripMenuItem.Text = "About DISMTools" - ' Menu - Invalid settings - ISFix.Text = "More information" - ISHelp.Text = "What's this?" - ' Menu - DevState - ReportFeedbackToolStripMenuItem.Text = "Report feedback (opens in web browser)" - ' Menu - Contributions - ContributeToTheHelpSystemToolStripMenuItem.Text = "Contribute to the help system" - ' Menu - Tour Server - TourActionsTSMI.Text = "Tour Actions" - ServerStatusTSMI.Text = String.Format("Tour Server is active on port {0}", tourServer.GetTcpPort()) - RestartDTTourTSMI.Text = "Restart Tour" - StopDTTourServerTSMI.Text = "Stop Tour Server" - ' Start Panel - LabelHeader1.Text = "Begin" - Label10.Text = "Recent projects" - NewProjLink.Text = "New project..." - ExistingProjLink.Text = "Open existing project..." - OnlineInstMgmt.Text = "Manage online installation" - OfflineInstMgmt.Text = "Manage offline installation..." - RecentRemoveLink.Text = "Remove entry" - ' ToolStrip buttons - ToolStripButton1.Text = "Close tab" - ToolStripButton2.Text = "Save project" - ToolStripButton3.Text = "Unload project" - ToolStripButton3.ToolTipText = "Unload project from this program" - ToolStripButton4.Text = "Show progress window" - RefreshViewTSB.Text = "Refresh view" - ExpandCollapseTSB.Text = "Expand" - UpdateLink.Text = "A new version is available for download and installation. Click here to learn more" - UpdateLink.LinkArea = New LinkArea(58, 24) - ' Pop-up context menus - PkgBasicInfo.Text = "Get basic information (all packages)" - PkgDetailedInfo.Text = "Get detailed information (specific package)" - CommitAndUnmountTSMI.Text = "Commit changes and unmount image" - DiscardAndUnmountTSMI.Text = "Discard changes and unmount image" - UnmountSettingsToolStripMenuItem.Text = "Unmount settings..." - ViewPackageDirectoryToolStripMenuItem.Text = "View package directory" - GetImageFileInformationToolStripMenuItem.Text = "Get image file information..." - SaveCompleteImageInformationToolStripMenuItem.Text = "Save complete image information..." - CreateDiscImageWithThisFileToolStripMenuItem.Text = "Create disc image with this file..." - ' OpenFileDialogs and FolderBrowsers - OpenFileDialog1.Title = "Specify the project file to load" - LocalMountDirFBD.Description = "Please specify the mount directory you want to load into this project:" - If Not ImgBW.IsBusy And areBackgroundProcessesDone Then - BGProcDetails.Label2.Text = "Image processes have completed" - End If - MenuDesc.Text = "Ready" - ' Tree view context menu - AccessDirectoryToolStripMenuItem.Text = "Access directory" - UnloadProjectToolStripMenuItem1.Text = "Unload project" - CopyDeploymentToolsToolStripMenuItem.Text = "Copy deployment tools" - OfAllArchitecturesToolStripMenuItem.Text = "Of all architectures" - OfSelectedArchitectureToolStripMenuItem.Text = "Of selected architecture" - ForX86ArchitectureToolStripMenuItem.Text = "For x86 architecture" - ForAmd64ArchitectureToolStripMenuItem.Text = "For AMD64 architecture" - ForARMArchitectureToolStripMenuItem.Text = "For ARM architecture" - ForARM64ArchitectureToolStripMenuItem.Text = "For ARM64 architecture" - ImageOperationsToolStripMenuItem.Text = "Image operations" - MountImageToolStripMenuItem.Text = "Mount image..." - UnmountImageToolStripMenuItem.Text = "Unmount image..." - RemoveVolumeImagesToolStripMenuItem.Text = "Remove volume images..." - SwitchImageIndexesToolStripMenuItem1.Text = "Switch image indexes..." - UnattendedAnswerFilesToolStripMenuItem1.Text = "Unattended answer files" - ManageToolStripMenuItem.Text = "Manage" - CreationWizardToolStripMenuItem.Text = "Create" - ScratchDirectorySettingsToolStripMenuItem.Text = "Configure scratch directory" - ManageReportsToolStripMenuItem.Text = "Manage reports" - AddToolStripMenuItem.Text = "Add" - NewFileToolStripMenuItem.Text = "New file..." - ExistingFileToolStripMenuItem.Text = "Existing file..." - ' Context menu of AppX information dialog - SaveResourceToolStripMenuItem.Text = "Save resource..." - CopyToolStripMenuItem.Text = "Copy resource" - ' Context menu of AppX addition dialog - MicrosoftAppsToolStripMenuItem.Text = "Visit the Microsoft Apps website" - MicrosoftStoreGenerationProjectToolStripMenuItem.Text = "Visit the Microsoft Store Generation Project website" - AppxDownloadHelpToolStripMenuItem.Text = "How do I get applications?" - ' New design - GreetingLabel.Text = "Welcome to this servicing session" - LinkLabel12.Text = "PROJECT" - LinkLabel13.Text = "IMAGE" - Label54.Text = "Name:" - Label51.Text = "Location:" - Label53.Text = "Images mounted?" - LinkLabel14.Text = "Click here to mount an image" - Label55.Text = "Project Tasks" - LinkLabel15.Text = "View project properties" - LinkLabel16.Text = "Open in File Explorer" - LinkLabel17.Text = "Unload project" - Label59.Text = "No image has been mounted" - Label58.Text = "You need to mount an image in order to view its information" - Label57.Text = "Choices" - LinkLabel21.Text = "Mount an image..." - LinkLabel18.Text = "Pick a mounted image..." - Label39.Text = "Image index:" - Label43.Text = "Mount point:" - Label45.Text = "Version:" - Label42.Text = "Name:" - Label40.Text = "Description:" - Label56.Text = "Image Tasks" - LinkLabel20.Text = "View image properties" - LinkLabel19.Text = "Unmount image" - GroupBox4.Text = "Image operations" - Button26.Text = "Mount image..." - Button27.Text = "Commit current changes" - Button28.Text = "Commit and unmount image" - Button29.Text = "Unmount image discarding changes" - Button25.Text = "Reload servicing session" - Button24.Text = "Switch image indexes..." - Button30.Text = "Apply image..." - Button31.Text = "Capture image..." - Button32.Text = "Remove volume images..." - Button33.Text = "Save complete image information..." - GroupBox5.Text = "Package operations" - Button36.Text = "Add package..." - Button34.Text = "Get package information..." - Button38.Text = "Save installed package information..." - Button35.Text = "Remove package..." - Button37.Text = "Perform component store maintenance and cleanup..." - GroupBox6.Text = "Feature operations" - Button41.Text = "Enable feature..." - Button39.Text = "Get feature information..." - Button42.Text = "Save feature information..." - Button40.Text = "Disable feature..." - GroupBox7.Text = "AppX package operations" - Button44.Text = "Add AppX package..." - Button45.Text = "Get app information..." - Button46.Text = "Save installed AppX package information..." - Button43.Text = "Remove AppX package..." - GroupBox8.Text = "Capability operations" - Button48.Text = "Add capability..." - Button49.Text = "Get capability information..." - Button50.Text = "Save capability information..." - Button47.Text = "Remove capability..." - GroupBox9.Text = "Driver operations" - Button53.Text = "Add driver package..." - Button52.Text = "Get driver information..." - Button54.Text = "Save installed driver information..." - Button51.Text = "Remove driver..." - GroupBox10.Text = "Windows PE operations" - Button55.Text = "Get configuration" - Button56.Text = "Save configuration..." - Button57.Text = "Set target path..." - Button58.Text = "Set scratch space..." - Case "ESN" - ' Top-level menu items - FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Archivo".ToUpper(), "&Archivo") - ProjectToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Proyecto".ToUpper(), "&Proyecto") - CommandsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Co&mandos".ToUpper(), "Co&mandos") - ToolsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Her&ramientas".ToUpper(), "Her&ramientas") - HelpToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Ay&uda".ToUpper(), "Ay&uda") - InvalidSettingsTSMI.Text = "Se han detectado configuraciones inválidas" - ' Submenu items - ' Menu - File - NewProjectToolStripMenuItem.Text = "&Nuevo proyecto..." - OpenExistingProjectToolStripMenuItem.Text = "&Abrir proyecto existente" - ManageOnlineInstallationToolStripMenuItem.Text = "Administrar &instalación activa" - ManageOfflineInstallationToolStripMenuItem.Text = "Administrar instalación &fuera de línea..." - RecentProjectsListMenu.Text = "Proyectos recientes" - SaveProjectToolStripMenuItem.Text = "&Guardar proyecto..." - SaveProjectasToolStripMenuItem.Text = "Guardar proyecto &como..." - ExitToolStripMenuItem.Text = "Sa&lir" - ' Menu - Project - ViewProjectFilesInFileExplorerToolStripMenuItem.Text = "Ver archivos del proyecto en el Explorador de archivos" - UnloadProjectToolStripMenuItem.Text = "Descargar proyecto..." - SwitchImageIndexesToolStripMenuItem.Text = "Cambiar índices de imagen..." - ProjectPropertiesToolStripMenuItem.Text = "Propiedades del proyecto" - ImagePropertiesToolStripMenuItem.Text = "Propiedades de la imagen" - ' Menu - Commands - ImageManagementToolStripMenuItem.Text = "Administración de la imagen" - OSPackagesToolStripMenuItem.Text = "Paquetes del sistema operativo" - ProvisioningPackagesToolStripMenuItem.Text = "Paquetes de aprovisionamiento" - AppPackagesToolStripMenuItem.Text = "Paquetes AppX" - AppPatchesToolStripMenuItem.Text = "Servicio de aplicaciones (MSP)" - DefaultAppAssociationsToolStripMenuItem.Text = "Asociaciones predeterminadas de aplicaciones" - LanguagesAndRegionSettingsToolStripMenuItem.Text = "Configuración de idiomas y regiones" - CapabilitiesToolStripMenuItem.Text = "Funcionalidades" - WindowsEditionsToolStripMenuItem.Text = "Ediciones de Windows" - DriversToolStripMenuItem.Text = "Controladores" - UnattendedAnswerFilesToolStripMenuItem.Text = "Archivos de respuesta desatendida" - WindowsPEServicingToolStripMenuItem.Text = "Servicio de Windows PE" - OSUninstallToolStripMenuItem.Text = "Desinstalación del sistema operativo" - ReservedStorageToolStripMenuItem.Text = "Almacenamiento reservado" - ' Menu - Commands - Image management - AppendImage.Text = "Anexar directorio de captura a imagen..." - ApplyFFU.Text = "Aplicar archivo FFU o SFU..." - ApplyImage.Text = "Aplicar archivo WIM o SWM..." - CaptureCustomImage.Text = "Capturar cambios incrementales a un archivo..." - CaptureFFU.Text = "Capturar particiones a un archivo FFU..." - CaptureImage.Text = "Capturar imagen de un disco a un archivo WIM..." - CleanupMountpoints.Text = "Eliminar recursos de una imagen corrupta..." - CommitImage.Text = "Aplicar cambios a la imagen..." - DeleteImage.Text = "Eliminar imágenes de volumen de un archivo WIM..." - ExportImage.Text = "Exportar imagen..." - GetImageInfo.Text = "Obtener información de imagen..." - GetWIMBootEntry.Text = "Obtener entradas de configuración WIMBoot..." - ListImage.Text = "Enumerar archivos y directorios de un archivo WIM..." - MountImage.Text = "Montar imagen..." - OptimizeFFU.Text = "Optimizar archivo FFU..." - OptimizeImage.Text = "Optimizar imagen..." - RemountImage.Text = "Remontar imagen para su servicio..." - SplitFFU.Text = "Dividir archivo FFU en archivos SFU..." - SplitImage.Text = "Dividir archivo WIM en archivos SWM..." - UnmountImage.Text = "Desmontar imagen..." - UpdateWIMBootEntry.Text = "Actualizar entradas de configuración WIMBoot..." - ApplySiloedPackage.Text = "Aplicar paquete de aprovisionamiento en silos..." - SaveImageInformationToolStripMenuItem.Text = "Guardar información de la imagen..." - ' Menu - Commands - OS packages - GetPackages.Text = "Obtener información de paquetes..." - AddPackage.Text = "Añadir paquete..." - RemovePackage.Text = "Eliminar paquete..." - GetFeatures.Text = "Obtener información de características..." - EnableFeature.Text = "Habilitar característica..." - DisableFeature.Text = "Deshabilitar característica..." - CleanupImage.Text = "Realizar operaciones de limpieza o recuperación..." - ' Menu - Commands - Provisioning packages - AddProvisioningPackage.Text = "Añadir paquete de aprovisionamiento..." - GetProvisioningPackageInfo.Text = "Obtener información de paquete de aprovisionamiento..." - ApplyCustomDataImage.Text = "Aplicar imagen de datos personalizada..." - ' Menu - Commands - App packages - GetProvisionedAppxPackages.Text = "Obtener información de paquete AppX..." - AddProvisionedAppxPackage.Text = "Añadir paquete AppX aprovisionado..." - RemoveProvisionedAppxPackage.Text = "Eliminar aprovisionamiento para un paquete AppX..." - OptimizeProvisionedAppxPackages.Text = "Optimizar paquete de aprovisionamiento..." - SetProvisionedAppxDataFile.Text = "Añadir archivo de datos personalizado en paquete AppX..." - ' Menu - Commands - App (MSP) servicing - CheckAppPatch.Text = "Obtener información de parche de aplicación..." - GetAppPatchInfo.Text = "Obtener información detallada de parches de aplicación instalados..." - GetAppPatches.Text = "Obtener información básica de parches de aplicación instalados..." - GetAppInfo.Text = "Obtener información detallada de aplicaciones de Windows Installer (*.msi)..." - GetApps.Text = "Obtener información básica de aplicaciones de Windows Installer (*.msi)..." - ' Menu - Commands - Default app associations - ExportDefaultAppAssociations.Text = "Exportar asociaciones de aplicaciones predeterminadas..." - GetDefaultAppAssociations.Text = "Obtener información de asociaciones de aplicaciones predeterminadas..." - ImportDefaultAppAssociations.Text = "Importar asociaciones de aplicaciones predeterminadas..." - RemoveDefaultAppAssociations.Text = "Eliminar asociaciones de aplicaciones predeterminadas..." - ' Menu - Commands - Languages and regional settings - GetIntl.Text = "Obtener configuraciones e idiomas internacionales..." - SetUILang.Text = "Establecer idioma de la interfaz de usuario..." - SetUILangFallback.Text = "Establecer idioma predeterminado de la interfaz de usuario de último recurso..." - SetSysUILang.Text = "Estabñecer idioma de la interfaz de usuario preferido para el sistema..." - SetSysLocale.Text = "Establecer zona del sistema..." - SetUserLocale.Text = "Establecer zona del usuario..." - SetInputLocale.Text = "Establecer zona de entrada..." - SetAllIntl.Text = "Establecer idioma de la interfaz de usuario y zonas..." - SetTimeZone.Text = "Establecer zona horaria predeterminada..." - SetSKUIntlDefaults.Text = "Establecer lenguajes y zonas predeterminadas..." - SetLayeredDriver.Text = "Establecer controlador en capas..." - GenLangINI.Text = "Generar archivo Lang.ini..." - SetSetupUILang.Text = "Establecer idioma predeterminado del programa de instalación..." - ' Menu - Commands - Capabilities - AddCapability.Text = "Añadir funcionalidad..." - ExportSource.Text = "Exportar funcionalidades en un repositorio..." - GetCapabilities.Text = "Obtener información de funcionalidades..." - RemoveCapability.Text = "Eliminar funcionalidad..." - ' Menu - Commands - Windows editions - GetCurrentEdition.Text = "Obtener edición actual..." - GetTargetEditions.Text = "Obtener destinos de actualización..." - SetEdition.Text = "Actualizar imagen..." - SetProductKey.Text = "Establecer clave de producto..." - ' Menu - Commands - Drivers - GetDrivers.Text = "Obtener información de controladores..." - AddDriver.Text = "Añadir controlador..." - RemoveDriver.Text = "Eliminar controlador..." - ExportDriver.Text = "Exportar paquetes de controlador..." - ImportDriver.Text = "Importar paquetes de controlador..." - ' Menu - Commands - Unattended answer files - ApplyUnattend.Text = "Aplicar archivo de respuesta desatendida..." - ' Menu - Commands - Windows PE servicing - GetPESettings.Text = "Obtener configuración..." - SetScratchSpace.Text = "Establecer espacio temporal..." - SetTargetPath.Text = "Establecer ruta de destino..." - ' Menu - Commands - OS uninstall - GetOSUninstallWindow.Text = "Obtener margen de desinstalación..." - InitiateOSUninstall.Text = "Iniciar desinstalación..." - RemoveOSUninstall.Text = "Eliminar habilidad de desinstalación..." - SetOSUninstallWindow.Text = "Establecer margen de desinstalación..." - ' Menu - Commands - Reserved storage - SetReservedStorageState.Text = "Establecer estado de almacenamiento reservado..." - GetReservedStorageState.Text = "Obtener estado de almacenamiento reservado..." - ' Menu - Commands - Microsoft Edge - AddEdge.Text = "Añadir Edge..." - AddEdgeBrowser.Text = "Añadir navegador Edge..." - AddEdgeWebView.Text = "Añadir Edge WebView..." - ' Menu - Tools - ImageConversionToolStripMenuItem.Text = "Conversión de imágenes" - MergeSWM.Text = "Combinar archivos SWM..." - RemountImageWithWritePermissionsToolStripMenuItem.Text = "Remontar imagen con permisos de escritura" - CommandShellToolStripMenuItem.Text = "Consola de comandos" - UnattendedAnswerFileManagerToolStripMenuItem.Text = "Administrador de archivos de respuesta desatendida" - UnattendedAnswerFileCreatorToolStripMenuItem.Text = "Creador de archivos de respuesta desatendida" - RegCplToolStripMenuItem.Text = "Administrar subárboles del registro de la imagen..." - WebResourcesToolStripMenuItem.Text = "Recursos web" - LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = "Descargar archivos ISO de idiomas y características opcionales..." - LanguagesAndFODWin10ToolStripMenuItem.Text = "Descargar discos de idiomas y características opcionales para Windows 10..." - ReportManagerToolStripMenuItem.Text = "Administrador de informes" - MountedImageManagerTSMI.Text = "Administrador de imágenes montadas" - CreateDiscImageToolStripMenuItem.Text = "Crear imagen de disco..." - CreateTestingEnvironmentToolStripMenuItem.Text = "Crear un entorno de pruebas..." - WimScriptEditorCommand.Text = "Editor de lista de configuraciones" - OptionsToolStripMenuItem.Text = "Opciones" - ' Menu - Help - HelpTopicsToolStripMenuItem.Text = "Ver la ayuda" - AboutDISMToolsToolStripMenuItem.Text = "Acerca de DISMTools" - ' Menu - Invalid settings - ISFix.Text = "Más información" - ISHelp.Text = "¿Qué es esto?" - ' Menu - DevState - ReportFeedbackToolStripMenuItem.Text = "Enviar comentarios (se abre en navegador web)" - ' Menu - Contributions - ContributeToTheHelpSystemToolStripMenuItem.Text = "Contribuir al sistema de ayuda" - ' Menu - Tour Server - TourActionsTSMI.Text = "Acciones del tour" - ServerStatusTSMI.Text = String.Format("El servidor del tour está activo en el puerto {0}", tourServer.GetTcpPort()) - RestartDTTourTSMI.Text = "Reiniciar tour" - StopDTTourServerTSMI.Text = "Detener servidor del tour" - ' Start Panel - LabelHeader1.Text = "Comenzar" - Label10.Text = "Proyectos recientes" - NewProjLink.Text = "Nuevo proyecto..." - ExistingProjLink.Text = "Abrir proyecto existente..." - OnlineInstMgmt.Text = "Administrar instalación activa" - OfflineInstMgmt.Text = "Administrar instalación fuera de línea..." - RecentRemoveLink.Text = "Eliminar entrada" - ' ToolStrip buttons - ToolStripButton1.Text = "Cerrar pestaña" - ToolStripButton2.Text = "Guardar proyecto" - ToolStripButton3.Text = "Descargar proyecto" - ToolStripButton3.ToolTipText = "Descargar proyecto de este programa" - ToolStripButton4.Text = "Mostrar ventana de progreso" - RefreshViewTSB.Text = "Actualizar vista" - ExpandCollapseTSB.Text = "Expandir" - UpdateLink.Text = "Hay una nueva versión disponible para su descarga e instalación. Haga clic aquí para saber más" - UpdateLink.LinkArea = New LinkArea(65, 29) - ' Pop-up context menus - PkgBasicInfo.Text = "Obtener información básica (todos los paquetes)" - PkgDetailedInfo.Text = "Obtener información detallada (paquete específico)" - CommitAndUnmountTSMI.Text = "Guardar cambios y desmontar imagen" - DiscardAndUnmountTSMI.Text = "Descartar cambios y desmontar imagen" - UnmountSettingsToolStripMenuItem.Text = "Configuración de desmontaje..." - ViewPackageDirectoryToolStripMenuItem.Text = "Ver directorio del paquete" - GetImageFileInformationToolStripMenuItem.Text = "Obtener información del archivo de imagen..." - SaveCompleteImageInformationToolStripMenuItem.Text = "Guardar información completa de la imagen..." - CreateDiscImageWithThisFileToolStripMenuItem.Text = "Crear archivo de disco con este archivo..." - ' OpenFileDialogs and FolderBrowsers - OpenFileDialog1.Title = "Especifique el archivo de proyecto a cargar" - LocalMountDirFBD.Description = "Especifique el directorio de montaje que desea cargar en este proyecto:" - If Not ImgBW.IsBusy And areBackgroundProcessesDone Then - BGProcDetails.Label2.Text = "Los procesos de la imagen han completado" - End If - MenuDesc.Text = "Listo" - ' Tree view context menu - AccessDirectoryToolStripMenuItem.Text = "Acceder directorio" - UnloadProjectToolStripMenuItem1.Text = "Descargar proyecto" - CopyDeploymentToolsToolStripMenuItem.Text = "Copiar herramientas de implementación" - OfAllArchitecturesToolStripMenuItem.Text = "De todas las arquitecturas" - OfSelectedArchitectureToolStripMenuItem.Text = "De la arquitectura seleccionada" - ForX86ArchitectureToolStripMenuItem.Text = "Para arquitectura x86" - ForAmd64ArchitectureToolStripMenuItem.Text = "Para arquitectura AMD64" - ForARMArchitectureToolStripMenuItem.Text = "Para arquitectura ARM" - ForARM64ArchitectureToolStripMenuItem.Text = "Para arquitectura ARM64" - ImageOperationsToolStripMenuItem.Text = "Operaciones de la imagen" - MountImageToolStripMenuItem.Text = "Montar imagen..." - UnmountImageToolStripMenuItem.Text = "Desmontar imagen..." - RemoveVolumeImagesToolStripMenuItem.Text = "Eliminar imágenes de volumen..." - SwitchImageIndexesToolStripMenuItem1.Text = "Cambiar índices de imagen..." - UnattendedAnswerFilesToolStripMenuItem1.Text = "Archivos de respuesta desatendida" - ManageToolStripMenuItem.Text = "Administrar" - CreationWizardToolStripMenuItem.Text = "Crear" - ScratchDirectorySettingsToolStripMenuItem.Text = "Configurar directorio temporal" - ManageReportsToolStripMenuItem.Text = "Administrar informes" - AddToolStripMenuItem.Text = "Añadir" - NewFileToolStripMenuItem.Text = "Nuevo archivo..." - ExistingFileToolStripMenuItem.Text = "Archivo existente..." - ' Context menu of AppX information dialog - SaveResourceToolStripMenuItem.Text = "Guardar recurso..." - CopyToolStripMenuItem.Text = "Copiar recurso" - ' Context menu of AppX addition dialog - MicrosoftAppsToolStripMenuItem.Text = "Visitar el sitio web de Aplicaciones de Microsoft" - MicrosoftStoreGenerationProjectToolStripMenuItem.Text = "Visitar el sitio web del proyecto de generación de Microsoft Store" - AppxDownloadHelpToolStripMenuItem.Text = "¿Cómo puedo obtener aplicaciones?" - ' New design - GreetingLabel.Text = "Le damos la bienvenida a esta sesión de servicio" - LinkLabel12.Text = "PROYECTO" - LinkLabel13.Text = "IMAGEN" - Label54.Text = "Nombre:" - Label51.Text = "Ubicación:" - Label53.Text = "¿Hay imágenes montadas?" - LinkLabel14.Text = "Haga clic aquí para montar una imagen" - Label55.Text = "Tareas del proyecto" - LinkLabel15.Text = "Ver propiedades del proyecto" - LinkLabel16.Text = "Abrir en el Explorador de Archivos" - LinkLabel17.Text = "Descargar proyecto" - Label59.Text = "No se ha montado una imagen" - Label58.Text = "Debe montar una imagen para poder ver su información" - Label57.Text = "Elecciones" - LinkLabel21.Text = "Montar una imagen..." - LinkLabel18.Text = "Escoger una imagen montada..." - Label39.Text = "Índice de la imagen:" - Label43.Text = "Punto de montaje:" - Label45.Text = "Versión:" - Label42.Text = "Nombre:" - Label40.Text = "Descripción:" - Label56.Text = "Tareas de la imagen" - LinkLabel20.Text = "Ver propiedades de la imagen" - LinkLabel19.Text = "Desmontar imagen" - GroupBox4.Text = "Operaciones de la imagen" - Button26.Text = "Montar imagen..." - Button27.Text = "Guardar cambios actuales" - Button28.Text = "Guardar cambios y desmontar imagen" - Button29.Text = "Desmontar imagen descartando cambios" - Button25.Text = "Recargar sesión de servicio" - Button24.Text = "Cambiar índices de la imagen..." - Button30.Text = "Aplicar imagen..." - Button31.Text = "Capturar imagen..." - Button32.Text = "Eliminar imágenes de volumen..." - Button33.Text = "Guardar información completa de la imagen..." - GroupBox5.Text = "Operaciones de paquetes" - Button36.Text = "Añadir paquete..." - Button34.Text = "Obtener información de paquetes..." - Button38.Text = "Guardar información de paquetes instalados..." - Button35.Text = "Eliminar paquete..." - Button37.Text = "Realizar mantenimiento y limpieza del almacén de componentes..." - GroupBox6.Text = "Operaciones de características" - Button41.Text = "Habilitar característica..." - Button39.Text = "Obtener información de características..." - Button42.Text = "Guardar información de características..." - Button40.Text = "Deshabilitar característica..." - GroupBox7.Text = "Operaciones de paquetes AppX" - Button44.Text = "Añadir paquete AppX..." - Button45.Text = "Obtener información de aplicaciones..." - Button46.Text = "Guardar información de paquetes AppX instalados..." - Button43.Text = "Eliminar paquete AppX..." - GroupBox8.Text = "Operaciones de funcionalidades" - Button48.Text = "Añadir funcionalidad..." - Button49.Text = "Obtener información de funcionalidades..." - Button50.Text = "Guardar información de funcionalidades..." - Button47.Text = "Eliminar funcionalidades..." - GroupBox9.Text = "Operaciones de controladores" - Button53.Text = "Añadir controlador..." - Button52.Text = "Obtener información de controladores..." - Button54.Text = "Guardar información de controladores instalados..." - Button51.Text = "Eliminar controlador..." - GroupBox10.Text = "Operaciones de Windows PE" - Button55.Text = "Obtener configuración" - Button56.Text = "Guardar configuración..." - Button57.Text = "Establecer ruta de destino..." - Button58.Text = "Establecer espacio temporal..." - Case "FRA" - ' Top-level menu items - FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Fichier".ToUpper(), "&Fichier") - ProjectToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Projet".ToUpper(), "&Projet") - CommandsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Com&mandes".ToUpper(), "Com&mandes") - ToolsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Ou&tils".ToUpper(), "Ou&tils") - HelpToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Aide".ToUpper(), "&Aide") - InvalidSettingsTSMI.Text = "Des paramètres non valides ont été détectés" - ' Submenu items - ' Menu - File - NewProjectToolStripMenuItem.Text = "&Nouveau projet..." - OpenExistingProjectToolStripMenuItem.Text = "&Ouvrir un projet existant" - ManageOnlineInstallationToolStripMenuItem.Text = "&Gérer l'installation en ligne" - ManageOfflineInstallationToolStripMenuItem.Text = "Gérer l'installation &hors ligne..." - RecentProjectsListMenu.Text = "Projets récents" - SaveProjectToolStripMenuItem.Text = "&Sauvegarder le projet..." - SaveProjectasToolStripMenuItem.Text = "Sauvegarder le projet so&us..." - ExitToolStripMenuItem.Text = "Sor&tir" - ' Menu - Project - ViewProjectFilesInFileExplorerToolStripMenuItem.Text = "Visualiser les fichiers du projet dans l'explorateur de fichiers" - UnloadProjectToolStripMenuItem.Text = "Décharget le projet..." - SwitchImageIndexesToolStripMenuItem.Text = "Changer d'index de l'image..." - ProjectPropertiesToolStripMenuItem.Text = "Propriétés du projet" - ImagePropertiesToolStripMenuItem.Text = "Propriétés de l'image" - ' Menu - Commands - ImageManagementToolStripMenuItem.Text = "Gestion des images" - OSPackagesToolStripMenuItem.Text = "Paquets de systèmes d'exploitation" - ProvisioningPackagesToolStripMenuItem.Text = "Paquets de provisionnement" - AppPackagesToolStripMenuItem.Text = "Paquets AppX" - AppPatchesToolStripMenuItem.Text = "Maintenance des applications (MSP)" - DefaultAppAssociationsToolStripMenuItem.Text = "Associations d'applications par défaut" - LanguagesAndRegionSettingsToolStripMenuItem.Text = "Langues et paramètres régionaux" - CapabilitiesToolStripMenuItem.Text = "Capacités" - WindowsEditionsToolStripMenuItem.Text = "Éditions Windows" - DriversToolStripMenuItem.Text = "Pilotes" - UnattendedAnswerFilesToolStripMenuItem.Text = "Fichiers de réponse non surveillés" - WindowsPEServicingToolStripMenuItem.Text = "Maintenance de Windows PE" - OSUninstallToolStripMenuItem.Text = "Désinstallation du système d'exploitation" - ReservedStorageToolStripMenuItem.Text = "Stockage réservé" - ' Menu - Commands - Image management - AppendImage.Text = "Ajouter le répertoire de capture à l'image..." - ApplyFFU.Text = "Appliquer le fichier FFU ou SFU..." - ApplyImage.Text = "Appliquer le fichier WIM ou SWM..." - CaptureCustomImage.Text = "Capturer les modifications incrémentales d'un fichier..." - CaptureFFU.Text = "Capturer des partitions dans un fichier FFU..." - CaptureImage.Text = "Capturer l'image d'un lecteur dans un fichier WIM..." - CleanupMountpoints.Text = "Supprimer les resources d'une image corrompue..." - CommitImage.Text = "Appliquer les modifications à l'image..." - DeleteImage.Text = "Supprimer les images de volume du fichier WIM..." - ExportImage.Text = "Exporter l'image..." - GetImageInfo.Text = "Obtenir des informations sur l'image..." - GetWIMBootEntry.Text = "Obtenir les entrées de configuration WIMBoot..." - ListImage.Text = "Lister des fichiers et répertoires dans l'image..." - MountImage.Text = "Monter l'image..." - OptimizeFFU.Text = "Optimiser le fichier FFU..." - OptimizeImage.Text = "Optimiser l'image..." - RemountImage.Text = "Remonter l'image pour la maintenance..." - SplitFFU.Text = "Diviser un fichier FFU en fichiers SFU..." - SplitImage.Text = "Diviser un fichier WIM en fichiers SWM..." - UnmountImage.Text = "Démonter l'image..." - UpdateWIMBootEntry.Text = "Mettre à jour de l'entrée de configuration de WIMBoot..." - ApplySiloedPackage.Text = "Appliquer un package de provisionnement en silo..." - SaveImageInformationToolStripMenuItem.Text = "Sauvegarder les informations de l'image..." - ' Menu - Commands - OS packages - GetPackages.Text = "Obtenir des informations sur le paquet..." - AddPackage.Text = "Ajouter un paquet..." - RemovePackage.Text = "Supprimer le paquet..." - GetFeatures.Text = "Obtenir des informations sur les caractéristiques..." - EnableFeature.Text = "Activer la caractéristique..." - DisableFeature.Text = "Désactiver la caractéristique..." - CleanupImage.Text = "Effectuer des opérations de nettoyage ou de récupération..." - ' Menu - Commands - Provisioning packages - AddProvisioningPackage.Text = "Ajouter un paquet de provisionnement..." - GetProvisioningPackageInfo.Text = "Obtenir des informations sur le paquet de provisionnement..." - ApplyCustomDataImage.Text = "Appliquer une image de données personnalisée..." - ' Menu - Commands - App packages - GetProvisionedAppxPackages.Text = "Obtenir des informations sur le paquet d'applications..." - AddProvisionedAppxPackage.Text = "Ajouter un paquet d'applications provisionnées..." - RemoveProvisionedAppxPackage.Text = "Supprimer le provisionnement pour les paquets AppX..." - OptimizeProvisionedAppxPackages.Text = "Optimiser les paquets provisionnés..." - SetProvisionedAppxDataFile.Text = "Ajouter un fichier de données personnalisé dans le paquet d'applications..." - ' Menu - Commands - App (MSP) servicing - CheckAppPatch.Text = "Obtenir des informations sur les correctifs de l'application..." - GetAppPatchInfo.Text = "Obtenir des informations détaillées sur les correctifs des applications..." - GetAppPatches.Text = "Obtenir des informations basiques sur les correctifs des applications installées..." - GetAppInfo.Text = "Obtenir des informations détaillées sur l'application Windows Installer (*.msi)..." - GetApps.Text = "Obtenir des informations basiques sur l'application Windows Installer (*.msi)..." - ' Menu - Commands - Default app associations - ExportDefaultAppAssociations.Text = "Exporter les associations d'applications par défaut..." - GetDefaultAppAssociations.Text = "Obtenir des informations sur l'association d'applications par défaut..." - ImportDefaultAppAssociations.Text = "Importer les associations d'applications par défaut..." - RemoveDefaultAppAssociations.Text = "Supprimer les associations d'applications par défaut..." - ' Menu - Commands - Languages and regional settings - GetIntl.Text = "Obtenir des paramètres et des langues internationaux..." - SetUILang.Text = "Définir la langue de l'interface utilisateur..." - SetUILangFallback.Text = "Définir la langue par défaut de l'interface utilisateur..." - SetSysUILang.Text = "Définir la langue préférée de l'interface utilisateur du système..." - SetSysLocale.Text = "Définir les paramètres linguistiques du système..." - SetUserLocale.Text = "Définir les paramètres linguistiques de l'utilisateur..." - SetInputLocale.Text = "Définir la langue d'entrée..." - SetAllIntl.Text = "Définir la langue de l'interface utilisateur et les paramètres locaux..." - SetTimeZone.Text = "Définir le fuseau horaire par défaut..." - SetSKUIntlDefaults.Text = "Définir les langues et les locales par défaut..." - SetLayeredDriver.Text = "Régler le pilote en couches..." - GenLangINI.Text = "Générer le fichier Lang.ini..." - SetSetupUILang.Text = "Définir la langue d'installation par défaut..." - ' Menu - Commands - Capabilities - AddCapability.Text = "Ajouter une capacité..." - ExportSource.Text = "Exporter les capacités dans le référentiel..." - GetCapabilities.Text = "Obtenir des informations sur les capacités..." - RemoveCapability.Text = "Supprimer la capacité..." - ' Menu - Commands - Windows editions - GetCurrentEdition.Text = "Obtenir l'édition actuelle..." - GetTargetEditions.Text = "Obtenir des objectifs de mise à niveau..." - SetEdition.Text = "Mettre à jour l'image..." - SetProductKey.Text = "Définir la clé de produit..." - ' Menu - Commands - Drivers - GetDrivers.Text = "Obtenir des informations sur le pilote..." - AddDriver.Text = "Ajouter un pilote..." - RemoveDriver.Text = "Retirer le pilote..." - ExportDriver.Text = "Exporter des paquets de pilotes..." - ImportDriver.Text = "Importer des paquets de pilotes..." - ' Menu - Commands - Unattended answer files - ApplyUnattend.Text = "Appliquer un fichier de réponse non surveillé..." - ' Menu - Commands - Windows PE servicing - GetPESettings.Text = "Obtenir des paramètres..." - SetScratchSpace.Text = "Définir l'espace temporaire..." - SetTargetPath.Text = "Définir le chemin cible..." - ' Menu - Commands - OS uninstall - GetOSUninstallWindow.Text = "Obtenir la créneau de désinstallation..." - InitiateOSUninstall.Text = "Démarrer la désinstallation..." - RemoveOSUninstall.Text = "Supprimer la possibilité de revenir en arrière..." - SetOSUninstallWindow.Text = "Définir la créneau de désinstallation..." - ' Menu - Commands - Reserved storage - SetReservedStorageState.Text = "Définir l'état du stockage réservé..." - GetReservedStorageState.Text = "Obtenir l'état du stockage réservé..." - ' Menu - Commands - Microsoft Edge - AddEdge.Text = "Ajouter Edge..." - AddEdgeBrowser.Text = "Ajouter le navigateur Edge..." - AddEdgeWebView.Text = "Ajouter Edge WebView..." - ' Menu - Tools - ImageConversionToolStripMenuItem.Text = "Conversion des images" - MergeSWM.Text = "Fusionner des fichiers SWM..." - RemountImageWithWritePermissionsToolStripMenuItem.Text = "Remonter l'image avec les droits d'écriture" - CommandShellToolStripMenuItem.Text = "Console de commande" - UnattendedAnswerFileManagerToolStripMenuItem.Text = "Gestionnaire de fichiers de réponse sans surveillance" - UnattendedAnswerFileCreatorToolStripMenuItem.Text = "Créateur de fichiers de réponse sans surveillance" - RegCplToolStripMenuItem.Text = "Gérer les ruches du registre de l'image..." - WebResourcesToolStripMenuItem.Text = "Ressources Web" - LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = "Télécharger les ISO de langues et de fonctionnalités optionnelles..." - LanguagesAndFODWin10ToolStripMenuItem.Text = "Télécharger les langues et les disques FOD pour Windows 10..." - ReportManagerToolStripMenuItem.Text = "Gestionnaire de rapports" - MountedImageManagerTSMI.Text = "Gestionnaire des images montées" - CreateDiscImageToolStripMenuItem.Text = "Créer une image disque..." - CreateTestingEnvironmentToolStripMenuItem.Text = "Créer un environnement de test..." - WimScriptEditorCommand.Text = "Éditeur de listes de configuration" - OptionsToolStripMenuItem.Text = "Paramètres" - ' Menu - Help - HelpTopicsToolStripMenuItem.Text = "Rubriques d'aide" - AboutDISMToolsToolStripMenuItem.Text = "À propos de DISMTools" - ' Menu - Invalid settings - ISFix.Text = "Plus d'informations" - ISHelp.Text = "Qu'est-ce que c'est ?" - ' Menu - DevState - ReportFeedbackToolStripMenuItem.Text = "Rapport de rétroaction (s'ouvre dans un navigateur web)" - ' Menu - Contributions - ContributeToTheHelpSystemToolStripMenuItem.Text = "Contribuer au système d'aide" - ' Menu - Tour Server - TourActionsTSMI.Text = "Actions de visite guidée" - ServerStatusTSMI.Text = String.Format("Le serveur de visite guidée est actif sur le port {0}", tourServer.GetTcpPort()) - RestartDTTourTSMI.Text = "Redémarrer la visite guidée" - StopDTTourServerTSMI.Text = "Arrêter le serveur de visite guidée" - ' Start Panel - LabelHeader1.Text = "Commencer" - Label10.Text = "Projets récents" - NewProjLink.Text = "Nouveau projet..." - ExistingProjLink.Text = "Ouvrir un projet existant..." - OnlineInstMgmt.Text = "Gérer l'installation en ligne" - OfflineInstMgmt.Text = "Gérer l'installation hors ligne..." - RecentRemoveLink.Text = "Supprimer entrée" - ' ToolStrip buttons - ToolStripButton1.Text = "Fermer l'onglet" - ToolStripButton2.Text = "Sauvegarder le projet" - ToolStripButton3.Text = "Décharger le projet" - ToolStripButton3.ToolTipText = "Décharger le projet de ce programme" - ToolStripButton4.Text = "Afficher la fenêtre de progression" - RefreshViewTSB.Text = "Rafraîchir la vue" - ExpandCollapseTSB.Text = "Élargir" - UpdateLink.Text = "Une nouvelle version est disponible pour le téléchargement et l'installation. Cliquez ici pour en savoir plus" - ' Pop-up context menus - PkgBasicInfo.Text = "Obtenir des informations basiques (tous les paquets)" - PkgDetailedInfo.Text = "Obtenir des informations détaillées (paquet spécifique)" - CommitAndUnmountTSMI.Text = "Valider les modifications et démonter l'image" - DiscardAndUnmountTSMI.Text = "Annuler les modifications et démonter l'image" - UnmountSettingsToolStripMenuItem.Text = "Configurer les paramètres de démontage......" - ViewPackageDirectoryToolStripMenuItem.Text = "Afficher le répertoire des paquets" - GetImageFileInformationToolStripMenuItem.Text = "Obtenir des informations sur le fichier image..." - SaveCompleteImageInformationToolStripMenuItem.Text = "Enregistrer les informations complètes sur l'image..." - CreateDiscImageWithThisFileToolStripMenuItem.Text = "Créer une image disque avec ce fichier..." - ' OpenFileDialogs and FolderBrowsers - OpenFileDialog1.Title = "Spécifier le fichier de projet à charger" - LocalMountDirFBD.Description = "Veuillez spécifier le répertoire de montage que vous souhaitez charger dans ce projet:" - If Not ImgBW.IsBusy And areBackgroundProcessesDone Then - BGProcDetails.Label2.Text = "Les processus de l'image sont terminés" - End If - MenuDesc.Text = "Prêt" - ' Tree view context menu - AccessDirectoryToolStripMenuItem.Text = "Accéder à ce répertoire" - UnloadProjectToolStripMenuItem1.Text = "Décharger le projet" - CopyDeploymentToolsToolStripMenuItem.Text = "Copier les outils de déploiement" - OfAllArchitecturesToolStripMenuItem.Text = "De toutes les architectures" - OfSelectedArchitectureToolStripMenuItem.Text = "De l'architecture sélectionnée" - ForX86ArchitectureToolStripMenuItem.Text = "Pour l'architecture x86" - ForAmd64ArchitectureToolStripMenuItem.Text = "Pour l'architecture AMD64" - ForARMArchitectureToolStripMenuItem.Text = "Pour l'architecture ARM" - ForARM64ArchitectureToolStripMenuItem.Text = "Pour l'architecture ARM64" - ImageOperationsToolStripMenuItem.Text = "Opérations sur les images" - MountImageToolStripMenuItem.Text = "Monter l'image..." - UnmountImageToolStripMenuItem.Text = "Démonter l'image..." - RemoveVolumeImagesToolStripMenuItem.Text = "Supprimer les images de volume..." - SwitchImageIndexesToolStripMenuItem1.Text = "Changer d'index de l'image..." - UnattendedAnswerFilesToolStripMenuItem1.Text = "Fichiers de réponse non surveillés" - ManageToolStripMenuItem.Text = "Gérer" - CreationWizardToolStripMenuItem.Text = "Créer" - ScratchDirectorySettingsToolStripMenuItem.Text = "Configurer le répertoire temporaire" - ManageReportsToolStripMenuItem.Text = "Gérer les rapports" - AddToolStripMenuItem.Text = "Ajouter" - NewFileToolStripMenuItem.Text = "Nouveau fichier..." - ExistingFileToolStripMenuItem.Text = "Fichier existant..." - ' Context menu of AppX information dialog - SaveResourceToolStripMenuItem.Text = "Sauvegarder les ressources..." - CopyToolStripMenuItem.Text = "Copier la ressource" - ' Context menu of AppX addition dialog - MicrosoftAppsToolStripMenuItem.Text = "Visiter le site web de Microsoft Apps" - MicrosoftStoreGenerationProjectToolStripMenuItem.Text = "Visiter le site web du projet Microsoft Store Generation" - AppxDownloadHelpToolStripMenuItem.Text = "Comment puis-je obtenir des applications ?" - ' New design - GreetingLabel.Text = "Bienvenue à cette session de service" - LinkLabel12.Text = "PROJET" - LinkLabel13.Text = "IMAGE" - Label54.Text = "Nom :" - Label51.Text = "Lieu :" - Label53.Text = "Images montées ?" - LinkLabel14.Text = "Cliquez ici pour monter une image" - Label55.Text = "Tâches du projet" - LinkLabel15.Text = "Voir les propriétés du projet" - LinkLabel16.Text = "Ouvrir dans l'explorateur de fichiers" - LinkLabel17.Text = "Décharger le projet" - Label59.Text = "Aucune image n'a été montée" - Label58.Text = "Vous devez monter une image pour pouvoir consulter ses informations." - Label57.Text = "Choix" - LinkLabel21.Text = "Monter une image..." - LinkLabel18.Text = "Choisir une image montée..." - Label39.Text = "Index de l'image :" - Label43.Text = "Répertoire de montage :" - Label45.Text = "Version :" - Label42.Text = "Nom :" - Label40.Text = "Description :" - Label56.Text = "Tâches de l'image" - LinkLabel20.Text = "Voir les propriétés de l'image" - LinkLabel19.Text = "Démonter l'image" - GroupBox4.Text = "Opérations sur les images" - Button26.Text = "Monter une image..." - Button27.Text = "Sauvegarder les modifications pendants" - Button28.Text = "Sauvegarder modifications et démonter l'image" - Button29.Text = "Démonter l'image en supprimant les modifications" - Button25.Text = "Recharger la session de service" - Button24.Text = "Changer d'index de l'image..." - Button30.Text = "Appliquer l'image..." - Button31.Text = "Capturer image..." - Button32.Text = "Supprimer les images de volume..." - Button33.Text = "Sauvegarder les informations complètes de l'image..." - GroupBox5.Text = "Opérations sur les paquets" - Button36.Text = "Ajouter des paquets..." - Button34.Text = "Obtenir des informations sur le paquet..." - Button38.Text = "Sauvegarder les informations sur les paquets installés..." - Button35.Text = "Supprimer des paquets..." - Button37.Text = "Effectuer la maintenance et le nettoyage du stock de composants..." - GroupBox6.Text = "Opérations sur les caractéristiques" - Button41.Text = "Activer des caractéristiques..." - Button39.Text = "Obtenir des informations sur les caractéristiques..." - Button42.Text = "Sauvegarder les caractéristiques..." - Button40.Text = "Désactiver des caractéristiques..." - GroupBox7.Text = "Opérations sur les paquets AppX" - Button44.Text = "Ajouter des paquets AppX..." - Button45.Text = "Obtenir des informations sur les applications..." - Button46.Text = "Sauvegarder les informations sur les paquets AppX installés..." - Button43.Text = "Supprimer des paquets AppX..." - GroupBox8.Text = "Opérations sur les capacités" - Button48.Text = "Ajouter des capacités..." - Button49.Text = "Obtenir des informations sur les capacités..." - Button50.Text = "Sauvegarder les informations sur les capacités..." - Button47.Text = "Supprimer des capacités..." - GroupBox9.Text = "Opérations sur les pilotes" - Button53.Text = "Ajouter des paquets de pilotes..." - Button52.Text = "Obtenir des informations sur les pilotes..." - Button54.Text = "Sauvegarder les informations sur les pilotes installés..." - Button51.Text = "Supprimer des pilotes..." - GroupBox10.Text = "Opérations de Windows PE" - Button55.Text = "Obtenir des paramètres..." - Button56.Text = "Sauvegarder les paramètres..." - Button57.Text = "Configurer le chemin d'accès..." - Button58.Text = "Configurer l'espace temporaire..." - Case "PTB", "PTG" - ' Top-level menu items - FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Ficheiro".ToUpper(), "&Ficheiro") - ProjectToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Projeto".ToUpper(), "&Projeto") - CommandsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Co&mandos".ToUpper(), "Co&mandos") - ToolsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Ferramentas".ToUpper(), "&Ferramentas") - HelpToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Ajuda".ToUpper(), "&Ajuda") - InvalidSettingsTSMI.Text = "Foram detectadas configurações inválidas" - ' Submenu items - ' Menu - File - NewProjectToolStripMenuItem.Text = "&Novo projeto..." - OpenExistingProjectToolStripMenuItem.Text = "&Abrir projeto existente" - ManageOnlineInstallationToolStripMenuItem.Text = "&Gerir a instalação em linha" - ManageOfflineInstallationToolStripMenuItem.Text = "Gerir a instalação o&ffline..." - RecentProjectsListMenu.Text = "Projectos recentes" - SaveProjectToolStripMenuItem.Text = "&Guardar projeto..." - SaveProjectasToolStripMenuItem.Text = "Save project &como..." - ExitToolStripMenuItem.Text = "Sa&ir" - ' Menu - Project - ViewProjectFilesInFileExplorerToolStripMenuItem.Text = "Ver ficheiros de projeto no Explorador de Ficheiros" - UnloadProjectToolStripMenuItem.Text = "Descarregar o projeto..." - SwitchImageIndexesToolStripMenuItem.Text = "Alternar os índices de imagem..." - ProjectPropertiesToolStripMenuItem.Text = "Propriedades do projeto" - ImagePropertiesToolStripMenuItem.Text = "Propriedades da imagem" - ' Menu - Commands - ImageManagementToolStripMenuItem.Text = "Gestão de imagens" - OSPackagesToolStripMenuItem.Text = "Pacotes do sistema operativo" - ProvisioningPackagesToolStripMenuItem.Text = "Pacotes de provisionamento" - AppPackagesToolStripMenuItem.Text = "Pacotes AppX" - AppPatchesToolStripMenuItem.Text = "Serviço de aplicações (MSP)" - DefaultAppAssociationsToolStripMenuItem.Text = "Associações de aplicações predefinidas" - LanguagesAndRegionSettingsToolStripMenuItem.Text = "Línguas e definições regionais" - CapabilitiesToolStripMenuItem.Text = "Capacidades" - WindowsEditionsToolStripMenuItem.Text = "Edições do Windows" - DriversToolStripMenuItem.Text = "Controladores de dispositivos" - UnattendedAnswerFilesToolStripMenuItem.Text = "Ficheiros de resposta não assistidos" - WindowsPEServicingToolStripMenuItem.Text = "Manutenção do Windows PE" - OSUninstallToolStripMenuItem.Text = "Desinstalação do sistema operativo" - ReservedStorageToolStripMenuItem.Text = "Armazenamento reservado" - ' Menu - Commands - Image management - AppendImage.Text = "Anexar o diretório de captura à imagem..." - ApplyFFU.Text = "Aplicar o ficheiro FFU ou SFU..." - ApplyImage.Text = "Aplicar ficheiro WIM ou SWM..." - CaptureCustomImage.Text = "Capturar alterações incrementais no ficheiro..." - CaptureFFU.Text = "Capturar partições para o ficheiro FFU..." - CaptureImage.Text = "Capturar imagem de uma unidade para um ficheiro WIM..." - CleanupMountpoints.Text = "Eliminar recursos de uma imagem corrompida..." - CommitImage.Text = "Aplicar alterações à imagem..." - DeleteImage.Text = "Eliminar imagens de volume do ficheiro WIM..." - ExportImage.Text = "Exportar imagem..." - GetImageInfo.Text = "Obter informações sobre a imagem..." - GetWIMBootEntry.Text = "Obter entradas de configuração do WIMBoot..." - ListImage.Text = "Listar ficheiros e directórios na imagem..." - MountImage.Text = "Montar imagem..." - OptimizeFFU.Text = "Otimizar ficheiro FFU..." - OptimizeImage.Text = "Otimizar imagem..." - RemountImage.Text = "Remontar imagem para manutenção..." - SplitFFU.Text = "Dividir o arquivo FFU em arquivos SFU..." - SplitImage.Text = "Dividir ficheiro WIM em ficheiros SWM..." - UnmountImage.Text = "Desmontar imagem..." - UpdateWIMBootEntry.Text = "Atualizar a entrada de configuração WIMBoot..." - ApplySiloedPackage.Text = "Aplicar pacote de provisionamento em silo..." - ' Menu - Commands - OS packages - GetPackages.Text = "Obter informações sobre os pacotes..." - AddPackage.Text = "Adicionar pacotes..." - RemovePackage.Text = "Remove package..." - GetFeatures.Text = "Obter informações sobre as características..." - EnableFeature.Text = "Ativar características..." - DisableFeature.Text = "Desativar funcionalidades..." - CleanupImage.Text = "Efetuar operações de limpeza ou de recuperação..." - SaveImageInformationToolStripMenuItem.Text = "Guardar informações da imagem..." - ' Menu - Commands - Provisioning packages - AddProvisioningPackage.Text = "Adicionar pacote de aprovisionamento..." - GetProvisioningPackageInfo.Text = "Obter informações sobre o pacote de aprovisionamento..." - ApplyCustomDataImage.Text = "Aplicar imagens de dados personalizadas..." - ' Menu - Commands - App packages - GetProvisionedAppxPackages.Text = "Obter informações sobre o pacote AppX..." - AddProvisionedAppxPackage.Text = "Adicionar pacote AppX provisionado..." - RemoveProvisionedAppxPackage.Text = "Remover o aprovisionamento do pacote AppX..." - OptimizeProvisionedAppxPackages.Text = "Otimizar os pacotes provisionados..." - SetProvisionedAppxDataFile.Text = "Adicionar ficheiro de dados personalizado ao pacote AppX..." - ' Menu - Commands - App (MSP) servicing - CheckAppPatch.Text = "Obter informações sobre patches de aplicações..." - GetAppPatchInfo.Text = "Obter informações detalhadas sobre patches de aplicações..." - GetAppPatches.Text = "Obter informações básicas sobre patches de aplicações instaladas..." - GetAppInfo.Text = "Obter informações detalhadas sobre a aplicação Windows Installer (*.msi)..." - GetApps.Text = "Obter informações básicas sobre a aplicação Windows Installer (*.msi)..." - ' Menu - Commands - Default app associations - ExportDefaultAppAssociations.Text = "Exportar associações de aplicações predefinidas..." - GetDefaultAppAssociations.Text = "Obter informações de associação de aplicações predefinidas..." - ImportDefaultAppAssociations.Text = "Importar associações de aplicações predefinidas..." - RemoveDefaultAppAssociations.Text = "Remover associações de aplicações predefinidas..." - ' Menu - Commands - Languages and regional settings - GetIntl.Text = "Obter definições e línguas internacionais..." - SetUILang.Text = "Definir o idioma da IU..." - SetUILangFallback.Text = "Definir o idioma de recurso predefinido da IU..." - SetSysUILang.Text = "Definir o idioma preferido da IU do sistema..." - SetSysLocale.Text = "Definir a localidade do sistema..." - SetUserLocale.Text = "Definir a localidade do utilizador..." - SetInputLocale.Text = "Definir localidade de entrada..." - SetAllIntl.Text = "Definir o idioma e as localidades da IU..." - SetTimeZone.Text = "Definir o fuso horário predefinido..." - SetSKUIntlDefaults.Text = "Definir idiomas e localidades predefinidos..." - SetLayeredDriver.Text = "Definir driver em camadas..." - GenLangINI.Text = "Gerar ficheiro Lang.ini..." - SetSetupUILang.Text = "Definir idioma de configuração padrão..." - ' Menu - Commands - Capabilities - AddCapability.Text = "Adicionar capacidade..." - ExportSource.Text = "Exportar capacidades para o repositório..." - GetCapabilities.Text = "Obter informações sobre a capacidade..." - RemoveCapability.Text = "Remover capacidade..." - ' Menu - Commands - Windows editions - GetCurrentEdition.Text = "Obter a edição atual..." - GetTargetEditions.Text = "Obter objectivos de atualização..." - SetEdition.Text = "Atualizar a imagem..." - SetProductKey.Text = "Definir a chave do produto..." - ' Menu - Commands - Drivers - GetDrivers.Text = "Obter informações sobre o controlador..." - AddDriver.Text = "Adicionar controlador..." - RemoveDriver.Text = "Remover controlador..." - ExportDriver.Text = "Exportar pacotes de controladores..." - ImportDriver.Text = "Importar pacotes de controladores..." - ' Menu - Commands - Unattended answer files - ApplyUnattend.Text = "Aplicar ficheiro de resposta não assistida..." - ' Menu - Commands - Windows PE servicing - GetPESettings.Text = "Obter definições..." - SetScratchSpace.Text = "Definir espaço de temporário..." - SetTargetPath.Text = "Definir caminho de destino..." - ' Menu - Commands - OS uninstall - GetOSUninstallWindow.Text = "Obter janela de desinstalação..." - InitiateOSUninstall.Text = "Iniciar a desinstalação..." - RemoveOSUninstall.Text = "Remover a capacidade de reversão..." - SetOSUninstallWindow.Text = "Definir janela de desinstalação..." - ' Menu - Commands - Reserved storage - SetReservedStorageState.Text = "Definir estado de armazenamento reservado..." - GetReservedStorageState.Text = "Obter estado de armazenamento reservado..." - ' Menu - Commands - Microsoft Edge - AddEdge.Text = "Adicionar Edge..." - AddEdgeBrowser.Text = "Adicionar navegador do Edge..." - AddEdgeWebView.Text = "Adicionar Edge WebView..." - ' Menu - Tools - ImageConversionToolStripMenuItem.Text = "Conversão de imagens" - MergeSWM.Text = "Fundir ficheiros SWM..." - RemountImageWithWritePermissionsToolStripMenuItem.Text = "Remontar imagem com permissões de escrita" - CommandShellToolStripMenuItem.Text = "Consola de comandos" - UnattendedAnswerFileManagerToolStripMenuItem.Text = "Gestor de ficheiros de resposta não assistida" - UnattendedAnswerFileCreatorToolStripMenuItem.Text = "Criador de ficheiros de resposta não assistida" - RegCplToolStripMenuItem.Text = "Gerir as colmeias do registo de imagens..." - WebResourcesToolStripMenuItem.Text = "Recursos da Web" - LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = " Descarregar ISOs de idiomas e caraterísticas opcionais..." - LanguagesAndFODWin10ToolStripMenuItem.Text = "Descarregar discos de idiomas e FOD para o Windows 10..." - ReportManagerToolStripMenuItem.Text = "Gestor de relatórios" - MountedImageManagerTSMI.Text = "Gestor de imagens montadas" - CreateDiscImageToolStripMenuItem.Text = "Criar imagem de disco..." - CreateTestingEnvironmentToolStripMenuItem.Text = "Criar um ambiente de teste..." - WimScriptEditorCommand.Text = "Editor de listas de configuração" - OptionsToolStripMenuItem.Text = "Opções" - ' Menu - Help - HelpTopicsToolStripMenuItem.Text = "Tópicos de Ajuda" - AboutDISMToolsToolStripMenuItem.Text = "Acerca do DISMTools" - ' Menu - Invalid settings - ISFix.Text = "Mais informações" - ISHelp.Text = "O que é isto?" - ' Menu - DevState - ReportFeedbackToolStripMenuItem.Text = "Comunicar comentários (abre no navegador Web)" - ' Menu - Contributions - ContributeToTheHelpSystemToolStripMenuItem.Text = "Contribuir para o sistema de ajuda" - ' Menu - Tour Server - TourActionsTSMI.Text = "Ações do Tour" - ServerStatusTSMI.Text = String.Format("O servidor de tour está ativo na porta {0}", tourServer.GetTcpPort()) - RestartDTTourTSMI.Text = "Reiniciar Tour" - StopDTTourServerTSMI.Text = "Parar Servidor de Tour" - ' Start Panel - LabelHeader1.Text = "Início" - Label10.Text = "Projectos recentes" - NewProjLink.Text = "Novo projeto..." - ExistingProjLink.Text = "Abrir projeto existente..." - OnlineInstMgmt.Text = "Gerir a instalação online" - OfflineInstMgmt.Text = "Gerir a instalação offline..." - ' ToolStrip buttons - ToolStripButton1.Text = "Fechar separador" - ToolStripButton2.Text = "Guardar projeto" - ToolStripButton3.Text = "Descarregar projeto" - ToolStripButton3.ToolTipText = "Descarregar projeto a partir deste programa" - ToolStripButton4.Text = "Mostrar janela de progresso" - RefreshViewTSB.Text = "Atualizar vista" - ExpandCollapseTSB.Text = "Expandir" - UpdateLink.Text = "Está disponível uma nova versão para transferência e instalação. Clique aqui para saber mais" - UpdateLink.LinkArea = New LinkArea(65, 27) - ' Pop-up context menus - PkgBasicInfo.Text = "Obter informações básicas (todos os pacotes)" - PkgDetailedInfo.Text = "Obter informações detalhadas (pacote específico)" - CommitAndUnmountTSMI.Text = "Confirmar alterações e desmontar imagem" - DiscardAndUnmountTSMI.Text = "Descartar alterações e desmontar a imagem" - UnmountSettingsToolStripMenuItem.Text = "Desmontar definições..." - ViewPackageDirectoryToolStripMenuItem.Text = "Ver diretório de pacotes" - GetImageFileInformationToolStripMenuItem.Text = "Obter informações sobre o ficheiro de imagem..." - SaveCompleteImageInformationToolStripMenuItem.Text = "Guardar informações completas sobre a imagem..." - CreateDiscImageWithThisFileToolStripMenuItem.Text = "Criar imagem de disco com este ficheiro..." - ' OpenFileDialogs and FolderBrowsers - OpenFileDialog1.Title = "Especifique o ficheiro de projeto a carregar" - LocalMountDirFBD.Description = "Especifique o diretório de montagem que pretende carregar para este projeto:" - If Not ImgBW.IsBusy And areBackgroundProcessesDone Then - BGProcDetails.Label2.Text = "Os processos de imagem foram concluídos" - End If - MenuDesc.Text = "Pronto" - ' Tree view context menu - AccessDirectoryToolStripMenuItem.Text = "Aceder ao diretório" - UnloadProjectToolStripMenuItem1.Text = "Descarregar projeto" - CopyDeploymentToolsToolStripMenuItem.Text = "Copiar ferramentas de implementação" - OfAllArchitecturesToolStripMenuItem.Text = "De todas as arquitecturas" - OfSelectedArchitectureToolStripMenuItem.Text = "Da arquitetura selecionada" - ForX86ArchitectureToolStripMenuItem.Text = "Para a arquitetura x86" - ForAmd64ArchitectureToolStripMenuItem.Text = "Para a arquitetura AMD64" - ForARMArchitectureToolStripMenuItem.Text = "Para a arquitetura ARM" - ForARM64ArchitectureToolStripMenuItem.Text = "Para a arquitetura ARM64" - ImageOperationsToolStripMenuItem.Text = "Operações de imagem" - MountImageToolStripMenuItem.Text = "Montar imagem..." - UnmountImageToolStripMenuItem.Text = "Desmontar imagem..." - RemoveVolumeImagesToolStripMenuItem.Text = "Remover imagens de volume..." - SwitchImageIndexesToolStripMenuItem1.Text = "Mudar os índices de imagem..." - UnattendedAnswerFilesToolStripMenuItem1.Text = "Ficheiros de resposta não assistidos" - ManageToolStripMenuItem.Text = "Gerir" - CreationWizardToolStripMenuItem.Text = "Criar" - ScratchDirectorySettingsToolStripMenuItem.Text = "Configurar o diretório de temporário" - ManageReportsToolStripMenuItem.Text = "Gerir relatórios" - AddToolStripMenuItem.Text = "Adicionar" - NewFileToolStripMenuItem.Text = "Novo ficheiro..." - ExistingFileToolStripMenuItem.Text = "Ficheiro existente..." - ' Context menu of AppX information dialog - SaveResourceToolStripMenuItem.Text = "Guardar recurso..." - CopyToolStripMenuItem.Text = "Copiar recurso" - ' Context menu of AppX addition dialog - MicrosoftAppsToolStripMenuItem.Text = "Visite o sítio Web das Aplicações Microsoft" - MicrosoftStoreGenerationProjectToolStripMenuItem.Text = "Visite o Web site do Projeto de Geração da Microsoft Store" - AppxDownloadHelpToolStripMenuItem.Text = "Como é que obtenho aplicações?" - ' New design - GreetingLabel.Text = "Bem-vindo a esta sessão de manutenção" - LinkLabel12.Text = "PROJECTO" - LinkLabel13.Text = "IMAGEM" - Label54.Text = "Nome:" - Label51.Text = "Localização:" - Label53.Text = "Imagens montadas?" - LinkLabel14.Text = "Clique aqui para montar uma imagem" - Label55.Text = "Tarefas do projeto" - LinkLabel15.Text = "Ver propriedades do projeto" - LinkLabel16.Text = "Abrir no Explorador de Ficheiros" - LinkLabel17.Text = "Descarregar projeto" - Label59.Text = "Não foi montada nenhuma imagem" - Label58.Text = "É necessário montar uma imagem para ver a sua informação" - Label57.Text = "Escolhas" - LinkLabel21.Text = "Montar uma imagem..." - LinkLabel18.Text = "Escolher uma imagem montada..." - Label39.Text = "Índice da imagem:" - Label43.Text = "Ponto de montagem:" - Label45.Text = "Versão:" - Label42.Text = "Nome:" - Label40.Text = "Descrição:" - Label56.Text = "Tarefas de imagem" - LinkLabel20.Text = "Ver propriedades da imagem" - LinkLabel19.Text = "Desmontar imagem" - GroupBox4.Text = "Operações de imagem" - Button26.Text = "Montar imagem..." - Button27.Text = "Confirmar alterações actuais" - Button28.Text = "Confirmar e desmontar a imagem" - Button29.Text = "Desmontar imagem, descartando alterações" - Button25.Text = "Recarregar sessão de manutenção" - Button24.Text = "Mudar os índices de imagem..." - Button30.Text = "Aplicar imagem..." - Button31.Text = "Capturar imagem..." - Button32.Text = "Remover imagens de volume..." - Button33.Text = "Guardar informações completas da imagem..." - GroupBox5.Text = "Operações do pacote" - Button36.Text = "Adicionar pacote..." - Button34.Text = "Obter informações sobre o pacote..." - Button38.Text = "Guardar informações do pacote instalado..." - Button35.Text = "Remover pacote..." - Button37.Text = "Executar manutenção e limpeza do arquivo de componentes..." - GroupBox6.Text = "Operações de funcionalidades" - Button41.Text = "Ativar caraterística..." - Button39.Text = "Obter informações sobre a caraterística..." - Button42.Text = "Guardar informação da caraterística..." - Button40.Text = "Desativar caraterística..." - GroupBox7.Text = "Operações do pacote AppX" - Button44.Text = "Adicionar pacote AppX..." - Button45.Text = "Obter informações sobre a aplicação..." - Button46.Text = "Guardar informações do pacote AppX instalado..." - Button43.Text = "Remover pacote AppX..." - GroupBox8.Text = "Operações de capacidade" - Button48.Text = "Adicionar capacidade..." - Button49.Text = "Obter informações de capacidade..." - Button50.Text = "Guardar informações de capacidade..." - Button47.Text = "Remover capacidade..." - GroupBox9.Text = "Operações do controlador" - Button53.Text = "Adicionar pacote de controlador..." - Button52.Text = "Obter informações do controlador..." - Button54.Text = "Guardar informações do controlador instalado..." - Button51.Text = "Remover controlador..." - GroupBox10.Text = "Operações do Windows PE" - Button55.Text = "Obter configuração" - Button56.Text = "Guardar configuração..." - Button57.Text = "Definir caminho de destino..." - Button58.Text = "Definir espaço temporário..." - Case "ITA" - ' Top-level menu items - FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&File".ToUpper(), "&File") - ProjectToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Progetto".ToUpper(), "&Progetto") - CommandsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Com&andi".ToUpper(), "Com&andi") - ToolsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Strumenti".ToUpper(), "&Strumenti") - HelpToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Aiuto".ToUpper(), "&Aiuto") - InvalidSettingsTSMI.Text = "Sono state rilevate impostazioni non valide" - ' Submenu items - ' Menu - File - NewProjectToolStripMenuItem.Text = "&Nuovo progetto..." - OpenExistingProjectToolStripMenuItem.Text = "&Apri progetto esistente" - ManageOnlineInstallationToolStripMenuItem.Text = "&Gestisci installazione online..." - ManageOfflineInstallationToolStripMenuItem.Text = "Gestisci installazione &offline..." - RecentProjectsListMenu.Text = "Progetti recenti" - SaveProjectToolStripMenuItem.Text = "&Salva progetto..." - SaveProjectasToolStripMenuItem.Text = "Salva progetto &come..." - ExitToolStripMenuItem.Text = "E&sci" - ' Menu - Project - ViewProjectFilesInFileExplorerToolStripMenuItem.Text = "Visualizza file progetto in Esplora file" - UnloadProjectToolStripMenuItem.Text = "Download progetto..." - SwitchImageIndexesToolStripMenuItem.Text = "Modifica indici immagini..." - ProjectPropertiesToolStripMenuItem.Text = "Proprietà progetto" - ImagePropertiesToolStripMenuItem.Text = "Proprietà immagine" - ' Menu - Commands - ImageManagementToolStripMenuItem.Text = "Gestisci immagini" - OSPackagesToolStripMenuItem.Text = "Pacchetti SO" - ProvisioningPackagesToolStripMenuItem.Text = "Pacchetti provisioning" - AppPackagesToolStripMenuItem.Text = "Pacchetti AppX" - AppPatchesToolStripMenuItem.Text = "Assistenza app (MSP)" - DefaultAppAssociationsToolStripMenuItem.Text = "Associazioni app predefinite" - LanguagesAndRegionSettingsToolStripMenuItem.Text = "Lingue ed impostazioni regionali" - CapabilitiesToolStripMenuItem.Text = "Capacità" - WindowsEditionsToolStripMenuItem.Text = "Edizioni Windows" - DriversToolStripMenuItem.Text = "Driver" - UnattendedAnswerFilesToolStripMenuItem.Text = "File risposte non presidiate" - WindowsPEServicingToolStripMenuItem.Text = "Assistenza Windows PE" - OSUninstallToolStripMenuItem.Text = "Disinstallazione sistema operativo" - ReservedStorageToolStripMenuItem.Text = "Archiviazione riservata" - ' Menu - Commands - Image management - AppendImage.Text = "Aggiungi cartella cattura all'immagine..." - ApplyFFU.Text = "Applica file FFU o SFU..." - ApplyImage.Text = "Applica file WIM o SWM..." - CaptureCustomImage.Text = "Cattura modifiche incrementali al file..." - CaptureFFU.Text = "Cattura partizioni nel file FFU..." - CaptureImage.Text = "Cattura immagine di un'unità in un file WIM..." - CleanupMountpoints.Text = "Elimina risorse dall'immagine danneggiata..." - CommitImage.Text = "Applica modifiche all'immagine..." - DeleteImage.Text = "Cancella immagini volume dal file WIM..." - ExportImage.Text = "Esporta immagine..." - GetImageInfo.Text = "Verifica informazioni immagine..." - GetWIMBootEntry.Text = "Verifica voci configurazione WIMBoot..." - ListImage.Text = "Elenca file/cartelle nell'immagine..." - MountImage.Text = "Monta immagine..." - OptimizeFFU.Text = "Ottimizza file FFU..." - OptimizeImage.Text = "Ottimizza immagine..." - RemountImage.Text = "Rimonta immagine per la manutenzione..." - SplitFFU.Text = "Dividi file FFU in file SFU..." - SplitImage.Text = "Dividi file WIM in file SWM..." - UnmountImage.Text = "Smonta immagine..." - UpdateWIMBootEntry.Text = "Aggiorna voce configurazione WIMBoot..." - ApplySiloedPackage.Text = "Applica pacchetto provisioning a silo..." - ' Menu - Commands - OS packages - GetPackages.Text = "Verifica informazioni pacchetti..." - AddPackage.Text = "Aggiungi pacchetto..." - RemovePackage.Text = "Rimuovi pacchetto..." - GetFeatures.Text = "Verifica informazioni funzionalità..." - EnableFeature.Text = "Abilita funzionalità..." - DisableFeature.Text = "Disabilita funzionalità..." - CleanupImage.Text = "Esegui operazioni pulizia/ripristino..." - SaveImageInformationToolStripMenuItem.Text = "Salva informazioni immagine..." - ' Menu - Commands - Provisioning packages - AddProvisioningPackage.Text = "Aggiungi pacchetto provisioning..." - GetProvisioningPackageInfo.Text = "Verifica informazioni pacchetto provisioning..." - ApplyCustomDataImage.Text = "Applica immagine dati personalizzata..." - ' Menu - Commands - App packages - GetProvisionedAppxPackages.Text = "Verifica informazioni pacchetto AppX..." - AddProvisionedAppxPackage.Text = "Aggiungi pacchetto AppX in provisioning..." - RemoveProvisionedAppxPackage.Text = "Rimuovi provisioning del pacchetto AppX..." - OptimizeProvisionedAppxPackages.Text = "Ottimizza pacchetti in provisioning..." - SetProvisionedAppxDataFile.Text = "Aggiungi file dati personalizzato al pacchetto AppX..." - ' Menu - Commands - App (MSP) servicing - CheckAppPatch.Text = "Verifica informazioni sulle patch applicazione..." - GetAppPatchInfo.Text = "Verifica informazioni dettagliate patch applicazione..." - GetAppPatches.Text = "Verifica informazioni basi patch applicazioni installate..." - GetAppInfo.Text = "Verifica informazioni dettagliate applicazione Windows Installer (*.msi)..." - GetApps.Text = "Verifica informazioni basi applicazione Windows Installer (*.msi)..." - ' Menu - Commands - Default app associations - ExportDefaultAppAssociations.Text = "Esporta associazioni predefinite applicazioni..." - GetDefaultAppAssociations.Text = "Verifica informazioni associazioni predefinite applicazioni..." - ImportDefaultAppAssociations.Text = "Importa associazioni predefinite applicazioni..." - RemoveDefaultAppAssociations.Text = "Rimuovi associazioni predefinite applicazioni..." - ' Menu - Commands - Languages and regional settings - GetIntl.Text = "Verifica impostazioni e lingue internazionali..." - SetUILang.Text = "Imposta lingua interfaccia utente..." - SetUILangFallback.Text = "Imposta lingua fallback predefinita interfaccia utente..." - SetSysUILang.Text = "Imposta lingua interfaccia utente preferita sistema..." - SetSysLocale.Text = "Imposta locale sistema..." - SetUserLocale.Text = "Imposta locale utente..." - SetInputLocale.Text = "Imposta locale input..." - SetAllIntl.Text = "Imposta la lingua interfaccia utente e locali..." - SetTimeZone.Text = "Imposta il fuso orario predefinito..." - SetSKUIntlDefaults.Text = "Imposta le lingue e i locali predefiniti..." - SetLayeredDriver.Text = "Imposta driver a livelli..." - GenLangINI.Text = "Genera file Lang.ini..." - SetSetupUILang.Text = "Imposta lingua predefinita programma installazione..." - ' Menu - Commands - Capabilities - AddCapability.Text = "Aggiungi capacità..." - ExportSource.Text = "Esporta capacità nel repository..." - GetCapabilities.Text = "Verifica informazioni capacità..." - RemoveCapability.Text = "Rimuovi capacità..." - ' Menu - Commands - Windows editions - GetCurrentEdition.Text = "Verifica edizione attuale..." - GetTargetEditions.Text = "Verifica obiettivi aggiornamento..." - SetEdition.Text = "Aggiorna immagine..." - SetProductKey.Text = "Imposta chiave prodotto..." - ' Menu - Commands - Drivers - GetDrivers.Text = "Verifica informazioni driver..." - AddDriver.Text = "Aggiungi driver..." - RemoveDriver.Text = "Rimuovi driver..." - ExportDriver.Text = "Esporta pacchetti driver..." - ImportDriver.Text = "Importa pacchetti driver..." - ' Menu - Commands - Unattended answer files - ApplyUnattend.Text = "Applica file di risposte non presidiate..." - ' Menu - Commands - Windows PE servicing - GetPESettings.Text = "Verifica impostazioni..." - SetScratchSpace.Text = "Imposta spazio per lo scratch..." - SetTargetPath.Text = "Imposta percorso destinazione..." - ' Menu - Commands - OS uninstall - GetOSUninstallWindow.Text = "Verifica finestra disinstallazione..." - InitiateOSUninstall.Text = "Avvia disinstallazione..." - RemoveOSUninstall.Text = "Rimuovi opzione rollback..." - SetOSUninstallWindow.Text = "Imposta finestra disinstallazione..." - ' Menu - Commands - Reserved storage - SetReservedStorageState.Text = "Imposta stato archiviazione riservato..." - GetReservedStorageState.Text = "Verifica stato archiviazione riservato..." - ' Menu - Commands - Microsoft Edge - AddEdge.Text = "Aggiungi Edge..." - AddEdgeBrowser.Text = "Aggiungi browser Edge..." - AddEdgeWebView.Text = "Aggiungi WebView Edge..." - ' Menu - Tools - ImageConversionToolStripMenuItem.Text = "Conversione immagine" - MergeSWM.Text = "Unisci file SWM..." - RemountImageWithWritePermissionsToolStripMenuItem.Text = "Rimonta l'immagine con i permessi di scrittura" - CommandShellToolStripMenuItem.Text = "Console comandi" - UnattendedAnswerFileManagerToolStripMenuItem.Text = "Gestisci file risposte non presidiate" - UnattendedAnswerFileCreatorToolStripMenuItem.Text = "Crea file risposte non presidiate" - RegCplToolStripMenuItem.Text = "Gestisci struttura registro immagini..." - WebResourcesToolStripMenuItem.Text = "Risorse web" - LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = "Download ISO lingue/funzionalità opzionali..." - LanguagesAndFODWin10ToolStripMenuItem.Text = "Download lingue/dischi FOD per Windows 10..." - ReportManagerToolStripMenuItem.Text = "Gestisci rapporti" - MountedImageManagerTSMI.Text = "Gestisci immagini montate" - CreateDiscImageToolStripMenuItem.Text = "Crea immagine disco..." - CreateTestingEnvironmentToolStripMenuItem.Text = "Crea ambiente test..." - WimScriptEditorCommand.Text = "Editor elenco configurazione" - OptionsToolStripMenuItem.Text = "Opzioni" - ' Menu - Help - HelpTopicsToolStripMenuItem.Text = "Argomenti guida in linea" - AboutDISMToolsToolStripMenuItem.Text = "Informazioni su DISMTools" - ' Menu - Invalid settings - ISFix.Text = "Altre informazioni" - ISHelp.Text = "Che cos'è questo?" - ' Menu - DevState - ReportFeedbackToolStripMenuItem.Text = "Invia feedback (si apre nel browser web)" - ' Menu - Contributions - ContributeToTheHelpSystemToolStripMenuItem.Text = "Contribuisci al supporto del programma" - ' Menu - Tour Server - TourActionsTSMI.Text = "Azioni tour" - ServerStatusTSMI.Text = String.Format("Il server tour è attivo sulla porta {0}", tourServer.GetTcpPort()) - RestartDTTourTSMI.Text = "Riavvia tour" - StopDTTourServerTSMI.Text = "Interrompi server tour" - ' Start Panel - LabelHeader1.Text = "Inizia" - Label10.Text = "Progetti recenti" - NewProjLink.Text = "Nuovo progetto..." - ExistingProjLink.Text = "Apri progetto esistente..." - OnlineInstMgmt.Text = "Gestisci installazione online..." - OfflineInstMgmt.Text = "Gestisci installazione offline..." - RecentRemoveLink.Text = "Rimuovi elemento" - ' ToolStrip buttons - ToolStripButton1.Text = "Chiudi scheda" - ToolStripButton2.Text = "Salva progetto" - ToolStripButton3.Text = "Download progetto" - ToolStripButton3.ToolTipText = "Rimuovi progetto da questo programma" - ToolStripButton4.Text = "Visualizza finestra avanzamento" - RefreshViewTSB.Text = "Aggiorna vista" - ExpandCollapseTSB.Text = "Espandi" - UpdateLink.Text = "È disponibile una nuova versione da scaricare ed installare. Fai clic qui per maggiori informazioni." - UpdateLink.LinkArea = New LinkArea(60, 32) - ' Pop-up context menus - PkgBasicInfo.Text = "Verifica informazioni di base (tutti i pacchetti)" - PkgDetailedInfo.Text = "Verifica informazioni dettagliate (pacchetto specifico)" - CommitAndUnmountTSMI.Text = "Applica modifiche e smonta immagine" - DiscardAndUnmountTSMI.Text = "Scarta modifiche e smonta immagine" - UnmountSettingsToolStripMenuItem.Text = "Impostazioni smontaggio..." - ViewPackageDirectoryToolStripMenuItem.Text = "Visualizza cartella pacchetti" - GetImageFileInformationToolStripMenuItem.Text = "Verifica informazioni immagine..." - SaveCompleteImageInformationToolStripMenuItem.Text = "Salva informazioni complete immagine..." - CreateDiscImageWithThisFileToolStripMenuItem.Text = "Crea immagine disco con questo file..." - ' OpenFileDialogs and FolderBrowsers - OpenFileDialog1.Title = "Specifica il file progetto da caricare" - LocalMountDirFBD.Description = "Specifica la cartella di montaggio che vuoi caricare in questo progetto:" - If Not ImgBW.IsBusy And areBackgroundProcessesDone Then - BGProcDetails.Label2.Text = "I processi dell'immagine sono stati completati" - End If - MenuDesc.Text = "Pronto" - ' Tree view context menu - AccessDirectoryToolStripMenuItem.Text = "Accesso alla cartella" - UnloadProjectToolStripMenuItem1.Text = "Rimuovi progetto" - CopyDeploymentToolsToolStripMenuItem.Text = "Copia strumenti distribuzione" - OfAllArchitecturesToolStripMenuItem.Text = "Per tutte le architetture" - OfSelectedArchitectureToolStripMenuItem.Text = "Per l'architettura selezionata" - ForX86ArchitectureToolStripMenuItem.Text = "Per l'architettura x86" - ForAmd64ArchitectureToolStripMenuItem.Text = "Per l'architettura AMD64" - ForARMArchitectureToolStripMenuItem.Text = "Per architettura ARM" - ForARM64ArchitectureToolStripMenuItem.Text = "Per l'architettura ARM64" - ImageOperationsToolStripMenuItem.Text = "Operazioni immagini" - MountImageToolStripMenuItem.Text = "Monta immagine..." - UnmountImageToolStripMenuItem.Text = "Smonta immagine..." - RemoveVolumeImagesToolStripMenuItem.Text = "Rimuovi immagini volume..." - SwitchImageIndexesToolStripMenuItem1.Text = "Modifica indici immagine..." - UnattendedAnswerFilesToolStripMenuItem1.Text = "File risposte non presidiate" - ManageToolStripMenuItem.Text = "Gestisci" - CreationWizardToolStripMenuItem.Text = "Crea" - ScratchDirectorySettingsToolStripMenuItem.Text = "Imposta cartella temporanea" - ManageReportsToolStripMenuItem.Text = "Gestisci rapporti" - AddToolStripMenuItem.Text = "Aggiungi" - NewFileToolStripMenuItem.Text = "Nuovo file..." - ExistingFileToolStripMenuItem.Text = "File esistente..." - ' Context menu of AppX information dialog - SaveResourceToolStripMenuItem.Text = "Salva risorsa..." - CopyToolStripMenuItem.Text = "Copia risorsa" - ' Context menu of AppX addition dialog - MicrosoftAppsToolStripMenuItem.Text = "Visita il sito web Microsoft Apps" - MicrosoftStoreGenerationProjectToolStripMenuItem.Text = "Visita il sito web Microsoft Store Generation Project" - AppxDownloadHelpToolStripMenuItem.Text = "Come si ottengono le applicazioni?" - ' New design - GreetingLabel.Text = "Benvenuto in questa sessione di assistenza" - LinkLabel12.Text = "PROGETTO" - LinkLabel13.Text = "IMMAGINE" - Label54.Text = "Nome:" - Label51.Text = "Percorso:" - Label53.Text = "Immagini montate?" - LinkLabel14.Text = "Fai clic qui per montare un'immagine" - Label55.Text = "Attività progetto" - LinkLabel15.Text = "Visualizza proprietà progetto" - LinkLabel16.Text = "Apri in Esplora file" - LinkLabel17.Text = "Rimuovi progetto" - Label59.Text = "Non è stata montata alcuna immagine" - Label58.Text = "Per visualizzare le informazioni sull'immagine è necessario montarla" - Label57.Text = "Scelte" - LinkLabel21.Text = "Monta immagine..." - LinkLabel18.Text = "Scegli immagine montata..." - Label39.Text = "Indice immagine:" - Label43.Text = "Punto montaggio:" - Label45.Text = "Versione:" - Label42.Text = "Nome:" - Label40.Text = "Descrizione:" - Label56.Text = "Attività immagine" - LinkLabel20.Text = "Visualizza proprietà immagine" - LinkLabel19.Text = "Smonta immagine" - GroupBox4.Text = "Operazioni immagine" - Button26.Text = "Monta immagine..." - Button27.Text = "Applica modifiche attuali" - Button28.Text = "Applica e smonta immagine" - Button29.Text = "Smonta immagine eliminando le modifiche" - Button25.Text = "Ricarica sessione assistenza" - Button24.Text = "Modifica indici immagine..." - Button30.Text = "Applica immagine..." - Button31.Text = "Cattura immagine..." - Button32.Text = "Rimuovi immagini volume..." - Button33.Text = "Salva informazioni complete immagine..." - GroupBox5.Text = "Operazioni pacchetto" - Button36.Text = "Aggiungi pacchetto..." - Button34.Text = "Verifica informazioni pacchetto..." - Button38.Text = "Salva informazioni pacchetto installato..." - Button35.Text = "Rimuovi pacchetto..." - Button37.Text = "Esegui la manutenzione/pulizia archivio componenti..." - GroupBox6.Text = "Operazioni funzionalutà" - Button41.Text = "Attiva funzionalità..." - Button39.Text = "Verifica informazioni funzionalità..." - Button42.Text = "Salva informazioni funzionalità..." - Button40.Text = "Disattiva funzionalità..." - GroupBox7.Text = "Operazioni pacchetto AppX" - Button44.Text = "Aggiungi pacchetto AppX..." - Button45.Text = "Verifica informazioni applicazione..." - Button46.Text = "Salva informazioni pacchetto AppX installato..." - Button43.Text = "Rimuovi pacchetto AppX..." - GroupBox8.Text = "Operazioni capacità" - Button48.Text = "Aggiungi capacità..." - Button49.Text = "Verifica informazioni capacità..." - Button50.Text = "Salva informazioni capacità..." - Button47.Text = "Rimuovi capacità..." - GroupBox9.Text = "Operazioni driver dispositivo" - Button53.Text = "Aggiungi pacchetto driver..." - Button52.Text = "Verifica informazioni driver..." - Button54.Text = "Salva informazioni driver installato..." - Button51.Text = "Rimuovi driver..." - GroupBox10.Text = "Operazioni Windows PE" - Button55.Text = "Verifica configurazione" - Button56.Text = "Salva configurazione..." - Button57.Text = "Imposta percorso destinazione..." - Button58.Text = "Imposta spazio temporaneo..." - Case Else - Language = 1 - ChangeLangs(Language) - Exit Sub - End Select - Case 1 - DynaLog.LogMessage("Language code is 1. Switching to English...") - ' Top-level menu items - FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&File".ToUpper(), "&File") - ProjectToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Project".ToUpper(), "&Project") - CommandsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Com&mands".ToUpper(), "Com&mands") - ToolsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Tools".ToUpper(), "&Tools") - HelpToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Help".ToUpper(), "&Help") - InvalidSettingsTSMI.Text = "Invalid settings have been detected" - ' Submenu items - ' Menu - File - NewProjectToolStripMenuItem.Text = "&New project..." - OpenExistingProjectToolStripMenuItem.Text = "&Open existing project" - ManageOnlineInstallationToolStripMenuItem.Text = "&Manage online installation" - ManageOfflineInstallationToolStripMenuItem.Text = "Manage o&ffline installation..." - RecentProjectsListMenu.Text = "Recent projects" - SaveProjectToolStripMenuItem.Text = "&Save project..." - SaveProjectasToolStripMenuItem.Text = "Save project &as..." - ExitToolStripMenuItem.Text = "E&xit" - ' Menu - Project - ViewProjectFilesInFileExplorerToolStripMenuItem.Text = "View project files in File Explorer" - UnloadProjectToolStripMenuItem.Text = "Unload project..." - SwitchImageIndexesToolStripMenuItem.Text = "Switch image indexes..." - ProjectPropertiesToolStripMenuItem.Text = "Project properties" - ImagePropertiesToolStripMenuItem.Text = "Image properties" - ' Menu - Commands - ImageManagementToolStripMenuItem.Text = "Image management" - OSPackagesToolStripMenuItem.Text = "OS packages" - ProvisioningPackagesToolStripMenuItem.Text = "Provisioning packages" - AppPackagesToolStripMenuItem.Text = "AppX packages" - AppPatchesToolStripMenuItem.Text = "App (MSP) servicing" - DefaultAppAssociationsToolStripMenuItem.Text = "Default app associations" - LanguagesAndRegionSettingsToolStripMenuItem.Text = "Languages and regional settings" - CapabilitiesToolStripMenuItem.Text = "Capabilities" - WindowsEditionsToolStripMenuItem.Text = "Windows editions" - DriversToolStripMenuItem.Text = "Drivers" - UnattendedAnswerFilesToolStripMenuItem.Text = "Unattended answer files" - WindowsPEServicingToolStripMenuItem.Text = "Windows PE servicing" - OSUninstallToolStripMenuItem.Text = "OS uninstall" - ReservedStorageToolStripMenuItem.Text = "Reserved storage" - ' Menu - Commands - Image management - AppendImage.Text = "Append capture directory to image..." - ApplyFFU.Text = "Apply FFU or SFU file..." - ApplyImage.Text = "Apply WIM or SWM file..." - CaptureCustomImage.Text = "Capture incremental changes to file..." - CaptureFFU.Text = "Capture partitions to FFU file..." - CaptureImage.Text = "Capture image of a drive to WIM file..." - CleanupMountpoints.Text = "Delete resources from corrupted image..." - CommitImage.Text = "Apply changes to image..." - DeleteImage.Text = "Delete volume images from WIM file..." - ExportImage.Text = "Export image..." - GetImageInfo.Text = "Get image information..." - GetWIMBootEntry.Text = "Get WIMBoot configuration entries..." - ListImage.Text = "List files and directories in image..." - MountImage.Text = "Mount image..." - OptimizeFFU.Text = "Optimize FFU file..." - OptimizeImage.Text = "Optimize image..." - RemountImage.Text = "Remount image for servicing..." - SplitFFU.Text = "Split FFU file into SFU files..." - SplitImage.Text = "Split WIM file into SWM files..." - UnmountImage.Text = "Unmount image..." - UpdateWIMBootEntry.Text = "Update WIMBoot configuration entry..." - ApplySiloedPackage.Text = "Apply siloed provisioning package..." - SaveImageInformationToolStripMenuItem.Text = "Save image information..." - ' Menu - Commands - OS packages - GetPackages.Text = "Get package information..." - AddPackage.Text = "Add package..." - RemovePackage.Text = "Remove package..." - GetFeatures.Text = "Get feature information..." - EnableFeature.Text = "Enable feature..." - DisableFeature.Text = "Disable feature..." - CleanupImage.Text = "Perform cleanup or recovery operations..." - ' Menu - Commands - Provisioning packages - AddProvisioningPackage.Text = "Add provisioning package..." - GetProvisioningPackageInfo.Text = "Get provisioning package information..." - ApplyCustomDataImage.Text = "Apply custom data image..." - ' Menu - Commands - App packages - GetProvisionedAppxPackages.Text = "Get app package information..." - AddProvisionedAppxPackage.Text = "Add provisioned app package..." - RemoveProvisionedAppxPackage.Text = "Remove provisioning for app package..." - OptimizeProvisionedAppxPackages.Text = "Optimize provisioned packages..." - SetProvisionedAppxDataFile.Text = "Add custom data file into app package..." - ' Menu - Commands - App (MSP) servicing - CheckAppPatch.Text = "Get application patch information..." - GetAppPatchInfo.Text = "Get detailed application patch information..." - GetAppPatches.Text = "Get basic installed application patch information..." - GetAppInfo.Text = "Get detailed Windows Installer (*.msi) application information..." - GetApps.Text = "Get basic Windows Installer (*.msi) application information..." - ' Menu - Commands - Default app associations - ExportDefaultAppAssociations.Text = "Export default application associations..." - GetDefaultAppAssociations.Text = "Get default application association information..." - ImportDefaultAppAssociations.Text = "Import default application associations..." - RemoveDefaultAppAssociations.Text = "Remove default application associations..." - ' Menu - Commands - Languages and regional settings - GetIntl.Text = "Get international settings and languages..." - SetUILang.Text = "Set UI language..." - SetUILangFallback.Text = "Set default UI fallback language..." - SetSysUILang.Text = "Set system preferred UI language..." - SetSysLocale.Text = "Set system locale..." - SetUserLocale.Text = "Set user locale..." - SetInputLocale.Text = "Set input locale..." - SetAllIntl.Text = "Set UI language and locales..." - SetTimeZone.Text = "Set default time zone..." - SetSKUIntlDefaults.Text = "Set default languages and locales..." - SetLayeredDriver.Text = "Set layered driver..." - GenLangINI.Text = "Generate Lang.ini file..." - SetSetupUILang.Text = "Set default Setup language..." - ' Menu - Commands - Capabilities - AddCapability.Text = "Add capability..." - ExportSource.Text = "Export capabilities into repository..." - GetCapabilities.Text = "Get capability information..." - RemoveCapability.Text = "Remove capability..." - ' Menu - Commands - Windows editions - GetCurrentEdition.Text = "Get current edition..." - GetTargetEditions.Text = "Get upgrade targets..." - SetEdition.Text = "Upgrade image..." - SetProductKey.Text = "Set product key..." - ' Menu - Commands - Drivers - GetDrivers.Text = "Get driver information..." - AddDriver.Text = "Add driver..." - RemoveDriver.Text = "Remove driver..." - ExportDriver.Text = "Export driver packages..." - ImportDriver.Text = "Import driver packages..." - ' Menu - Commands - Unattended answer files - ApplyUnattend.Text = "Apply unattended answer file..." - ' Menu - Commands - Windows PE servicing - GetPESettings.Text = "Get settings..." - SetScratchSpace.Text = "Set scratch space..." - SetTargetPath.Text = "Set target path..." - ' Menu - Commands - OS uninstall - GetOSUninstallWindow.Text = "Get uninstall window..." - InitiateOSUninstall.Text = "Initiate uninstall..." - RemoveOSUninstall.Text = "Remove roll back ability..." - SetOSUninstallWindow.Text = "Set uninstall window..." - ' Menu - Commands - Reserved storage - SetReservedStorageState.Text = "Set reserved storage state..." - GetReservedStorageState.Text = "Get reserved storage state..." - ' Menu - Commands - Microsoft Edge - AddEdge.Text = "Add Edge..." - AddEdgeBrowser.Text = "Add Edge browser..." - AddEdgeWebView.Text = "Add Edge WebView..." - ' Menu - Tools - ImageConversionToolStripMenuItem.Text = "Image conversion" - MergeSWM.Text = "Merge SWM files..." - RemountImageWithWritePermissionsToolStripMenuItem.Text = "Remount image with write permissions" - CommandShellToolStripMenuItem.Text = "Command Console" - UnattendedAnswerFileManagerToolStripMenuItem.Text = "Unattended answer file manager" - UnattendedAnswerFileCreatorToolStripMenuItem.Text = "Unattended answer file creator" - RegCplToolStripMenuItem.Text = "Manage image registry hives..." - WebResourcesToolStripMenuItem.Text = "Web Resources" - LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = "Download Languages and Optional Features ISOs..." - LanguagesAndFODWin10ToolStripMenuItem.Text = "Download Languages and FOD discs for Windows 10..." - ReportManagerToolStripMenuItem.Text = "Report manager" - MountedImageManagerTSMI.Text = "Mounted image manager" - CreateDiscImageToolStripMenuItem.Text = "Create disc image..." - CreateTestingEnvironmentToolStripMenuItem.Text = "Create a testing environment..." - WimScriptEditorCommand.Text = "Configuration list editor" - OptionsToolStripMenuItem.Text = "Options" - ' Menu - Help - HelpTopicsToolStripMenuItem.Text = "Help Topics" - AboutDISMToolsToolStripMenuItem.Text = "About DISMTools" - ' Menu - Invalid settings - ISFix.Text = "More information" - ISHelp.Text = "What's this?" - ' Menu - DevState - ReportFeedbackToolStripMenuItem.Text = "Report feedback (opens in web browser)" - ' Menu - Contributions - ContributeToTheHelpSystemToolStripMenuItem.Text = "Contribute to the help system" - ' Menu - Tour Server - TourActionsTSMI.Text = "Tour Actions" - ServerStatusTSMI.Text = String.Format("Tour Server is active on port {0}", tourServer.GetTcpPort()) - RestartDTTourTSMI.Text = "Restart Tour" - StopDTTourServerTSMI.Text = "Stop Tour Server" - ' Start Panel - LabelHeader1.Text = "Begin" - Label10.Text = "Recent projects" - NewProjLink.Text = "New project..." - ExistingProjLink.Text = "Open existing project..." - OnlineInstMgmt.Text = "Manage online installation" - OfflineInstMgmt.Text = "Manage offline installation..." - RecentRemoveLink.Text = "Remove entry" - ' ToolStrip buttons - ToolStripButton1.Text = "Close tab" - ToolStripButton2.Text = "Save project" - ToolStripButton3.Text = "Unload project" - ToolStripButton3.ToolTipText = "Unload project from this program" - ToolStripButton4.Text = "Show progress window" - RefreshViewTSB.Text = "Refresh view" - ExpandCollapseTSB.Text = "Expand" - UpdateLink.Text = "A new version is available for download and installation. Click here to learn more" - UpdateLink.LinkArea = New LinkArea(58, 24) - ' Pop-up context menus - PkgBasicInfo.Text = "Get basic information (all packages)" - PkgDetailedInfo.Text = "Get detailed information (specific package)" - CommitAndUnmountTSMI.Text = "Commit changes and unmount image" - DiscardAndUnmountTSMI.Text = "Discard changes and unmount image" - UnmountSettingsToolStripMenuItem.Text = "Unmount settings..." - ViewPackageDirectoryToolStripMenuItem.Text = "View package directory" - GetImageFileInformationToolStripMenuItem.Text = "Get image file information..." - SaveCompleteImageInformationToolStripMenuItem.Text = "Save complete image information..." - CreateDiscImageWithThisFileToolStripMenuItem.Text = "Create disc image with this file..." - ' OpenFileDialogs and FolderBrowsers - OpenFileDialog1.Title = "Specify the project file to load" - LocalMountDirFBD.Description = "Please specify the mount directory you want to load into this project:" - If Not ImgBW.IsBusy And areBackgroundProcessesDone Then - BGProcDetails.Label2.Text = "Image processes have completed" - End If - MenuDesc.Text = "Ready" - ' Tree view context menu - AccessDirectoryToolStripMenuItem.Text = "Access directory" - UnloadProjectToolStripMenuItem1.Text = "Unload project" - CopyDeploymentToolsToolStripMenuItem.Text = "Copy deployment tools" - OfAllArchitecturesToolStripMenuItem.Text = "Of all architectures" - OfSelectedArchitectureToolStripMenuItem.Text = "Of selected architecture" - ForX86ArchitectureToolStripMenuItem.Text = "For x86 architecture" - ForAmd64ArchitectureToolStripMenuItem.Text = "For AMD64 architecture" - ForARMArchitectureToolStripMenuItem.Text = "For ARM architecture" - ForARM64ArchitectureToolStripMenuItem.Text = "For ARM64 architecture" - ImageOperationsToolStripMenuItem.Text = "Image operations" - MountImageToolStripMenuItem.Text = "Mount image..." - UnmountImageToolStripMenuItem.Text = "Unmount image..." - RemoveVolumeImagesToolStripMenuItem.Text = "Remove volume images..." - SwitchImageIndexesToolStripMenuItem1.Text = "Switch image indexes..." - UnattendedAnswerFilesToolStripMenuItem1.Text = "Unattended answer files" - ManageToolStripMenuItem.Text = "Manage" - CreationWizardToolStripMenuItem.Text = "Create" - ScratchDirectorySettingsToolStripMenuItem.Text = "Configure scratch directory" - ManageReportsToolStripMenuItem.Text = "Manage reports" - AddToolStripMenuItem.Text = "Add" - NewFileToolStripMenuItem.Text = "New file..." - ExistingFileToolStripMenuItem.Text = "Existing file..." - ' Context menu of AppX information dialog - SaveResourceToolStripMenuItem.Text = "Save resource..." - CopyToolStripMenuItem.Text = "Copy resource" - ' Context menu of AppX addition dialog - MicrosoftAppsToolStripMenuItem.Text = "Visit the Microsoft Apps website" - MicrosoftStoreGenerationProjectToolStripMenuItem.Text = "Visit the Microsoft Store Generation Project website" - AppxDownloadHelpToolStripMenuItem.Text = "How do I get applications?" - ' New design - GreetingLabel.Text = "Welcome to this servicing session" - LinkLabel12.Text = "PROJECT" - LinkLabel13.Text = "IMAGE" - Label54.Text = "Name:" - Label51.Text = "Location:" - Label53.Text = "Images mounted?" - LinkLabel14.Text = "Click here to mount an image" - Label55.Text = "Project Tasks" - LinkLabel15.Text = "View project properties" - LinkLabel16.Text = "Open in File Explorer" - LinkLabel17.Text = "Unload project" - Label59.Text = "No image has been mounted" - Label58.Text = "You need to mount an image in order to view its information" - Label57.Text = "Choices" - LinkLabel21.Text = "Mount an image..." - LinkLabel18.Text = "Pick a mounted image..." - Label39.Text = "Image index:" - Label43.Text = "Mount point:" - Label45.Text = "Version:" - Label42.Text = "Name:" - Label40.Text = "Description:" - Label56.Text = "Image Tasks" - LinkLabel20.Text = "View image properties" - LinkLabel19.Text = "Unmount image" - GroupBox4.Text = "Image operations" - Button26.Text = "Mount image..." - Button27.Text = "Commit current changes" - Button28.Text = "Commit and unmount image" - Button29.Text = "Unmount image discarding changes" - Button25.Text = "Reload servicing session" - Button24.Text = "Switch image indexes..." - Button30.Text = "Apply image..." - Button31.Text = "Capture image..." - Button32.Text = "Remove volume images..." - Button33.Text = "Save complete image information..." - GroupBox5.Text = "Package operations" - Button36.Text = "Add package..." - Button34.Text = "Get package information..." - Button38.Text = "Save installed package information..." - Button35.Text = "Remove package..." - Button37.Text = "Perform component store maintenance and cleanup..." - GroupBox6.Text = "Feature operations" - Button41.Text = "Enable feature..." - Button39.Text = "Get feature information..." - Button42.Text = "Save feature information..." - Button40.Text = "Disable feature..." - GroupBox7.Text = "AppX package operations" - Button44.Text = "Add AppX package..." - Button45.Text = "Get app information..." - Button46.Text = "Save installed AppX package information..." - Button43.Text = "Remove AppX package..." - GroupBox8.Text = "Capability operations" - Button48.Text = "Add capability..." - Button49.Text = "Get capability information..." - Button50.Text = "Save capability information..." - Button47.Text = "Remove capability..." - GroupBox9.Text = "Driver operations" - Button53.Text = "Add driver package..." - Button52.Text = "Get driver information..." - Button54.Text = "Save installed driver information..." - Button51.Text = "Remove driver..." - GroupBox10.Text = "Windows PE operations" - Button55.Text = "Get configuration" - Button56.Text = "Save configuration..." - Button57.Text = "Set target path..." - Button58.Text = "Set scratch space..." - Case 2 - DynaLog.LogMessage("Language code is 2. Switching to Spanish...") - ' Top-level menu items - FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Archivo".ToUpper(), "&Archivo") - ProjectToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Proyecto".ToUpper(), "&Proyecto") - CommandsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Co&mandos".ToUpper(), "Co&mandos") - ToolsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Her&ramientas".ToUpper(), "Her&ramientas") - HelpToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Ay&uda".ToUpper(), "Ay&uda") - InvalidSettingsTSMI.Text = "Se han detectado configuraciones inválidas" - ' Submenu items - ' Menu - File - NewProjectToolStripMenuItem.Text = "&Nuevo proyecto..." - OpenExistingProjectToolStripMenuItem.Text = "&Abrir proyecto existente" - ManageOnlineInstallationToolStripMenuItem.Text = "Administrar &instalación activa" - ManageOfflineInstallationToolStripMenuItem.Text = "Administrar instalación &fuera de línea..." - RecentProjectsListMenu.Text = "Proyectos recientes" - SaveProjectToolStripMenuItem.Text = "&Guardar proyecto..." - SaveProjectasToolStripMenuItem.Text = "Guardar proyecto &como..." - ExitToolStripMenuItem.Text = "Sa&lir" - ' Menu - Project - ViewProjectFilesInFileExplorerToolStripMenuItem.Text = "Ver archivos del proyecto en el Explorador de archivos" - UnloadProjectToolStripMenuItem.Text = "Descargar proyecto..." - SwitchImageIndexesToolStripMenuItem.Text = "Cambiar índices de imagen..." - ProjectPropertiesToolStripMenuItem.Text = "Propiedades del proyecto" - ImagePropertiesToolStripMenuItem.Text = "Propiedades de la imagen" - ' Menu - Commands - ImageManagementToolStripMenuItem.Text = "Administración de la imagen" - OSPackagesToolStripMenuItem.Text = "Paquetes del sistema operativo" - ProvisioningPackagesToolStripMenuItem.Text = "Paquetes de aprovisionamiento" - AppPackagesToolStripMenuItem.Text = "Paquetes AppX" - AppPatchesToolStripMenuItem.Text = "Servicio de aplicaciones (MSP)" - DefaultAppAssociationsToolStripMenuItem.Text = "Asociaciones predeterminadas de aplicaciones" - LanguagesAndRegionSettingsToolStripMenuItem.Text = "Configuración de idiomas y regiones" - CapabilitiesToolStripMenuItem.Text = "Funcionalidades" - WindowsEditionsToolStripMenuItem.Text = "Ediciones de Windows" - DriversToolStripMenuItem.Text = "Controladores" - UnattendedAnswerFilesToolStripMenuItem.Text = "Archivos de respuesta desatendida" - WindowsPEServicingToolStripMenuItem.Text = "Servicio de Windows PE" - OSUninstallToolStripMenuItem.Text = "Desinstalación del sistema operativo" - ReservedStorageToolStripMenuItem.Text = "Almacenamiento reservado" - ' Menu - Commands - Image management - AppendImage.Text = "Anexar directorio de captura a imagen..." - ApplyFFU.Text = "Aplicar archivo FFU o SFU..." - ApplyImage.Text = "Aplicar archivo WIM o SWM..." - CaptureCustomImage.Text = "Capturar cambios incrementales a un archivo..." - CaptureFFU.Text = "Capturar particiones a un archivo FFU..." - CaptureImage.Text = "Capturar imagen de un disco a un archivo WIM..." - CleanupMountpoints.Text = "Eliminar recursos de una imagen corrupta..." - CommitImage.Text = "Aplicar cambios a la imagen..." - DeleteImage.Text = "Eliminar imágenes de volumen de un archivo WIM..." - ExportImage.Text = "Exportar imagen..." - GetImageInfo.Text = "Obtener información de imagen..." - GetWIMBootEntry.Text = "Obtener entradas de configuración WIMBoot..." - ListImage.Text = "Enumerar archivos y directorios de un archivo WIM..." - MountImage.Text = "Montar imagen..." - OptimizeFFU.Text = "Optimizar archivo FFU..." - OptimizeImage.Text = "Optimizar imagen..." - RemountImage.Text = "Remontar imagen para su servicio..." - SplitFFU.Text = "Dividir archivo FFU en archivos SFU..." - SplitImage.Text = "Dividir archivo WIM en archivos SWM..." - UnmountImage.Text = "Desmontar imagen..." - UpdateWIMBootEntry.Text = "Actualizar entradas de configuración WIMBoot..." - ApplySiloedPackage.Text = "Aplicar paquete de aprovisionamiento en silos..." - SaveImageInformationToolStripMenuItem.Text = "Guardar información de la imagen..." - ' Menu - Commands - OS packages - GetPackages.Text = "Obtener información de paquetes..." - AddPackage.Text = "Añadir paquete..." - RemovePackage.Text = "Eliminar paquete..." - GetFeatures.Text = "Obtener información de características..." - EnableFeature.Text = "Habilitar característica..." - DisableFeature.Text = "Deshabilitar característica..." - CleanupImage.Text = "Realizar operaciones de limpieza o recuperación..." - ' Menu - Commands - Provisioning packages - AddProvisioningPackage.Text = "Añadir paquete de aprovisionamiento..." - GetProvisioningPackageInfo.Text = "Obtener información de paquete de aprovisionamiento..." - ApplyCustomDataImage.Text = "Aplicar imagen de datos personalizada..." - ' Menu - Commands - App packages - GetProvisionedAppxPackages.Text = "Obtener información de paquete AppX..." - AddProvisionedAppxPackage.Text = "Añadir paquete AppX aprovisionada..." - RemoveProvisionedAppxPackage.Text = "Eliminar aprovisionamiento para un paquete AppX..." - OptimizeProvisionedAppxPackages.Text = "Optimizar paquete de aprovisionamiento..." - SetProvisionedAppxDataFile.Text = "Añadir archivo de datos personalizado en paquete AppX..." - ' Menu - Commands - App (MSP) servicing - CheckAppPatch.Text = "Obtener información de parche de aplicación..." - GetAppPatchInfo.Text = "Obtener información detallada de parches de aplicación instalados..." - GetAppPatches.Text = "Obtener información básica de parches de aplicación instalados..." - GetAppInfo.Text = "Obtener información detallada de aplicaciones de Windows Installer (*.msi)..." - GetApps.Text = "Obtener información básica de aplicaciones de Windows Installer (*.msi)..." - ' Menu - Commands - Default app associations - ExportDefaultAppAssociations.Text = "Exportar asociaciones de aplicaciones predeterminadas..." - GetDefaultAppAssociations.Text = "Obtener información de asociaciones de aplicaciones predeterminadas..." - ImportDefaultAppAssociations.Text = "Importar asociaciones de aplicaciones predeterminadas..." - RemoveDefaultAppAssociations.Text = "Eliminar asociaciones de aplicaciones predeterminadas..." - ' Menu - Commands - Languages and regional settings - GetIntl.Text = "Obtener configuraciones e idiomas internacionales..." - SetUILang.Text = "Establecer idioma de la interfaz de usuario..." - SetUILangFallback.Text = "Establecer idioma predeterminado de la interfaz de usuario de último recurso..." - SetSysUILang.Text = "Estabñecer idioma de la interfaz de usuario preferido para el sistema..." - SetSysLocale.Text = "Establecer zona del sistema..." - SetUserLocale.Text = "Establecer zona del usuario..." - SetInputLocale.Text = "Establecer zona de entrada..." - SetAllIntl.Text = "Establecer idioma de la interfaz de usuario y zonas..." - SetTimeZone.Text = "Establecer zona horaria predeterminada..." - SetSKUIntlDefaults.Text = "Establecer lenguajes y zonas predeterminadas..." - SetLayeredDriver.Text = "Establecer controlador en capas..." - GenLangINI.Text = "Generar archivo Lang.ini..." - SetSetupUILang.Text = "Establecer idioma predeterminado del programa de instalación..." - ' Menu - Commands - Capabilities - AddCapability.Text = "Añadir funcionalidad..." - ExportSource.Text = "Exportar funcionalidades en un repositorio..." - GetCapabilities.Text = "Obtener información de funcionalidades..." - RemoveCapability.Text = "Eliminar funcionalidad..." - ' Menu - Commands - Windows editions - GetCurrentEdition.Text = "Obtener edición actual..." - GetTargetEditions.Text = "Obtener destinos de actualización..." - SetEdition.Text = "Actualizar imagen..." - SetProductKey.Text = "Establecer clave de producto..." - ' Menu - Commands - Drivers - GetDrivers.Text = "Obtener información de controladores..." - AddDriver.Text = "Añadir controlador..." - RemoveDriver.Text = "Eliminar controlador..." - ExportDriver.Text = "Exportar paquetes de controlador..." - ImportDriver.Text = "Importar paquetes de controlador..." - ' Menu - Commands - Unattended answer files - ApplyUnattend.Text = "Aplicar archivo de respuesta desatendida..." - ' Menu - Commands - Windows PE servicing - GetPESettings.Text = "Obtener configuración..." - SetScratchSpace.Text = "Establecer espacio temporal..." - SetTargetPath.Text = "Establecer ruta de destino..." - ' Menu - Commands - OS uninstall - GetOSUninstallWindow.Text = "Obtener margen de desinstalación..." - InitiateOSUninstall.Text = "Iniciar desinstalación..." - RemoveOSUninstall.Text = "Eliminar habilidad de desinstalación..." - SetOSUninstallWindow.Text = "Establecer margen de desinstalación..." - ' Menu - Commands - Reserved storage - SetReservedStorageState.Text = "Establecer estado de almacenamiento reservado..." - GetReservedStorageState.Text = "Obtener estado de almacenamiento reservado..." - ' Menu - Commands - Microsoft Edge - AddEdge.Text = "Añadir Edge..." - AddEdgeBrowser.Text = "Añadir navegador Edge..." - AddEdgeWebView.Text = "Añadir Edge WebView..." - ' Menu - Tools - ImageConversionToolStripMenuItem.Text = "Conversión de imágenes" - MergeSWM.Text = "Combinar archivos SWM..." - RemountImageWithWritePermissionsToolStripMenuItem.Text = "Remontar imagen con permisos de escritura" - CommandShellToolStripMenuItem.Text = "Consola de comandos" - UnattendedAnswerFileManagerToolStripMenuItem.Text = "Administrador de archivos de respuesta desatendida" - UnattendedAnswerFileCreatorToolStripMenuItem.Text = "Creador de archivos de respuesta desatendida" - RegCplToolStripMenuItem.Text = "Administrar subárboles del registro de la imagen..." - WebResourcesToolStripMenuItem.Text = "Recursos web" - LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = "Descargar archivos ISO de idiomas y características opcionales..." - LanguagesAndFODWin10ToolStripMenuItem.Text = "Descargar discos de idiomas y características opcionales para Windows 10..." - ReportManagerToolStripMenuItem.Text = "Administrador de informes" - MountedImageManagerTSMI.Text = "Administrador de imágenes montadas" - CreateDiscImageToolStripMenuItem.Text = "Crear imagen de disco..." - CreateTestingEnvironmentToolStripMenuItem.Text = "Crear un entorno de pruebas..." - WimScriptEditorCommand.Text = "Editor de lista de configuraciones" - OptionsToolStripMenuItem.Text = "Opciones" - ' Menu - Help - HelpTopicsToolStripMenuItem.Text = "Ver la ayuda" - AboutDISMToolsToolStripMenuItem.Text = "Acerca de DISMTools" - ' Menu - Invalid settings - ISFix.Text = "Más información" - ISHelp.Text = "¿Qué es esto?" - ' Menu - DevState - ReportFeedbackToolStripMenuItem.Text = "Enviar comentarios (se abre en navegador web)" - ' Menu - Contributions - ContributeToTheHelpSystemToolStripMenuItem.Text = "Contribuir al sistema de ayuda" - ' Menu - Tour Server - TourActionsTSMI.Text = "Acciones del tour" - ServerStatusTSMI.Text = String.Format("El servidor del tour está activo en el puerto {0}", tourServer.GetTcpPort()) - RestartDTTourTSMI.Text = "Reiniciar tour" - StopDTTourServerTSMI.Text = "Detener servidor del tour" - ' Start Panel - LabelHeader1.Text = "Comenzar" - Label10.Text = "Proyectos recientes" - NewProjLink.Text = "Nuevo proyecto..." - ExistingProjLink.Text = "Abrir proyecto existente..." - OnlineInstMgmt.Text = "Administrar instalación activa" - OfflineInstMgmt.Text = "Administrar instalación fuera de línea..." - RecentRemoveLink.Text = "Eliminar entrada" - ' ToolStrip buttons - ToolStripButton1.Text = "Cerrar pestaña" - ToolStripButton2.Text = "Guardar proyecto" - ToolStripButton3.Text = "Descargar proyecto" - ToolStripButton3.ToolTipText = "Descargar proyecto de este programa" - ToolStripButton4.Text = "Mostrar ventana de progreso" - RefreshViewTSB.Text = "Actualizar vista" - ExpandCollapseTSB.Text = "Expandir" - UpdateLink.Text = "Hay una nueva versión disponible para su descarga e instalación. Haga clic aquí para saber más" - UpdateLink.LinkArea = New LinkArea(65, 29) - ' Pop-up context menus - PkgBasicInfo.Text = "Obtener información básica (todos los paquetes)" - PkgDetailedInfo.Text = "Obtener información detallada (paquete específico)" - CommitAndUnmountTSMI.Text = "Guardar cambios y desmontar imagen" - DiscardAndUnmountTSMI.Text = "Descartar cambios y desmontar imagen" - UnmountSettingsToolStripMenuItem.Text = "Configuración de desmontaje..." - ViewPackageDirectoryToolStripMenuItem.Text = "Ver directorio del paquete" - GetImageFileInformationToolStripMenuItem.Text = "Obtener información del archivo de imagen..." - SaveCompleteImageInformationToolStripMenuItem.Text = "Guardar información completa de la imagen..." - CreateDiscImageWithThisFileToolStripMenuItem.Text = "Crear archivo de disco con este archivo..." - ' OpenFileDialogs and FolderBrowsers - OpenFileDialog1.Title = "Especifique el archivo de proyecto a cargar" - LocalMountDirFBD.Description = "Especifique el directorio de montaje que desea cargar en este proyecto:" - If Not ImgBW.IsBusy And areBackgroundProcessesDone Then - BGProcDetails.Label2.Text = "Los procesos de la imagen han completado" - End If - MenuDesc.Text = "Listo" - ' Tree view context menu - AccessDirectoryToolStripMenuItem.Text = "Acceder directorio" - UnloadProjectToolStripMenuItem1.Text = "Descargar proyecto" - CopyDeploymentToolsToolStripMenuItem.Text = "Copiar herramientas de implementación" - OfAllArchitecturesToolStripMenuItem.Text = "De todas las arquitecturas" - OfSelectedArchitectureToolStripMenuItem.Text = "De la arquitectura seleccionada" - ForX86ArchitectureToolStripMenuItem.Text = "Para arquitectura x86" - ForAmd64ArchitectureToolStripMenuItem.Text = "Para arquitectura AMD64" - ForARMArchitectureToolStripMenuItem.Text = "Para arquitectura ARM" - ForARM64ArchitectureToolStripMenuItem.Text = "Para arquitectura ARM64" - ImageOperationsToolStripMenuItem.Text = "Operaciones de la imagen" - MountImageToolStripMenuItem.Text = "Montar imagen..." - UnmountImageToolStripMenuItem.Text = "Desmontar imagen..." - RemoveVolumeImagesToolStripMenuItem.Text = "Eliminar imágenes de volumen..." - SwitchImageIndexesToolStripMenuItem1.Text = "Cambiar índices de imagen..." - UnattendedAnswerFilesToolStripMenuItem1.Text = "Archivos de respuesta desatendida" - ManageToolStripMenuItem.Text = "Administrar" - CreationWizardToolStripMenuItem.Text = "Crear" - ScratchDirectorySettingsToolStripMenuItem.Text = "Configurar directorio temporal" - ManageReportsToolStripMenuItem.Text = "Administrar informes" - AddToolStripMenuItem.Text = "Añadir" - NewFileToolStripMenuItem.Text = "Nuevo archivo..." - ExistingFileToolStripMenuItem.Text = "Archivo existente..." - SaveResourceToolStripMenuItem.Text = "Guardar recurso..." - CopyToolStripMenuItem.Text = "Copiar recurso" - ' Context menu of AppX addition dialog - MicrosoftAppsToolStripMenuItem.Text = "Visitar el sitio web de Aplicaciones de Microsoft" - MicrosoftStoreGenerationProjectToolStripMenuItem.Text = "Visitar el sitio web del proyecto de generación de Microsoft Store" - AppxDownloadHelpToolStripMenuItem.Text = "¿Cómo puedo obtener aplicaciones?" - ' New design - GreetingLabel.Text = "Le damos la bienvenida a esta sesión de servicio" - LinkLabel12.Text = "PROYECTO" - LinkLabel13.Text = "IMAGEN" - Label54.Text = "Nombre:" - Label51.Text = "Ubicación:" - Label53.Text = "¿Hay imágenes montadas?" - LinkLabel14.Text = "Haga clic aquí para montar una imagen" - Label55.Text = "Tareas del proyecto" - LinkLabel15.Text = "Ver propiedades del proyecto" - LinkLabel16.Text = "Abrir en el Explorador de Archivos" - LinkLabel17.Text = "Descargar proyecto" - Label59.Text = "No se ha montado una imagen" - Label58.Text = "Debe montar una imagen para poder ver su información" - Label57.Text = "Elecciones" - LinkLabel21.Text = "Montar una imagen..." - LinkLabel18.Text = "Escoger una imagen montada..." - Label39.Text = "Índice de la imagen:" - Label43.Text = "Punto de montaje:" - Label45.Text = "Versión:" - Label42.Text = "Nombre:" - Label40.Text = "Descripción:" - Label56.Text = "Tareas de la imagen" - LinkLabel20.Text = "Ver propiedades de la imagen" - LinkLabel19.Text = "Desmontar imagen" - GroupBox4.Text = "Operaciones de la imagen" - Button26.Text = "Montar imagen..." - Button27.Text = "Guardar cambios actuales" - Button28.Text = "Guardar cambios y desmontar imagen" - Button29.Text = "Desmontar imagen descartando cambios" - Button25.Text = "Recargar sesión de servicio" - Button24.Text = "Cambiar índices de la imagen..." - Button30.Text = "Aplicar imagen..." - Button31.Text = "Capturar imagen..." - Button32.Text = "Eliminar imágenes de volumen..." - Button33.Text = "Guardar información completa de la imagen..." - GroupBox5.Text = "Operaciones de paquetes" - Button36.Text = "Añadir paquete..." - Button34.Text = "Obtener información de paquetes..." - Button38.Text = "Guardar información de paquetes instalados..." - Button35.Text = "Eliminar paquete..." - Button37.Text = "Realizar mantenimiento y limpieza del almacén de componentes..." - GroupBox6.Text = "Operaciones de características" - Button41.Text = "Habilitar característica..." - Button39.Text = "Obtener información de características..." - Button42.Text = "Guardar información de características..." - Button40.Text = "Deshabilitar característica..." - GroupBox7.Text = "Operaciones de paquetes AppX" - Button44.Text = "Añadir paquete AppX..." - Button45.Text = "Obtener información de aplicaciones..." - Button46.Text = "Guardar información de paquetes AppX instalados..." - Button43.Text = "Eliminar paquete AppX..." - GroupBox8.Text = "Operaciones de funcionalidades" - Button48.Text = "Añadir funcionalidad..." - Button49.Text = "Obtener información de funcionalidades..." - Button50.Text = "Guardar información de funcionalidades..." - Button47.Text = "Eliminar funcionalidades..." - GroupBox9.Text = "Operaciones de controladores" - Button53.Text = "Añadir controlador..." - Button52.Text = "Obtener información de controladores..." - Button54.Text = "Guardar información de controladores instalados..." - Button51.Text = "Eliminar controlador..." - GroupBox10.Text = "Operaciones de Windows PE" - Button55.Text = "Obtener configuración" - Button56.Text = "Guardar configuración..." - Button57.Text = "Establecer ruta de destino..." - Button58.Text = "Establecer espacio temporal..." - Case 3 - DynaLog.LogMessage("Language code is 3. Switching to French...") - ' Top-level menu items - FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Fichier".ToUpper(), "&Fichier") - ProjectToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Projet".ToUpper(), "&Projet") - CommandsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Com&mandes".ToUpper(), "Com&mandes") - ToolsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Ou&tils".ToUpper(), "Ou&tils") - HelpToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Aide".ToUpper(), "&Aide") - InvalidSettingsTSMI.Text = "Des paramètres non valides ont été détectés" - ' Submenu items - ' Menu - File - NewProjectToolStripMenuItem.Text = "&Nouveau projet..." - OpenExistingProjectToolStripMenuItem.Text = "&Ouvrir un projet existant" - ManageOnlineInstallationToolStripMenuItem.Text = "&Gérer l'installation en ligne" - ManageOfflineInstallationToolStripMenuItem.Text = "Gérer l'installation &hors ligne..." - RecentProjectsListMenu.Text = "Projets récents" - SaveProjectToolStripMenuItem.Text = "&Sauvegarder le projet..." - SaveProjectasToolStripMenuItem.Text = "Sauvegarder le projet so&us..." - ExitToolStripMenuItem.Text = "Sor&tir" - ' Menu - Project - ViewProjectFilesInFileExplorerToolStripMenuItem.Text = "Visualiser les fichiers du projet dans l'explorateur de fichiers" - UnloadProjectToolStripMenuItem.Text = "Décharget le projet..." - SwitchImageIndexesToolStripMenuItem.Text = "Changer d'index de l'image..." - ProjectPropertiesToolStripMenuItem.Text = "Propriétés du projet" - ImagePropertiesToolStripMenuItem.Text = "Propriétés de l'image" - ' Menu - Commands - ImageManagementToolStripMenuItem.Text = "Gestion des images" - OSPackagesToolStripMenuItem.Text = "Paquets de systèmes d'exploitation" - ProvisioningPackagesToolStripMenuItem.Text = "Paquets de provisionnement" - AppPackagesToolStripMenuItem.Text = "Paquets AppX" - AppPatchesToolStripMenuItem.Text = "Maintenance des applications (MSP)" - DefaultAppAssociationsToolStripMenuItem.Text = "Associations d'applications par défaut" - LanguagesAndRegionSettingsToolStripMenuItem.Text = "Langues et paramètres régionaux" - CapabilitiesToolStripMenuItem.Text = "Capacités" - WindowsEditionsToolStripMenuItem.Text = "Éditions Windows" - DriversToolStripMenuItem.Text = "Pilotes" - UnattendedAnswerFilesToolStripMenuItem.Text = "Fichiers de réponse non surveillés" - WindowsPEServicingToolStripMenuItem.Text = "Maintenance de Windows PE" - OSUninstallToolStripMenuItem.Text = "Désinstallation du système d'exploitation" - ReservedStorageToolStripMenuItem.Text = "Stockage réservé" - ' Menu - Commands - Image management - AppendImage.Text = "Ajouter le répertoire de capture à l'image..." - ApplyFFU.Text = "Appliquer le fichier FFU ou SFU..." - ApplyImage.Text = "Appliquer le fichier WIM ou SWM..." - CaptureCustomImage.Text = "Capturer les modifications incrémentales d'un fichier..." - CaptureFFU.Text = "Capturer des partitions dans un fichier FFU..." - CaptureImage.Text = "Capturer l'image d'un lecteur dans un fichier WIM..." - CleanupMountpoints.Text = "Supprimer les resources d'une image corrompue..." - CommitImage.Text = "Appliquer les modifications à l'image..." - DeleteImage.Text = "Supprimer les images de volume du fichier WIM..." - ExportImage.Text = "Exporter l'image..." - GetImageInfo.Text = "Obtenir des informations sur l'image..." - GetWIMBootEntry.Text = "Obtenir les entrées de configuration WIMBoot..." - ListImage.Text = "Lister des fichiers et répertoires dans l'image..." - MountImage.Text = "Monter l'image..." - OptimizeFFU.Text = "Optimiser le fichier FFU..." - OptimizeImage.Text = "Optimiser l'image..." - RemountImage.Text = "Remonter l'image pour la maintenance..." - SplitFFU.Text = "Diviser un fichier FFU en fichiers SFU..." - SplitImage.Text = "Diviser un fichier WIM en fichiers SWM..." - UnmountImage.Text = "Démonter l'image..." - UpdateWIMBootEntry.Text = "Mettre à jour de l'entrée de configuration de WIMBoot..." - ApplySiloedPackage.Text = "Appliquer un package de provisionnement en silo..." - SaveImageInformationToolStripMenuItem.Text = "Sauvegarder les informations de l'image..." - ' Menu - Commands - OS packages - GetPackages.Text = "Obtenir des informations sur le paquet..." - AddPackage.Text = "Ajouter un paquet..." - RemovePackage.Text = "Supprimer le paquet..." - GetFeatures.Text = "Obtenir des informations sur les caractéristiques..." - EnableFeature.Text = "Activer la caractéristique..." - DisableFeature.Text = "Désactiver la caractéristique..." - CleanupImage.Text = "Effectuer des opérations de nettoyage ou de récupération..." - ' Menu - Commands - Provisioning packages - AddProvisioningPackage.Text = "Ajouter un paquet de provisionnement..." - GetProvisioningPackageInfo.Text = "Obtenir des informations sur le paquet de provisionnement..." - ApplyCustomDataImage.Text = "Appliquer une image de données personnalisée..." - ' Menu - Commands - App packages - GetProvisionedAppxPackages.Text = "Obtenir des informations sur les paquets AppX..." - AddProvisionedAppxPackage.Text = "Ajouter les paquets AppX provisionnées..." - RemoveProvisionedAppxPackage.Text = "Supprimer le provisionnement pour les paquets AppX..." - OptimizeProvisionedAppxPackages.Text = "Optimiser les paquets provisionnés..." - SetProvisionedAppxDataFile.Text = "Ajouter un fichier de données personnalisé dans les paquets AppX..." - ' Menu - Commands - App (MSP) servicing - CheckAppPatch.Text = "Obtenir des informations sur les correctifs de l'application..." - GetAppPatchInfo.Text = "Obtenir des informations détaillées sur les correctifs des applications..." - GetAppPatches.Text = "Obtenir des informations basiques sur les correctifs des applications installées..." - GetAppInfo.Text = "Obtenir des informations détaillées sur l'application Windows Installer (*.msi)..." - GetApps.Text = "Obtenir des informations basiques sur l'application Windows Installer (*.msi)..." - ' Menu - Commands - Default app associations - ExportDefaultAppAssociations.Text = "Exporter les associations d'applications par défaut..." - GetDefaultAppAssociations.Text = "Obtenir des informations sur l'association d'applications par défaut..." - ImportDefaultAppAssociations.Text = "Importer les associations d'applications par défaut..." - RemoveDefaultAppAssociations.Text = "Supprimer les associations d'applications par défaut..." - ' Menu - Commands - Languages and regional settings - GetIntl.Text = "Obtenir des paramètres et des langues internationaux..." - SetUILang.Text = "Définir la langue de l'interface utilisateur..." - SetUILangFallback.Text = "Définir la langue par défaut de l'interface utilisateur..." - SetSysUILang.Text = "Définir la langue préférée de l'interface utilisateur du système..." - SetSysLocale.Text = "Définir les paramètres linguistiques du système..." - SetUserLocale.Text = "Définir les paramètres linguistiques de l'utilisateur..." - SetInputLocale.Text = "Définir la langue d'entrée..." - SetAllIntl.Text = "Définir la langue de l'interface utilisateur et les paramètres locaux..." - SetTimeZone.Text = "Définir le fuseau horaire par défaut..." - SetSKUIntlDefaults.Text = "Définir les langues et les locales par défaut..." - SetLayeredDriver.Text = "Régler le pilote en couches..." - GenLangINI.Text = "Générer le fichier Lang.ini..." - SetSetupUILang.Text = "Définir la langue d'installation par défaut..." - ' Menu - Commands - Capabilities - AddCapability.Text = "Ajouter une capacité..." - ExportSource.Text = "Exporter les capacités dans le référentiel..." - GetCapabilities.Text = "Obtenir des informations sur les capacités..." - RemoveCapability.Text = "Supprimer la capacité..." - ' Menu - Commands - Windows editions - GetCurrentEdition.Text = "Obtenir l'édition actuelle..." - GetTargetEditions.Text = "Obtenir des objectifs de mise à niveau..." - SetEdition.Text = "Mettre à jour l'image..." - SetProductKey.Text = "Définir la clé de produit..." - ' Menu - Commands - Drivers - GetDrivers.Text = "Obtenir des informations sur le pilote..." - AddDriver.Text = "Ajouter un pilote..." - RemoveDriver.Text = "Retirer le pilote..." - ExportDriver.Text = "Exporter des paquets de pilotes..." - ImportDriver.Text = "Importer des paquets de pilotes..." - ' Menu - Commands - Unattended answer files - ApplyUnattend.Text = "Appliquer un fichier de réponse non surveillé..." - ' Menu - Commands - Windows PE servicing - GetPESettings.Text = "Obtenir des paramètres..." - SetScratchSpace.Text = "Définir l'espace temporaire..." - SetTargetPath.Text = "Définir le chemin cible..." - ' Menu - Commands - OS uninstall - GetOSUninstallWindow.Text = "Obtenir la créneau de désinstallation..." - InitiateOSUninstall.Text = "Démarrer la désinstallation..." - RemoveOSUninstall.Text = "Supprimer la possibilité de revenir en arrière..." - SetOSUninstallWindow.Text = "Définir la créneau de désinstallation..." - ' Menu - Commands - Reserved storage - SetReservedStorageState.Text = "Définir l'état du stockage réservé..." - GetReservedStorageState.Text = "Obtenir l'état du stockage réservé..." - ' Menu - Commands - Microsoft Edge - AddEdge.Text = "Ajouter Edge..." - AddEdgeBrowser.Text = "Ajouter le navigateur Edge..." - AddEdgeWebView.Text = "Ajouter Edge WebView..." - ' Menu - Tools - ImageConversionToolStripMenuItem.Text = "Conversion des images" - MergeSWM.Text = "Fusionner des fichiers SWM..." - RemountImageWithWritePermissionsToolStripMenuItem.Text = "Remonter l'image avec les droits d'écriture" - CommandShellToolStripMenuItem.Text = "Console de commande" - UnattendedAnswerFileManagerToolStripMenuItem.Text = "Gestionnaire de fichiers de réponse sans surveillance" - UnattendedAnswerFileCreatorToolStripMenuItem.Text = "Créateur de fichiers de réponse sans surveillance" - RegCplToolStripMenuItem.Text = "Gérer les ruches du registre de l'image..." - WebResourcesToolStripMenuItem.Text = "Ressources Web" - LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = "Télécharger les ISO de langues et de fonctionnalités optionnelles..." - LanguagesAndFODWin10ToolStripMenuItem.Text = "Télécharger les langues et les disques FOD pour Windows 10..." - ReportManagerToolStripMenuItem.Text = "Gestionnaire de rapports" - MountedImageManagerTSMI.Text = "Gestionnaire des images montées" - CreateDiscImageToolStripMenuItem.Text = "Créer une image disque..." - CreateTestingEnvironmentToolStripMenuItem.Text = "Créer un environnement de test..." - WimScriptEditorCommand.Text = "Éditeur de listes de configuration" - OptionsToolStripMenuItem.Text = "Paramètres" - ' Menu - Help - HelpTopicsToolStripMenuItem.Text = "Rubriques d'aide" - AboutDISMToolsToolStripMenuItem.Text = "À propos de DISMTools" - ' Menu - Invalid settings - ISFix.Text = "Plus d'informations" - ISHelp.Text = "Qu'est-ce que c'est ?" - ' Menu - DevState - ReportFeedbackToolStripMenuItem.Text = "Rapport de rétroaction (s'ouvre dans un navigateur web)" - ' Menu - Contributions - ContributeToTheHelpSystemToolStripMenuItem.Text = "Contribuer au système d'aide" - ' Menu - Tour Server - TourActionsTSMI.Text = "Actions de visite guidée" - ServerStatusTSMI.Text = String.Format("Le serveur de visite guidée est actif sur le port {0}", tourServer.GetTcpPort()) - RestartDTTourTSMI.Text = "Redémarrer la visite guidée" - StopDTTourServerTSMI.Text = "Arrêter le serveur de visite guidée" - ' Start Panel - LabelHeader1.Text = "Commencer" - Label10.Text = "Projets récents" - NewProjLink.Text = "Nouveau projet..." - ExistingProjLink.Text = "Ouvrir un projet existant..." - OnlineInstMgmt.Text = "Gérer l'installation en ligne" - OfflineInstMgmt.Text = "Gérer l'installation hors ligne..." - RecentRemoveLink.Text = "Supprimer entrée" - ' ToolStrip buttons - ToolStripButton1.Text = "Fermer l'onglet" - ToolStripButton2.Text = "Sauvegarder le projet" - ToolStripButton3.Text = "Décharger le projet" - ToolStripButton3.ToolTipText = "Décharger le projet de ce programme" - ToolStripButton4.Text = "Afficher la fenêtre de progression" - RefreshViewTSB.Text = "Rafraîchir la vue" - ExpandCollapseTSB.Text = "Élargir" - UpdateLink.Text = "Une nouvelle version est disponible pour le téléchargement et l'installation. Cliquez ici pour en savoir plus" - UpdateLink.LinkArea = New LinkArea(78, 31) - ' Pop-up context menus - PkgBasicInfo.Text = "Obtenir des informations basiques (tous les paquets)" - PkgDetailedInfo.Text = "Obtenir des informations détaillées (paquet spécifique)" - CommitAndUnmountTSMI.Text = "Valider les modifications et démonter l'image" - DiscardAndUnmountTSMI.Text = "Annuler les modifications et démonter l'image" - UnmountSettingsToolStripMenuItem.Text = "Configurer les paramètres de démontage......" - ViewPackageDirectoryToolStripMenuItem.Text = "Afficher le répertoire des paquets" - GetImageFileInformationToolStripMenuItem.Text = "Obtenir des informations sur le fichier image..." - SaveCompleteImageInformationToolStripMenuItem.Text = "Enregistrer les informations complètes sur l'image..." - CreateDiscImageWithThisFileToolStripMenuItem.Text = "Créer une image disque avec ce fichier..." - ' OpenFileDialogs and FolderBrowsers - OpenFileDialog1.Title = "Spécifier le fichier de projet à charger" - LocalMountDirFBD.Description = "Veuillez spécifier le répertoire de montage que vous souhaitez charger dans ce projet:" - If Not ImgBW.IsBusy And areBackgroundProcessesDone Then - BGProcDetails.Label2.Text = "Les processus de l'image sont terminés" - End If - MenuDesc.Text = "Prêt" - ' Tree view context menu - AccessDirectoryToolStripMenuItem.Text = "Accéder à ce répertoire" - UnloadProjectToolStripMenuItem1.Text = "Décharger le projet" - CopyDeploymentToolsToolStripMenuItem.Text = "Copier les outils de déploiement" - OfAllArchitecturesToolStripMenuItem.Text = "De toutes les architectures" - OfSelectedArchitectureToolStripMenuItem.Text = "De l'architecture sélectionnée" - ForX86ArchitectureToolStripMenuItem.Text = "Pour l'architecture x86" - ForAmd64ArchitectureToolStripMenuItem.Text = "Pour l'architecture AMD64" - ForARMArchitectureToolStripMenuItem.Text = "Pour l'architecture ARM" - ForARM64ArchitectureToolStripMenuItem.Text = "Pour l'architecture ARM64" - ImageOperationsToolStripMenuItem.Text = "Opérations sur les images" - MountImageToolStripMenuItem.Text = "Monter l'image..." - UnmountImageToolStripMenuItem.Text = "Démonter l'image..." - RemoveVolumeImagesToolStripMenuItem.Text = "Supprimer les images de volume..." - SwitchImageIndexesToolStripMenuItem1.Text = "Changer d'index de l'image..." - UnattendedAnswerFilesToolStripMenuItem1.Text = "Fichiers de réponse non surveillés" - ManageToolStripMenuItem.Text = "Gérer" - CreationWizardToolStripMenuItem.Text = "Créer" - ScratchDirectorySettingsToolStripMenuItem.Text = "Configurer le répertoire temporaire" - ManageReportsToolStripMenuItem.Text = "Gérer les rapports" - AddToolStripMenuItem.Text = "Ajouter" - NewFileToolStripMenuItem.Text = "Nouveau fichier..." - ExistingFileToolStripMenuItem.Text = "Fichier existant..." - ' Context menu of AppX information dialog - SaveResourceToolStripMenuItem.Text = "Sauvegarder les ressources..." - CopyToolStripMenuItem.Text = "Copier la ressource" - ' Context menu of AppX addition dialog - MicrosoftAppsToolStripMenuItem.Text = "Visiter le site web de Microsoft Apps" - MicrosoftStoreGenerationProjectToolStripMenuItem.Text = "Visiter le site web du projet Microsoft Store Generation" - AppxDownloadHelpToolStripMenuItem.Text = "Comment puis-je obtenir des applications ?" - ' New design - GreetingLabel.Text = "Bienvenue à cette session de service" - LinkLabel12.Text = "PROJET" - LinkLabel13.Text = "IMAGE" - Label54.Text = "Nom :" - Label51.Text = "Lieu :" - Label53.Text = "Images montées ?" - LinkLabel14.Text = "Cliquez ici pour monter une image" - Label55.Text = "Tâches du projet" - LinkLabel15.Text = "Voir les propriétés du projet" - LinkLabel16.Text = "Ouvrir dans l'explorateur de fichiers" - LinkLabel17.Text = "Décharger le projet" - Label59.Text = "Aucune image n'a été montée" - Label58.Text = "Vous devez monter une image pour pouvoir consulter ses informations." - Label57.Text = "Choix" - LinkLabel21.Text = "Monter une image..." - LinkLabel18.Text = "Choisir une image montée..." - Label39.Text = "Index de l'image :" - Label43.Text = "Répertoire de montage :" - Label45.Text = "Version :" - Label42.Text = "Nom :" - Label40.Text = "Description :" - Label56.Text = "Tâches de l'image" - LinkLabel20.Text = "Voir les propriétés de l'image" - LinkLabel19.Text = "Démonter l'image" - GroupBox4.Text = "Opérations sur les images" - Button26.Text = "Monter une image..." - Button27.Text = "Sauvegarder les modifications pendants" - Button28.Text = "Sauvegarder modifications et démonter l'image" - Button29.Text = "Démonter l'image en supprimant les modifications" - Button25.Text = "Recharger la session de service" - Button24.Text = "Changer d'index de l'image..." - Button30.Text = "Appliquer l'image..." - Button31.Text = "Capturer image..." - Button32.Text = "Supprimer les images de volume..." - Button33.Text = "Sauvegarder les informations complètes de l'image..." - GroupBox5.Text = "Opérations sur les paquets" - Button36.Text = "Ajouter des paquets..." - Button34.Text = "Obtenir des informations sur le paquet..." - Button38.Text = "Sauvegarder les informations sur les paquets installés..." - Button35.Text = "Supprimer des paquets..." - Button37.Text = "Effectuer la maintenance et le nettoyage du stock de composants..." - GroupBox6.Text = "Opérations sur les caractéristiques" - Button41.Text = "Activer des caractéristiques..." - Button39.Text = "Obtenir des informations sur les caractéristiques..." - Button42.Text = "Sauvegarder les caractéristiques..." - Button40.Text = "Désactiver des caractéristiques..." - GroupBox7.Text = "Opérations sur les paquets AppX" - Button44.Text = "Ajouter des paquets AppX..." - Button45.Text = "Obtenir des informations sur les applications..." - Button46.Text = "Sauvegarder les informations sur les paquets AppX installés..." - Button43.Text = "Supprimer des paquets AppX..." - GroupBox8.Text = "Opérations sur les capacités" - Button48.Text = "Ajouter des capacités..." - Button49.Text = "Obtenir des informations sur les capacités..." - Button50.Text = "Sauvegarder les informations sur les capacités..." - Button47.Text = "Supprimer des capacités..." - GroupBox9.Text = "Opérations sur les pilotes" - Button53.Text = "Ajouter des paquets de pilotes..." - Button52.Text = "Obtenir des informations sur les pilotes..." - Button54.Text = "Sauvegarder les informations sur les pilotes installés..." - Button51.Text = "Supprimer des pilotes..." - GroupBox10.Text = "Opérations de Windows PE" - Button55.Text = "Obtenir des paramètres..." - Button56.Text = "Sauvegarder les paramètres..." - Button57.Text = "Configurer le chemin d'accès..." - Button58.Text = "Configurer l'espace temporaire..." - Case 4 - DynaLog.LogMessage("Language code is 4. Switching to Portuguese...") - ' Top-level menu items - FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Ficheiro".ToUpper(), "&Ficheiro") - ProjectToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Projeto".ToUpper(), "&Projeto") - CommandsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Co&mandos".ToUpper(), "Co&mandos") - ToolsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Ferramentas".ToUpper(), "&Ferramentas") - HelpToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Ajuda".ToUpper(), "&Ajuda") - InvalidSettingsTSMI.Text = "Foram detectadas configurações inválidas" - ' Submenu items - ' Menu - File - NewProjectToolStripMenuItem.Text = "&Novo projeto..." - OpenExistingProjectToolStripMenuItem.Text = "&Abrir projeto existente" - ManageOnlineInstallationToolStripMenuItem.Text = "&Gerir a instalação em linha" - ManageOfflineInstallationToolStripMenuItem.Text = "Gerir a instalação o&ffline..." - RecentProjectsListMenu.Text = "Projectos recentes" - SaveProjectToolStripMenuItem.Text = "&Guardar projeto..." - SaveProjectasToolStripMenuItem.Text = "Save project &como..." - ExitToolStripMenuItem.Text = "Sa&ir" - ' Menu - Project - ViewProjectFilesInFileExplorerToolStripMenuItem.Text = "Ver ficheiros de projeto no Explorador de Ficheiros" - UnloadProjectToolStripMenuItem.Text = "Descarregar o projeto..." - SwitchImageIndexesToolStripMenuItem.Text = "Alternar os índices de imagem..." - ProjectPropertiesToolStripMenuItem.Text = "Propriedades do projeto" - ImagePropertiesToolStripMenuItem.Text = "Propriedades da imagem" - ' Menu - Commands - ImageManagementToolStripMenuItem.Text = "Gestão de imagens" - OSPackagesToolStripMenuItem.Text = "Pacotes do sistema operativo" - ProvisioningPackagesToolStripMenuItem.Text = "Pacotes de provisionamento" - AppPackagesToolStripMenuItem.Text = "Pacotes AppX" - AppPatchesToolStripMenuItem.Text = "Serviço de aplicações (MSP)" - DefaultAppAssociationsToolStripMenuItem.Text = "Associações de aplicações predefinidas" - LanguagesAndRegionSettingsToolStripMenuItem.Text = "Línguas e definições regionais" - CapabilitiesToolStripMenuItem.Text = "Capacidades" - WindowsEditionsToolStripMenuItem.Text = "Edições do Windows" - DriversToolStripMenuItem.Text = "Controladores de dispositivos" - UnattendedAnswerFilesToolStripMenuItem.Text = "Ficheiros de resposta não assistidos" - WindowsPEServicingToolStripMenuItem.Text = "Manutenção do Windows PE" - OSUninstallToolStripMenuItem.Text = "Desinstalação do sistema operativo" - ReservedStorageToolStripMenuItem.Text = "Armazenamento reservado" - ' Menu - Commands - Image management - AppendImage.Text = "Anexar o diretório de captura à imagem..." - ApplyFFU.Text = "Aplicar o ficheiro FFU ou SFU..." - ApplyImage.Text = "Aplicar ficheiro WIM ou SWM..." - CaptureCustomImage.Text = "Capturar alterações incrementais no ficheiro..." - CaptureFFU.Text = "Capturar partições para o ficheiro FFU..." - CaptureImage.Text = "Capturar imagem de uma unidade para um ficheiro WIM..." - CleanupMountpoints.Text = "Eliminar recursos de uma imagem corrompida..." - CommitImage.Text = "Aplicar alterações à imagem..." - DeleteImage.Text = "Eliminar imagens de volume do ficheiro WIM..." - ExportImage.Text = "Exportar imagem..." - GetImageInfo.Text = "Obter informações sobre a imagem..." - GetWIMBootEntry.Text = "Obter entradas de configuração do WIMBoot..." - ListImage.Text = "Listar ficheiros e directórios na imagem..." - MountImage.Text = "Montar imagem..." - OptimizeFFU.Text = "Otimizar ficheiro FFU..." - OptimizeImage.Text = "Otimizar imagem..." - RemountImage.Text = "Remontar imagem para manutenção..." - SplitFFU.Text = "Dividir o arquivo FFU em arquivos SFU..." - SplitImage.Text = "Dividir ficheiro WIM em ficheiros SWM..." - UnmountImage.Text = "Desmontar imagem..." - UpdateWIMBootEntry.Text = "Atualizar a entrada de configuração WIMBoot..." - ApplySiloedPackage.Text = "Aplicar pacote de provisionamento em silo..." - ' Menu - Commands - OS packages - GetPackages.Text = "Obter informações sobre os pacotes..." - AddPackage.Text = "Adicionar pacotes..." - RemovePackage.Text = "Remove package..." - GetFeatures.Text = "Obter informações sobre as características..." - EnableFeature.Text = "Ativar características..." - DisableFeature.Text = "Desativar funcionalidades..." - CleanupImage.Text = "Efetuar operações de limpeza ou de recuperação..." - SaveImageInformationToolStripMenuItem.Text = "Guardar informações da imagem..." - ' Menu - Commands - Provisioning packages - AddProvisioningPackage.Text = "Adicionar pacote de aprovisionamento..." - GetProvisioningPackageInfo.Text = "Obter informações sobre o pacote de aprovisionamento..." - ApplyCustomDataImage.Text = "Aplicar imagens de dados personalizadas..." - ' Menu - Commands - App packages - GetProvisionedAppxPackages.Text = "Obter informações sobre o pacote AppX..." - AddProvisionedAppxPackage.Text = "Adicionar pacote AppX provisionado..." - RemoveProvisionedAppxPackage.Text = "Remover o aprovisionamento do pacote AppX..." - OptimizeProvisionedAppxPackages.Text = "Otimizar os pacotes provisionados..." - SetProvisionedAppxDataFile.Text = "Adicionar ficheiro de dados personalizado ao pacote AppX..." - ' Menu - Commands - App (MSP) servicing - CheckAppPatch.Text = "Obter informações sobre patches de aplicações..." - GetAppPatchInfo.Text = "Obter informações detalhadas sobre patches de aplicações..." - GetAppPatches.Text = "Obter informações básicas sobre patches de aplicações instaladas..." - GetAppInfo.Text = "Obter informações detalhadas sobre a aplicação Windows Installer (*.msi)..." - GetApps.Text = "Obter informações básicas sobre a aplicação Windows Installer (*.msi)..." - ' Menu - Commands - Default app associations - ExportDefaultAppAssociations.Text = "Exportar associações de aplicações predefinidas..." - GetDefaultAppAssociations.Text = "Obter informações de associação de aplicações predefinidas..." - ImportDefaultAppAssociations.Text = "Importar associações de aplicações predefinidas..." - RemoveDefaultAppAssociations.Text = "Remover associações de aplicações predefinidas..." - ' Menu - Commands - Languages and regional settings - GetIntl.Text = "Obter definições e línguas internacionais..." - SetUILang.Text = "Definir o idioma da IU..." - SetUILangFallback.Text = "Definir o idioma de recurso predefinido da IU..." - SetSysUILang.Text = "Definir o idioma preferido da IU do sistema..." - SetSysLocale.Text = "Definir a localidade do sistema..." - SetUserLocale.Text = "Definir a localidade do utilizador..." - SetInputLocale.Text = "Definir localidade de entrada..." - SetAllIntl.Text = "Definir o idioma e as localidades da IU..." - SetTimeZone.Text = "Definir o fuso horário predefinido..." - SetSKUIntlDefaults.Text = "Definir idiomas e localidades predefinidos..." - SetLayeredDriver.Text = "Definir driver em camadas..." - GenLangINI.Text = "Gerar ficheiro Lang.ini..." - SetSetupUILang.Text = "Definir idioma de configuração padrão..." - ' Menu - Commands - Capabilities - AddCapability.Text = "Adicionar capacidade..." - ExportSource.Text = "Exportar capacidades para o repositório..." - GetCapabilities.Text = "Obter informações sobre a capacidade..." - RemoveCapability.Text = "Remover capacidade..." - ' Menu - Commands - Windows editions - GetCurrentEdition.Text = "Obter a edição atual..." - GetTargetEditions.Text = "Obter objectivos de atualização..." - SetEdition.Text = "Atualizar a imagem..." - SetProductKey.Text = "Definir a chave do produto..." - ' Menu - Commands - Drivers - GetDrivers.Text = "Obter informações sobre o controlador..." - AddDriver.Text = "Adicionar controlador..." - RemoveDriver.Text = "Remover controlador..." - ExportDriver.Text = "Exportar pacotes de controladores..." - ImportDriver.Text = "Importar pacotes de controladores..." - ' Menu - Commands - Unattended answer files - ApplyUnattend.Text = "Aplicar ficheiro de resposta não assistida..." - ' Menu - Commands - Windows PE servicing - GetPESettings.Text = "Obter definições..." - SetScratchSpace.Text = "Definir espaço de temporário..." - SetTargetPath.Text = "Definir caminho de destino..." - ' Menu - Commands - OS uninstall - GetOSUninstallWindow.Text = "Obter janela de desinstalação..." - InitiateOSUninstall.Text = "Iniciar a desinstalação..." - RemoveOSUninstall.Text = "Remover a capacidade de reversão..." - SetOSUninstallWindow.Text = "Definir janela de desinstalação..." - ' Menu - Commands - Reserved storage - SetReservedStorageState.Text = "Definir estado de armazenamento reservado..." - GetReservedStorageState.Text = "Obter estado de armazenamento reservado..." - ' Menu - Commands - Microsoft Edge - AddEdge.Text = "Adicionar Edge..." - AddEdgeBrowser.Text = "Adicionar navegador do Edge..." - AddEdgeWebView.Text = "Adicionar Edge WebView..." - ' Menu - Tools - ImageConversionToolStripMenuItem.Text = "Conversão de imagens" - MergeSWM.Text = "Fundir ficheiros SWM..." - RemountImageWithWritePermissionsToolStripMenuItem.Text = "Remontar imagem com permissões de escrita" - CommandShellToolStripMenuItem.Text = "Consola de comandos" - UnattendedAnswerFileManagerToolStripMenuItem.Text = "Gestor de ficheiros de resposta não assistida" - UnattendedAnswerFileCreatorToolStripMenuItem.Text = "Criador de ficheiros de resposta não assistida" - RegCplToolStripMenuItem.Text = "Gerir as colmeias do registo de imagens..." - WebResourcesToolStripMenuItem.Text = "Recursos da Web" - LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = " Descarregar ISOs de idiomas e caraterísticas opcionais..." - LanguagesAndFODWin10ToolStripMenuItem.Text = "Descarregar discos de idiomas e FOD para o Windows 10..." - ReportManagerToolStripMenuItem.Text = "Gestor de relatórios" - MountedImageManagerTSMI.Text = "Gestor de imagens montadas" - CreateDiscImageToolStripMenuItem.Text = "Criar imagem de disco..." - CreateTestingEnvironmentToolStripMenuItem.Text = "Criar um ambiente de teste..." - WimScriptEditorCommand.Text = "Editor de listas de configuração" - OptionsToolStripMenuItem.Text = "Opções" - ' Menu - Help - HelpTopicsToolStripMenuItem.Text = "Tópicos de Ajuda" - AboutDISMToolsToolStripMenuItem.Text = "Acerca do DISMTools" - ' Menu - Invalid settings - ISFix.Text = "Mais informações" - ISHelp.Text = "O que é isto?" - ' Menu - DevState - ReportFeedbackToolStripMenuItem.Text = "Comunicar comentários (abre no navegador Web)" - ' Menu - Contributions - ContributeToTheHelpSystemToolStripMenuItem.Text = "Contribuir para o sistema de ajuda" - ' Menu - Tour Server - TourActionsTSMI.Text = "Ações do Tour" - ServerStatusTSMI.Text = String.Format("O servidor de tour está ativo na porta {0}", tourServer.GetTcpPort()) - RestartDTTourTSMI.Text = "Reiniciar Tour" - StopDTTourServerTSMI.Text = "Parar Servidor de Tour" - ' Start Panel - LabelHeader1.Text = "Início" - Label10.Text = "Projectos recentes" - NewProjLink.Text = "Novo projeto..." - ExistingProjLink.Text = "Abrir projeto existente..." - OnlineInstMgmt.Text = "Gerir a instalação online" - OfflineInstMgmt.Text = "Gerir a instalação offline..." - ' ToolStrip buttons - ToolStripButton1.Text = "Fechar separador" - ToolStripButton2.Text = "Guardar projeto" - ToolStripButton3.Text = "Descarregar projeto" - ToolStripButton3.ToolTipText = "Descarregar projeto a partir deste programa" - ToolStripButton4.Text = "Mostrar janela de progresso" - RefreshViewTSB.Text = "Atualizar vista" - ExpandCollapseTSB.Text = "Expandir" - UpdateLink.Text = "Está disponível uma nova versão para transferência e instalação. Clique aqui para saber mais" - UpdateLink.LinkArea = New LinkArea(65, 27) - ' Pop-up context menus - PkgBasicInfo.Text = "Obter informações básicas (todos os pacotes)" - PkgDetailedInfo.Text = "Obter informações detalhadas (pacote específico)" - CommitAndUnmountTSMI.Text = "Confirmar alterações e desmontar imagem" - DiscardAndUnmountTSMI.Text = "Descartar alterações e desmontar a imagem" - UnmountSettingsToolStripMenuItem.Text = "Desmontar definições..." - ViewPackageDirectoryToolStripMenuItem.Text = "Ver diretório de pacotes" - GetImageFileInformationToolStripMenuItem.Text = "Obter informações sobre o ficheiro de imagem..." - SaveCompleteImageInformationToolStripMenuItem.Text = "Guardar informações completas sobre a imagem..." - CreateDiscImageWithThisFileToolStripMenuItem.Text = "Criar imagem de disco com este ficheiro..." - ' OpenFileDialogs and FolderBrowsers - OpenFileDialog1.Title = "Especifique o ficheiro de projeto a carregar" - LocalMountDirFBD.Description = "Especifique o diretório de montagem que pretende carregar para este projeto:" - If Not ImgBW.IsBusy And areBackgroundProcessesDone Then - BGProcDetails.Label2.Text = "Os processos de imagem foram concluídos" - End If - MenuDesc.Text = "Pronto" - ' Tree view context menu - AccessDirectoryToolStripMenuItem.Text = "Aceder ao diretório" - UnloadProjectToolStripMenuItem1.Text = "Descarregar projeto" - CopyDeploymentToolsToolStripMenuItem.Text = "Copiar ferramentas de implementação" - OfAllArchitecturesToolStripMenuItem.Text = "De todas as arquitecturas" - OfSelectedArchitectureToolStripMenuItem.Text = "Da arquitetura selecionada" - ForX86ArchitectureToolStripMenuItem.Text = "Para a arquitetura x86" - ForAmd64ArchitectureToolStripMenuItem.Text = "Para a arquitetura AMD64" - ForARMArchitectureToolStripMenuItem.Text = "Para a arquitetura ARM" - ForARM64ArchitectureToolStripMenuItem.Text = "Para a arquitetura ARM64" - ImageOperationsToolStripMenuItem.Text = "Operações de imagem" - MountImageToolStripMenuItem.Text = "Montar imagem..." - UnmountImageToolStripMenuItem.Text = "Desmontar imagem..." - RemoveVolumeImagesToolStripMenuItem.Text = "Remover imagens de volume..." - SwitchImageIndexesToolStripMenuItem1.Text = "Mudar os índices de imagem..." - UnattendedAnswerFilesToolStripMenuItem1.Text = "Ficheiros de resposta não assistidos" - ManageToolStripMenuItem.Text = "Gerir" - CreationWizardToolStripMenuItem.Text = "Criar" - ScratchDirectorySettingsToolStripMenuItem.Text = "Configurar o diretório de temporário" - ManageReportsToolStripMenuItem.Text = "Gerir relatórios" - AddToolStripMenuItem.Text = "Adicionar" - NewFileToolStripMenuItem.Text = "Novo ficheiro..." - ExistingFileToolStripMenuItem.Text = "Ficheiro existente..." - ' Context menu of AppX information dialog - SaveResourceToolStripMenuItem.Text = "Guardar recurso..." - CopyToolStripMenuItem.Text = "Copiar recurso" - ' Context menu of AppX addition dialog - MicrosoftAppsToolStripMenuItem.Text = "Visite o sítio Web das Aplicações Microsoft" - MicrosoftStoreGenerationProjectToolStripMenuItem.Text = "Visite o Web site do Projeto de Geração da Microsoft Store" - AppxDownloadHelpToolStripMenuItem.Text = "Como é que obtenho aplicações?" - ' New design - GreetingLabel.Text = "Bem-vindo a esta sessão de manutenção" - LinkLabel12.Text = "PROJECTO" - LinkLabel13.Text = "IMAGEM" - Label54.Text = "Nome:" - Label51.Text = "Localização:" - Label53.Text = "Imagens montadas?" - LinkLabel14.Text = "Clique aqui para montar uma imagem" - Label55.Text = "Tarefas do projeto" - LinkLabel15.Text = "Ver propriedades do projeto" - LinkLabel16.Text = "Abrir no Explorador de Ficheiros" - LinkLabel17.Text = "Descarregar projeto" - Label59.Text = "Não foi montada nenhuma imagem" - Label58.Text = "É necessário montar uma imagem para ver a sua informação" - Label57.Text = "Escolhas" - LinkLabel21.Text = "Montar uma imagem..." - LinkLabel18.Text = "Escolher uma imagem montada..." - Label39.Text = "Índice da imagem:" - Label43.Text = "Ponto de montagem:" - Label45.Text = "Versão:" - Label42.Text = "Nome:" - Label40.Text = "Descrição:" - Label56.Text = "Tarefas de imagem" - LinkLabel20.Text = "Ver propriedades da imagem" - LinkLabel19.Text = "Desmontar imagem" - GroupBox4.Text = "Operações de imagem" - Button26.Text = "Montar imagem..." - Button27.Text = "Confirmar alterações actuais" - Button28.Text = "Confirmar e desmontar a imagem" - Button29.Text = "Desmontar imagem, descartando alterações" - Button25.Text = "Recarregar sessão de manutenção" - Button24.Text = "Mudar os índices de imagem..." - Button30.Text = "Aplicar imagem..." - Button31.Text = "Capturar imagem..." - Button32.Text = "Remover imagens de volume..." - Button33.Text = "Guardar informações completas da imagem..." - GroupBox5.Text = "Operações do pacote" - Button36.Text = "Adicionar pacote..." - Button34.Text = "Obter informações sobre o pacote..." - Button38.Text = "Guardar informações do pacote instalado..." - Button35.Text = "Remover pacote..." - Button37.Text = "Executar manutenção e limpeza do arquivo de componentes..." - GroupBox6.Text = "Operações de funcionalidades" - Button41.Text = "Ativar caraterística..." - Button39.Text = "Obter informações sobre a caraterística..." - Button42.Text = "Guardar informação da caraterística..." - Button40.Text = "Desativar caraterística..." - GroupBox7.Text = "Operações do pacote AppX" - Button44.Text = "Adicionar pacote AppX..." - Button45.Text = "Obter informações sobre a aplicação..." - Button46.Text = "Guardar informações do pacote AppX instalado..." - Button43.Text = "Remover pacote AppX..." - GroupBox8.Text = "Operações de capacidade" - Button48.Text = "Adicionar capacidade..." - Button49.Text = "Obter informações de capacidade..." - Button50.Text = "Guardar informações de capacidade..." - Button47.Text = "Remover capacidade..." - GroupBox9.Text = "Operações do controlador" - Button53.Text = "Adicionar pacote de controlador..." - Button52.Text = "Obter informações do controlador..." - Button54.Text = "Guardar informações do controlador instalado..." - Button51.Text = "Remover controlador..." - GroupBox10.Text = "Operações do Windows PE" - Button55.Text = "Obter configuração" - Button56.Text = "Guardar configuração..." - Button57.Text = "Definir caminho de destino..." - Button58.Text = "Definir espaço temporário..." - Case 5 - DynaLog.LogMessage("Language code is 5. Switching to Italian...") - ' Top-level menu items - FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&File".ToUpper(), "&File") - ProjectToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Progetto".ToUpper(), "&Progetto") - CommandsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "Com&andi".ToUpper(), "Com&andi") - ToolsToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Strumenti".ToUpper(), "&Strumenti") - HelpToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Aiuto".ToUpper(), "&Aiuto") - InvalidSettingsTSMI.Text = "Sono state rilevate impostazioni non valide" - ' Submenu items - ' Menu - File - NewProjectToolStripMenuItem.Text = "&Nuovo progetto..." - OpenExistingProjectToolStripMenuItem.Text = "&Apri progetto esistente" - ManageOnlineInstallationToolStripMenuItem.Text = "&Gestisci installazione online..." - ManageOfflineInstallationToolStripMenuItem.Text = "Gestisci installazione &offline..." - RecentProjectsListMenu.Text = "Progetti recenti" - SaveProjectToolStripMenuItem.Text = "&Salva progetto..." - SaveProjectasToolStripMenuItem.Text = "Salva progetto &come..." - ExitToolStripMenuItem.Text = "E&sci" - ' Menu - Project - ViewProjectFilesInFileExplorerToolStripMenuItem.Text = "Visualizza i file del progetto in Esplora file" - UnloadProjectToolStripMenuItem.Text = "Scarica il progetto..." - SwitchImageIndexesToolStripMenuItem.Text = "Cambia gli indici delle immagini..." - ProjectPropertiesToolStripMenuItem.Text = "Proprietà del progetto" - ImagePropertiesToolStripMenuItem.Text = "Proprietà dell'immagine" - ' Menu - Commands - ImageManagementToolStripMenuItem.Text = "Gestione delle immagini" - OSPackagesToolStripMenuItem.Text = "Pacchetti OS" - ProvisioningPackagesToolStripMenuItem.Text = "Pacchetti di provisioning" - AppPackagesToolStripMenuItem.Text = "Pacchetti AppX" - AppPatchesToolStripMenuItem.Text = "Assistenza per le app (MSP)" - DefaultAppAssociationsToolStripMenuItem.Text = "Associazioni app predefinite" - LanguagesAndRegionSettingsToolStripMenuItem.Text = "Lingue e impostazioni regionali" - CapabilitiesToolStripMenuItem.Text = "Capacità" - WindowsEditionsToolStripMenuItem.Text = "Edizioni di Windows" - DriversToolStripMenuItem.Text = "Driver" - UnattendedAnswerFilesToolStripMenuItem.Text = "File di risposte non presidiati" - WindowsPEServicingToolStripMenuItem.Text = "Assistenza Windows PE" - OSUninstallToolStripMenuItem.Text = "Disinstallazione del sistema operativo" - ReservedStorageToolStripMenuItem.Text = "Archiviazione riservata" - ' Menu - Commands - Image management - AppendImage.Text = "Applica la directory di acquisizione all'immagine..." - ApplyFFU.Text = "Applicare file FFU o SFU..." - ApplyImage.Text = "Applica file WIM o SWM..." - CaptureCustomImage.Text = "Cattura modifiche incrementali al file..." - CaptureFFU.Text = "Cattura partizioni nel file FFU..." - CaptureImage.Text = "Cattura l'immagine di un'unità in un file WIM..." - CleanupMountpoints.Text = "Elimina le risorse dall'immagine danneggiata..." - CommitImage.Text = "Applica le modifiche all'immagine..." - DeleteImage.Text = "Cancellare le immagini del volume dal file WIM..." - ExportImage.Text = "Esportazione dell'immagine..." - GetImageInfo.Text = "Verifica informazioni immagine..." - GetWIMBootEntry.Text = "Verifica voci configurazione WIMBoot..." - ListImage.Text = "Elenca file e cartelle nell'immagine..." - MountImage.Text = "Monta immagine..." - OptimizeFFU.Text = "Ottimizzare il file FFU..." - OptimizeImage.Text = "Ottimizzare l'immagine..." - RemountImage.Text = "Rimonta l'immagine per la manutenzione..." - SplitFFU.Text = "Dividere il file FFU in file SFU..." - SplitImage.Text = "Dividere il file WIM in file SWM..." - UnmountImage.Text = "Smontare l'immagine..." - UpdateWIMBootEntry.Text = "Aggiornare la voce di configurazione di WIMBoot..." - ApplySiloedPackage.Text = "Applica il pacchetto di provisioning a silo..." - ' Menu - Commands - OS packages - GetPackages.Text = "Verifica informazioni pacchetti..." - AddPackage.Text = "Aggiungi pacchetto..." - RemovePackage.Text = "Rimuovi pacchetto..." - GetFeatures.Text = "Verifica informazioni funzionalità..." - EnableFeature.Text = "Abilita funzionalità..." - DisableFeature.Text = "Disabilita la funzionalità..." - CleanupImage.Text = "Eseguire operazioni di pulizia o ripristino..." - SaveImageInformationToolStripMenuItem.Text = "Salva informazioni sull'immagine..." - ' Menu - Commands - Provisioning packages - AddProvisioningPackage.Text = "Aggiungi pacchetto di provisioning..." - GetProvisioningPackageInfo.Text = "Verifica informazioni pacchetto provisioning..." - ApplyCustomDataImage.Text = "Applica immagine dati personalizzata..." - ' Menu - Commands - App packages - GetProvisionedAppxPackages.Text = "Verifica informazioni pacchetto AppX..." - AddProvisionedAppxPackage.Text = "Aggiungi pacchetto AppX in provisioning..." - RemoveProvisionedAppxPackage.Text = "Rimuovere il provisioning del pacchetto AppX..." - OptimizeProvisionedAppxPackages.Text = "Ottimizzare i pacchetti in provisioning..." - SetProvisionedAppxDataFile.Text = "Aggiungere un file di dati personalizzato al pacchetto AppX..." - ' Menu - Commands - App (MSP) servicing - CheckAppPatch.Text = "Verifica informazioni patch applicazione..." - GetAppPatchInfo.Text = "Verifica informazioni dettagliate patch applicazione..." - GetAppPatches.Text = "Verifica informazioni di base patch applicazioni installate..." - GetAppInfo.Text = "Verifica informazioni dettagliate applicazione Windows Installer (*.msi)..." - GetApps.Text = "Verifica informazioni di base applicazione Windows Installer (*.msi)..." - ' Menu - Commands - Default app associations - ExportDefaultAppAssociations.Text = "Esporta associazioni predefinite applicazioni..." - GetDefaultAppAssociations.Text = "Verifica informazioni associazioni predefinite delle applicazioni..." - ImportDefaultAppAssociations.Text = "Importa associazioni predefinite applicazioni..." - RemoveDefaultAppAssociations.Text = "Rimuovi associazioni predefinite applicazioni..." - ' Menu - Commands - Languages and regional settings - GetIntl.Text = "Verifica impostazioni e lingue internazionali..." - SetUILang.Text = "Imposta lingua interfaccia utente..." - SetUILangFallback.Text = "Imposta lingua di fallback predefinita interfaccia utente..." - SetSysUILang.Text = "Imposta lingua interfaccia utente preferita dal sistema..." - SetSysLocale.Text = "Imposta il locale del sistema..." - SetUserLocale.Text = "Imposta il locale dell'utente..." - SetInputLocale.Text = "Imposta il locale di input..." - SetAllIntl.Text = "Imposta la lingua e i locali dell'interfaccia utente..." - SetTimeZone.Text = "Imposta il fuso orario predefinito..." - SetSKUIntlDefaults.Text = "Imposta le lingue e i locali predefiniti..." - SetLayeredDriver.Text = "Imposta driver a strati..." - GenLangINI.Text = "Generare il file Lang.ini..." - SetSetupUILang.Text = "Imposta la lingua predefinita del programma di installazione..." - ' Menu - Commands - Capabilities - AddCapability.Text = "Aggiungi capacità..." - ExportSource.Text = "Esportazione capacità nel repository..." - GetCapabilities.Text = "Verifica informazioni capacità..." - RemoveCapability.Text = "Rimuovi capacità..." - ' Menu - Commands - Windows editions - GetCurrentEdition.Text = "Verifica edizione attuale..." - GetTargetEditions.Text = "Verifica obiettivi aggiornamento..." - SetEdition.Text = "Aggiorna immagine..." - SetProductKey.Text = "Imposta chiave prodotto..." - ' Menu - Commands - Drivers - GetDrivers.Text = "Verifica informazioni driver..." - AddDriver.Text = "Aggiungi driver..." - RemoveDriver.Text = "Rimuovi driver..." - ExportDriver.Text = "Esporta i pacchetti di driver..." - ImportDriver.Text = "Importa pacchetti di driver..." - ' Menu - Commands - Unattended answer files - ApplyUnattend.Text = "Applica il file di risposta non presidiato..." - ' Menu - Commands - Windows PE servicing - GetPESettings.Text = "Verifica impostazioni..." - SetScratchSpace.Text = "Imposta spazio per lo scratch..." - SetTargetPath.Text = "Imposta percorso destinazione..." - ' Menu - Commands - OS uninstall - GetOSUninstallWindow.Text = "Verifica finestra disinstallazione..." - InitiateOSUninstall.Text = "Avvia disinstallazione..." - RemoveOSUninstall.Text = "Rimuovi opzione fallback..." - SetOSUninstallWindow.Text = "Imposta finestra di disinstallazione..." - ' Menu - Commands - Reserved storage - SetReservedStorageState.Text = "Imposta stato archiviazione riservato..." - GetReservedStorageState.Text = "Verifica stato archiviazione riservato..." - ' Menu - Commands - Microsoft Edge - AddEdge.Text = "Aggiungi Edge..." - AddEdgeBrowser.Text = "Aggiungi browser Edge..." - AddEdgeWebView.Text = "Aggiungi WebView Edge..." - ' Menu - Tools - ImageConversionToolStripMenuItem.Text = "Conversione di immagini" - MergeSWM.Text = "Unire i file SWM..." - RemountImageWithWritePermissionsToolStripMenuItem.Text = "Rimonta l'immagine con i permessi di scrittura" - CommandShellToolStripMenuItem.Text = "Console dei comandi" - UnattendedAnswerFileManagerToolStripMenuItem.Text = "Gestore file di risposta non presidiata" - UnattendedAnswerFileCreatorToolStripMenuItem.Text = "Creatore file di risposta non presidiata" - RegCplToolStripMenuItem.Text = "Gestire gli alveari del registro delle immagini..." - WebResourcesToolStripMenuItem.Text = "Risorse Web" - LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = "Scarica le ISO delle lingue e delle funzionalità opzionali..." - LanguagesAndFODWin10ToolStripMenuItem.Text = "Scarica le lingue e i dischi FOD per Windows 10..." - ReportManagerToolStripMenuItem.Text = "Gestore dei rapporti" - MountedImageManagerTSMI.Text = "Gestore di immagini montate" - CreateDiscImageToolStripMenuItem.Text = "Crea immagine disco..." - CreateTestingEnvironmentToolStripMenuItem.Text = "Creare un ambiente di test..." - WimScriptEditorCommand.Text = "Editor dell'elenco di configurazione" - OptionsToolStripMenuItem.Text = "Opzioni" - ' Menu - Help - HelpTopicsToolStripMenuItem.Text = "Argomenti di aiuto" - AboutDISMToolsToolStripMenuItem.Text = "Informazioni su DISMTools" - ' Menu - Tour Server - TourActionsTSMI.Text = "Azioni tour" - ServerStatusTSMI.Text = String.Format("Il server tour è attivo sulla porta {0}", tourServer.GetTcpPort()) - RestartDTTourTSMI.Text = "Riavvia tour" - StopDTTourServerTSMI.Text = "Interrompi server tour" - ' Menu - Invalid settings - ISFix.Text = "Ulteriori informazioni" - ISHelp.Text = "Che cos'è questo?" - ' Menu - DevState - ReportFeedbackToolStripMenuItem.Text = "Segnala feedback (si apre nel browser web)" - ' Menu - Contributions - ContributeToTheHelpSystemToolStripMenuItem.Text = "Contribuisci al sistema di assistenza" - ' Start Panel - LabelHeader1.Text = "Iniziare" - Label10.Text = "Progetti recenti" - NewProjLink.Text = "Nuovo progetto..." - ExistingProjLink.Text = "Aprire progetto esistente..." - OnlineInstMgmt.Text = "Gestione dell'installazione online" - OfflineInstMgmt.Text = "Gestione dell'installazione offline..." - RecentRemoveLink.Text = "Rimuovi elemento" - ' ToolStrip buttons - ToolStripButton1.Text = "Chiudi la scheda" - ToolStripButton2.Text = "Salva il progetto" - ToolStripButton3.Text = "Scarica il progetto" - ToolStripButton3.ToolTipText = "Scarica il progetto da questo programma" - ToolStripButton4.Text = "Mostra la finestra di avanzamento" - RefreshViewTSB.Text = "Aggiorna vista" - ExpandCollapseTSB.Text = "Espandi" - UpdateLink.Text = "È disponibile una nuova versione da scaricare e installare. Fare clic qui per saperne di più" - UpdateLink.LinkArea = New LinkArea(60, 32) - ' Pop-up context menus - PkgBasicInfo.Text = "Verifica informazioni elementari (tutti i pacchetti)" - PkgDetailedInfo.Text = "Verifica informazioni dettagliate (pacchetto specifico)" - CommitAndUnmountTSMI.Text = "Applica le modifiche e smonta l'immagine" - DiscardAndUnmountTSMI.Text = "Scarta le modifiche e smonta l'immagine" - UnmountSettingsToolStripMenuItem.Text = "Smontare le impostazioni..." - ViewPackageDirectoryToolStripMenuItem.Text = "Visualizza la directory dei pacchetti" - GetImageFileInformationToolStripMenuItem.Text = "Verifica informazioni immagine..." - SaveCompleteImageInformationToolStripMenuItem.Text = "Salva informazioni complete sull'immagine..." - CreateDiscImageWithThisFileToolStripMenuItem.Text = "Crea l'immagine del disco con questo file..." - ' OpenFileDialogs and FolderBrowsers - OpenFileDialog1.Title = "Specificare il file del progetto da caricare" - LocalMountDirFBD.Description = "Specificare la directory di montaggio che si desidera caricare in questo progetto:" - If Not ImgBW.IsBusy And areBackgroundProcessesDone Then - BGProcDetails.Label2.Text = "I processi dell'immagine sono stati completati" - End If - MenuDesc.Text = "Pronto" - ' Tree view context menu - AccessDirectoryToolStripMenuItem.Text = "Accesso alla directory" - UnloadProjectToolStripMenuItem1.Text = "Scarica il progetto" - CopyDeploymentToolsToolStripMenuItem.Text = "Copia strumenti distribuzione" - OfAllArchitecturesToolStripMenuItem.Text = "Di tutte le architetture" - OfSelectedArchitectureToolStripMenuItem.Text = "Dell'architettura selezionata" - ForX86ArchitectureToolStripMenuItem.Text = "Per l'architettura x86" - ForAmd64ArchitectureToolStripMenuItem.Text = "Per l'architettura AMD64" - ForARMArchitectureToolStripMenuItem.Text = "Per architettura ARM" - ForARM64ArchitectureToolStripMenuItem.Text = "Per l'architettura ARM64" - ImageOperationsToolStripMenuItem.Text = "Operazioni con le immagini" - MountImageToolStripMenuItem.Text = "Monta immagine..." - UnmountImageToolStripMenuItem.Text = "Smontaggio immagine..." - RemoveVolumeImagesToolStripMenuItem.Text = "Rimuovere le immagini del volume..." - SwitchImageIndexesToolStripMenuItem1.Text = "Cambia gli indici dell'immagine..." - UnattendedAnswerFilesToolStripMenuItem1.Text = "File di risposta non presidiati" - ManageToolStripMenuItem.Text = "Gestione" - CreationWizardToolStripMenuItem.Text = "Creare" - ScratchDirectorySettingsToolStripMenuItem.Text = "Configura la directory temporanea" - ManageReportsToolStripMenuItem.Text = "Gestisci rapporti" - AddToolStripMenuItem.Text = "Aggiungere" - NewFileToolStripMenuItem.Text = "Nuovo file..." - ExistingFileToolStripMenuItem.Text = "File esistente..." - ' Context menu of AppX information dialog - SaveResourceToolStripMenuItem.Text = "Salva risorsa..." - CopyToolStripMenuItem.Text = "Copia risorsa" - ' Context menu of AppX addition dialog - MicrosoftAppsToolStripMenuItem.Text = "Visita il sito Web di Microsoft Apps" - MicrosoftStoreGenerationProjectToolStripMenuItem.Text = "Visita il sito Web di Microsoft Store Generation Project" - AppxDownloadHelpToolStripMenuItem.Text = "Come si ottengono le applicazioni?" - ' New design - GreetingLabel.Text = "Ti diamo il benvenuto in questa sessione di assistenza" - LinkLabel12.Text = "PROGETTO" - LinkLabel13.Text = "IMMAGINE" - Label54.Text = "Nome:" - Label51.Text = "Posizione:" - Label53.Text = "Immagini montate?" - LinkLabel14.Text = "Fai clic qui per montare un'immagine" - Label55.Text = "Attività progetto" - LinkLabel15.Text = "Visualizza proprietà progetto" - LinkLabel16.Text = "Apri in Esplora file" - LinkLabel17.Text = "Scarica il progetto" - Label59.Text = "Non è stata montata alcuna immagine" - Label58.Text = "Per visualizzare le informazioni sull'immagine è necessario montarla" - Label57.Text = "Scelte" - LinkLabel21.Text = "Monta immagine..." - LinkLabel18.Text = "Scegli immagine montata..." - Label39.Text = "Indice immagine:" - Label43.Text = "Punto di montaggio:" - Label45.Text = "Versione:" - Label42.Text = "Nome:" - Label40.Text = "Descrizione:" - Label56.Text = "Attività immagine" - LinkLabel20.Text = "Visualizza proprietà immagine" - LinkLabel19.Text = "Smonta immagine" - GroupBox4.Text = "Operazioni immagine" - Button26.Text = "Monta immagine..." - Button27.Text = "Applica modifiche attuali" - Button28.Text = "Applica e smonta l'immagine" - Button29.Text = "Smonta immagine eliminando le modifiche" - Button25.Text = "Ricarica la sessione di assistenza" - Button24.Text = "Cambia gli indici dell'immagine..." - Button30.Text = "Applica immagine..." - Button31.Text = "Cattura immagine..." - Button32.Text = "Rimuovi immagini volume..." - Button33.Text = "Salva informazioni complete immagine..." - GroupBox5.Text = "Operazioni pacchetto" - Button36.Text = "Aggiungi pacchetto..." - Button34.Text = "Verifica informazioni pacchetto..." - Button38.Text = "Salva informazioni pacchetto installato..." - Button35.Text = "Rimuovi pacchetto..." - Button37.Text = "Esegui la manutenzione e la pulizia dell'archivio componenti..." - GroupBox6.Text = "Operazioni funzionali" - Button41.Text = "Attiva funzionalità..." - Button39.Text = "Verifica informazioni funzionalità..." - Button42.Text = "Salva informazioni funzionalità..." - Button40.Text = "Disattiva funzionalità..." - GroupBox7.Text = "Operazioni pacchetto AppX" - Button44.Text = "Aggiungi pacchetto AppX..." - Button45.Text = "Verifica informazioni applicazione..." - Button46.Text = "Salva informazioni pacchetto AppX installato..." - Button43.Text = "Rimuovi pacchetto AppX..." - GroupBox8.Text = "Operazioni funzionalità" - Button48.Text = "Aggiungi capacità..." - Button49.Text = "Verifica informazioni capacità..." - Button50.Text = "Salva informazioni capacità..." - Button47.Text = "Rimuovi capacità..." - GroupBox9.Text = "Operazioni driver dispositivo" - Button53.Text = "Aggiungi pacchetto driver..." - Button52.Text = "Verifica informazioni driver..." - Button54.Text = "Salva informazioni sul driver installato..." - Button51.Text = "Rimuovi driver..." - GroupBox10.Text = "Operazioni di Windows PE" - Button55.Text = "Verifica configurazione" - Button56.Text = "Salva configurazione..." - Button57.Text = "Imposta percorso destinazione..." - Button58.Text = "Imposta spazio temporaneo..." - End Select + Sub ApplyLanguage(cultureCode As String) + Dim requestedCultureCode As String = LocalizationService.NormalizeCultureCode(cultureCode) + Dim validationMessage As String = "" + If Not LocalizationService.ValidateLanguage(requestedCultureCode, validationMessage) Then + DynaLog.LogMessage("The requested language file failed validation. Keeping the default language.") + MessageBox.Show(validationMessage, + "Invalid DISMTools language file", + MessageBoxButtons.OK, + MessageBoxIcon.Error) + requestedCultureCode = LocalizationService.DefaultCultureCode + End If + + LanguageCode = requestedCultureCode + LocalizationService.SetLanguageByCultureCode(LanguageCode) + DynaLog.LogMessage("Changing program language... (culture code: " & LanguageCode & ")") + DynaLog.LogMessage("Language culture is " & LanguageCode & ". Applying localization resources...") + FileToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface").Upper("File.Label", AllCaps) + ProjectToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface").Upper("Project.Label", AllCaps) + CommandsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface").Upper("Commands.Label", AllCaps) + ToolsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface").Upper("Tools.Label", AllCaps) + HelpToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface").Upper("Help.Label", AllCaps) + InvalidSettingsTSMI.Text = LocalizationService.ForSection("Main.Interface")("Settings.Detected.Label") + NewProjectToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("NewProject.Button") + OpenExistingProjectToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Open.Existing.Project.Label") + ManageOnlineInstallationToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Manage.Online.Install.Label") + ManageOfflineInstallationToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Manage.Ffline.Button") + RecentProjectsListMenu.Text = LocalizationService.ForSection("Main.Interface")("RecentProjects.Label") + SaveProjectToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("SaveProject.Button") + SaveProjectasToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("SaveProjectas.Button") + ExitToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Exit.Label") + ViewProjectFilesInFileExplorerToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("View.Project.Files.Label") + UnloadProjectToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("UnloadProject.Button") + SwitchImageIndexesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Switch.Image.Indexes.Button") + ProjectPropertiesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ProjectProps.Label") + ImagePropertiesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ImageProps.Label") + ImageManagementToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ImageManagement.Label") + OSPackagesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("OSPackages.Label") + ProvisioningPackagesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ProvPackages.Label") + AppPackagesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("AppxPackages.Label") + AppPatchesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("AppMspservicing.Label") + DefaultAppAssociationsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("DefaultApp.Assoc.Label") + LanguagesAndRegionSettingsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Languages.Regional.Label") + CapabilitiesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Capabilities.Label") + WindowsEditionsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Windows.Label") + DriversToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Drivers.Label") + UnattendedAnswerFilesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Unattended.Answer.Label") + WindowsPEServicingToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("WindowsPE.Label") + OSUninstallToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("OSUninstall.Label") + ReservedStorageToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ReservedStorage.Label") + AppendImage.Text = LocalizationService.ForSection("Main.Interface")("Append.Capture.Dir.Button") + ApplyFFU.Text = LocalizationService.ForSection("Main.Interface")("ApplyFfusfufile.Button") + ApplyImage.Text = LocalizationService.ForSection("Main.Interface")("ApplyWimswmfile.Button") + CaptureCustomImage.Text = LocalizationService.ForSection("Main.Interface")("Capture.Incremental.Button") + CaptureFFU.Text = LocalizationService.ForSection("Main.Interface")("Capture.Partitions.Button") + CaptureImage.Text = LocalizationService.ForSection("Main.Interface")("Capture.Image.Drive.Button") + CleanupMountpoints.Text = LocalizationService.ForSection("Main.Interface")("Delete.Resources.Button") + CommitImage.Text = LocalizationService.ForSection("Main.Interface")("Apply.Changes.Image.Button") + DeleteImage.Text = LocalizationService.ForSection("Main.Interface")("Delete.VolumeImages.Button") + ExportImage.Text = LocalizationService.ForSection("Main.Interface")("ExportImage.Button") + GetImageInfo.Text = LocalizationService.ForSection("Main.Interface")("Get.Image.Button") + GetWIMBootEntry.Text = LocalizationService.ForSection("Main.Interface")("Get.WIM.Boot.Button") + ListImage.Text = LocalizationService.ForSection("Main.Interface")("List.Files.Dirs.Button") + MountImage.Text = LocalizationService.ForSection("Main.Interface")("MountImage.Button") + OptimizeFFU.Text = LocalizationService.ForSection("Main.Interface")("Optimize.FFU.File.Button") + OptimizeImage.Text = LocalizationService.ForSection("Main.Interface")("OptimizeImage.Button") + RemountImage.Text = LocalizationService.ForSection("Main.Interface")("Remount.Image.Button") + SplitFFU.Text = LocalizationService.ForSection("Main.Interface")("Split.FFU.File.Button") + SplitImage.Text = LocalizationService.ForSection("Main.Interface")("Split.WIM.File.Button") + UnmountImage.Text = LocalizationService.ForSection("Main.Interface")("UnmountImage.Button") + UpdateWIMBootEntry.Text = LocalizationService.ForSection("Main.Interface")("Update.WIM.Boot.Button") + ApplySiloedPackage.Text = LocalizationService.ForSection("Main.Interface")("Apply.Siloed.Prov.Button") + SaveImageInformationToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Save.Image.Button") + GetPackages.Text = LocalizationService.ForSection("Main.Interface")("GetPackages.Button") + AddPackage.Text = LocalizationService.ForSection("Main.Interface")("AddPackage.Button") + RemovePackage.Text = LocalizationService.ForSection("Main.Interface")("RemovePackage.Button") + GetFeatures.Text = LocalizationService.ForSection("Main.Interface")("GetFeatures.Button") + EnableFeature.Text = LocalizationService.ForSection("Main.Interface")("EnableFeature.Button") + DisableFeature.Text = LocalizationService.ForSection("Main.Interface")("DisableFeature.Button") + CleanupImage.Text = LocalizationService.ForSection("Main.Interface")("CleanupRecovery.Button") + AddProvisioningPackage.Text = LocalizationService.ForSection("Main.Interface")("Add.Prov.Package.Button") + GetProvisioningPackageInfo.Text = LocalizationService.ForSection("Main.Interface")("Get.Prov.Package.Button") + ApplyCustomDataImage.Text = LocalizationService.ForSection("Main.Interface")("Apply.CustomData.Button") + GetProvisionedAppxPackages.Text = LocalizationService.ForSection("Main.Interface")("Get.App.Package.Button") + AddProvisionedAppxPackage.Text = LocalizationService.ForSection("Main.Interface")("Add.Provisioned.App.Button") + RemoveProvisionedAppxPackage.Text = LocalizationService.ForSection("Main.Interface")("Remove.Prov.App.Button") + OptimizeProvisionedAppxPackages.Text = LocalizationService.ForSection("Main.Interface")("Optimize.Provisioned.Button") + SetProvisionedAppxDataFile.Text = LocalizationService.ForSection("Main.Interface")("Add.CustomData.File.Button") + CheckAppPatch.Text = LocalizationService.ForSection("Main.Interface")("Get.App.Patch.Button") + GetAppPatchInfo.Text = LocalizationService.ForSection("Main.Interface")("Detailed.App.Patch.Button") + GetAppPatches.Text = LocalizationService.ForSection("Main.Interface")("Basic.Installed.App.Button") + GetAppInfo.Text = LocalizationService.ForSection("Main.Interface")("Get.Detailed.Button") + GetApps.Text = LocalizationService.ForSection("Main.Interface")("Get.Basic.Windows.Button") + ExportDefaultAppAssociations.Text = LocalizationService.ForSection("Main.Interface")("Export.Default.Button") + GetDefaultAppAssociations.Text = LocalizationService.ForSection("Main.Interface")("DefaultApp.Assoc.Button") + ImportDefaultAppAssociations.Text = LocalizationService.ForSection("Main.Interface")("Import.Default.Button") + RemoveDefaultAppAssociations.Text = LocalizationService.ForSection("Main.Interface")("Remove.Default.Button") + GetIntl.Text = LocalizationService.ForSection("Main.Interface")("Intl.Settings.Button") + SetUILang.Text = LocalizationService.ForSection("Main.Interface")("SetUilanguage.Button") + SetUILangFallback.Text = LocalizationService.ForSection("Main.Interface")("Set.Default.Button") + SetSysUILang.Text = LocalizationService.ForSection("Main.Interface")("Set.System.Preferred.Button") + SetSysLocale.Text = LocalizationService.ForSection("Main.Interface")("Set.System.Locale.Button") + SetUserLocale.Text = LocalizationService.ForSection("Main.Interface")("Set.User.Locale.Button") + SetInputLocale.Text = LocalizationService.ForSection("Main.Interface")("Set.Input.Locale.Button") + SetAllIntl.Text = LocalizationService.ForSection("Main.Interface")("Set.UI.Button") + SetTimeZone.Text = LocalizationService.ForSection("Main.Interface")("Set.Default.Time.Button") + SetSKUIntlDefaults.Text = LocalizationService.ForSection("Main.Interface")("Set.Default.Languages.Button") + SetLayeredDriver.Text = LocalizationService.ForSection("Main.Interface")("Set.Layered.Driver.Button") + GenLangINI.Text = LocalizationService.ForSection("Main.Interface")("Generate.Lang.Ini.Button") + SetSetupUILang.Text = LocalizationService.ForSection("Main.Interface")("Set.Default.Setup.Button") + AddCapability.Text = LocalizationService.ForSection("Main.Interface")("AddCapability.Button") + ExportSource.Text = LocalizationService.ForSection("Main.Interface")("Export.Capabilities.Button") + GetCapabilities.Text = LocalizationService.ForSection("Main.Interface")("GetCapabilities.Button") + RemoveCapability.Text = LocalizationService.ForSection("Main.Interface")("RemoveCapability.Button") + GetCurrentEdition.Text = LocalizationService.ForSection("Main.Interface")("Get.Edition.Button") + GetTargetEditions.Text = LocalizationService.ForSection("Main.Interface")("Get.Upgrade.Targets.Button") + SetEdition.Text = LocalizationService.ForSection("Main.Interface")("UpgradeImage.Button") + SetProductKey.Text = LocalizationService.ForSection("Main.Interface")("SetProductKey.Button") + GetDrivers.Text = LocalizationService.ForSection("Main.Interface")("GetDrivers.Button") + AddDriver.Text = LocalizationService.ForSection("Main.Interface")("AddDriver.Button") + RemoveDriver.Text = LocalizationService.ForSection("Main.Interface")("RemoveDriver.Button") + ExportDriver.Text = LocalizationService.ForSection("Main.Interface")("Export.DriverPackages.Button") + ImportDriver.Text = LocalizationService.ForSection("Main.Interface")("Import.DriverPackages.Button") + ApplyUnattend.Text = LocalizationService.ForSection("Main.Interface")("Apply.Unattended.Button") + GetPESettings.Text = LocalizationService.ForSection("Main.Interface")("GetSettings.Button") + SetScratchSpace.Text = LocalizationService.ForSection("Main.Interface")("SetScratchSpace.Button") + SetTargetPath.Text = LocalizationService.ForSection("Main.Interface")("Set.Target.Path.Button") + GetOSUninstallWindow.Text = LocalizationService.ForSection("Main.Interface")("Get.Uninstall.Window.Button") + InitiateOSUninstall.Text = LocalizationService.ForSection("Main.Interface")("Initiate.Uninstall.Button") + RemoveOSUninstall.Text = LocalizationService.ForSection("Main.Interface")("Remove.Roll.Back.Button") + SetOSUninstallWindow.Text = LocalizationService.ForSection("Main.Interface")("Set.Uninstall.Window.Button") + SetReservedStorageState.Text = LocalizationService.ForSection("Main.Interface")("Set.Reserved.Storage.Button") + GetReservedStorageState.Text = LocalizationService.ForSection("Main.Interface")("Get.Reserved.Storage.Button") + AddEdge.Text = LocalizationService.ForSection("Main.Interface")("AddEdge.Button") + AddEdgeBrowser.Text = LocalizationService.ForSection("Main.Interface")("Add.Edge.Browser.Button") + AddEdgeWebView.Text = LocalizationService.ForSection("Main.Interface")("Add.Edge.Web.Button") + ImageConversionToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ImageConversion.Label") + MergeSWM.Text = LocalizationService.ForSection("Main.Interface")("MergeSwmfiles.Button") + RemountImageWithWritePermissionsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Remount.Image.Write.Label") + CommandShellToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("CommandConsole.Label") + UnattendedAnswerFileManagerToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Unattended.AnswerFile.Label") + UnattendedAnswerFileCreatorToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Unattended.Creator.Label") + RegCplToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Manage.Image.Registry.Button") + WebResourcesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("WebResources.Label") + LanguagesAndOptionalFeaturesISOToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Download.Languages.Button") + LanguagesAndFODWin10ToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Download.FOD.Button") + ReportManagerToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ReportManager.Label") + MountedImageManagerTSMI.Text = LocalizationService.ForSection("Main.Interface")("Mounted.Image.Manager.Label") + CreateDiscImageToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Create.Disc.Image.Button") + CreateTestingEnvironmentToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Create.Testing.Button") + WimScriptEditorCommand.Text = LocalizationService.ForSection("Main.Interface")("Config.List.Editor.Label") + OptionsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Options.Label") + HelpTopicsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("HelpTopics.Label") + AboutDISMToolsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("DISM.Tools.Label") + ISFix.Text = LocalizationService.ForSection("Main.Interface")("MoreInfo.Label") + ISHelp.Text = LocalizationService.ForSection("Main.Interface")("WhatsThis.Label") + ReportFeedbackToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Report.Feedback.Opens.Label") + ContributeToTheHelpSystemToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Contribute.Help.System.Label") + TourActionsTSMI.Text = LocalizationService.ForSection("Main.Interface")("TourActions.Label") + ServerStatusTSMI.Text = LocalizationService.ForSection("Main.Interface").Format("Tour.Server.Active.Label", tourServer.GetTcpPort()) + RestartDTTourTSMI.Text = LocalizationService.ForSection("Main.Interface")("RestartTour.Label") + StopDTTourServerTSMI.Text = LocalizationService.ForSection("Main.Interface")("Stop.Tour.Server.Label") + LabelHeader1.Text = LocalizationService.ForSection("Main.Interface")("Begin.Label") + Label10.Text = LocalizationService.ForSection("Main.Interface")("RecentProjects.Label") + NewProjLink.Text = LocalizationService.ForSection("Main.Interface")("NewProject.Link") + ExistingProjLink.Text = LocalizationService.ForSection("Main.Interface")("Open.Existing.Project.Link") + OnlineInstMgmt.Text = LocalizationService.ForSection("Main.Interface")("Manage.Online.Install.Link") + OfflineInstMgmt.Text = LocalizationService.ForSection("Main.Interface")("Manage.Offline.Button.Button") + RecentRemoveLink.Text = LocalizationService.ForSection("Main.Interface")("RemoveEntry.Link") + ToolStripButton1.Text = LocalizationService.ForSection("Main.Interface")("CloseTab.Label") + ToolStripButton2.Text = LocalizationService.ForSection("Main.Interface")("SaveProject.Label") + ToolStripButton3.Text = LocalizationService.ForSection("Main.Interface")("UnloadProject.Label") + ToolStripButton3.ToolTipText = LocalizationService.ForSection("Main.Interface")("Unload.Project.Tooltip") + ToolStripButton4.Text = LocalizationService.ForSection("Main.Interface")("Show.Progress.Window.Label") + RefreshViewTSB.Text = LocalizationService.ForSection("Main.Interface")("RefreshView.Label") + ExpandCollapseTSB.Text = LocalizationService.ForSection("Main.Interface")("Expand.Label") + UpdateLink.Text = LocalizationService.ForSection("Main.Interface")("NewVersion.Available.Link") + UpdateLink.LinkArea = LocalizationService.GetLinkArea(UpdateLink.Text, LocalizationService.ForSection("Main.CheckForUpdates")("Learn.Link")) + PkgBasicInfo.Text = LocalizationService.ForSection("Main.Interface")("Get.Basic.Label") + PkgDetailedInfo.Text = LocalizationService.ForSection("Main.Interface")("Get.Detailed.Specific.Label") + CommitAndUnmountTSMI.Text = LocalizationService.ForSection("Main.Interface")("CommitImage.Label") + DiscardAndUnmountTSMI.Text = LocalizationService.ForSection("Main.Interface")("Discard.Changes.Label") + UnmountSettingsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("UnmountSettings.Button") + ViewPackageDirectoryToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("View.Package.Dir.Label") + GetImageFileInformationToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Get.ImageFile.Button") + SaveCompleteImageInformationToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Save.Complete.Image.Button") + CreateDiscImageWithThisFileToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Create.Disc.ImageFile.Button") + OpenFileDialog1.Title = LocalizationService.ForSection("Main.Interface")("Project.File.Load.Title") + LocalMountDirFBD.Description = LocalizationService.ForSection("Main.Interface")("MountDir.Description") + If Not ImgBW.IsBusy And areBackgroundProcessesDone Then + BGProcDetails.Label2.Text = LocalizationService.ForSection("Main.Interface")("Image.Processes.Label") + End If + MenuDesc.Text = LocalizationService.ForSection("Main.Interface")("Ready.Label") + AccessDirectoryToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("AccessDirectory.Label") + UnloadProjectToolStripMenuItem1.Text = LocalizationService.ForSection("Main.Interface")("UnloadProject.Label") + CopyDeploymentToolsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Copy.Deployment.Tools.Label") + OfAllArchitecturesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("AllArchitectures.Label") + OfSelectedArchitectureToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Selected.Architecture.Label") + ForX86ArchitectureToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Xarchitecture.Label") + ForAmd64ArchitectureToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Amarkdown.Architecture.Label") + ForARMArchitectureToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ARM.Label") + ForARM64ArchitectureToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ARM64.Label") + ImageOperationsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ImageOperations.Label") + MountImageToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("MountImage.Button") + UnmountImageToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("UnmountImage.Button") + RemoveVolumeImagesToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Remove.VolumeImages.Button") + SwitchImageIndexesToolStripMenuItem1.Text = LocalizationService.ForSection("Main.Interface")("Switch.Image.Indexes.Button") + UnattendedAnswerFilesToolStripMenuItem1.Text = LocalizationService.ForSection("Main.Interface")("Unattended.Answer.Label") + ManageToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Manage.Label") + CreationWizardToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Create.Label") + ScratchDirectorySettingsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Configure.Scratch.Dir.Label") + ManageReportsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ManageReports.Label") + AddToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Add.Button") + NewFileToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("NewFile.Button") + ExistingFileToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("ExistingFile.Button") + SaveResourceToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("SaveResource.Button") + CopyToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("CopyResource.Label") + MicrosoftAppsToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Visit.Microsoft.Apps.Label") + MicrosoftStoreGenerationProjectToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Visit.Microsoft.Label") + AppxDownloadHelpToolStripMenuItem.Text = LocalizationService.ForSection("Main.Interface")("Iget.Apps.Label") + GreetingLabel.Text = LocalizationService.ForSection("Main.Interface")("Welcome.Servicing.Label") + LinkLabel12.Text = LocalizationService.ForSection("Main.Interface")("Project.Link") + LinkLabel13.Text = LocalizationService.ForSection("Main.Interface")("Image.Link") + Label54.Text = LocalizationService.ForSection("Main.Interface")("Name.Label") + Label51.Text = LocalizationService.ForSection("Main.Interface")("Location.Label") + Label53.Text = LocalizationService.ForSection("Main.Interface")("ImagesMounted.Label") + LinkLabel14.Text = LocalizationService.ForSection("Main.Interface")("Mount.Image.Link") + Label55.Text = LocalizationService.ForSection("Main.Interface")("ProjectTasks.Label") + LinkLabel15.Text = LocalizationService.ForSection("Main.Interface")("View.Project.Props.Link") + LinkLabel16.Text = LocalizationService.ForSection("Main.Interface")("Open.File.Explorer.Link") + LinkLabel17.Text = LocalizationService.ForSection("Main.Interface")("UnloadProject.Link") + Label59.Text = LocalizationService.ForSection("Main.Interface")("ImageMounted.Label") + Label58.Text = LocalizationService.ForSection("Main.Interface")("Mount.Image.Order.Label") + Label57.Text = LocalizationService.ForSection("Main.Interface")("Choices.Label") + LinkLabel21.Text = LocalizationService.ForSection("Main.Interface")("MountImage.Link") + LinkLabel18.Text = LocalizationService.ForSection("Main.Interface")("Pick.Mounted.Image.Link") + Label39.Text = LocalizationService.ForSection("Main.Interface")("ImageIndex.Label") + Label43.Text = LocalizationService.ForSection("Main.Interface")("MountPoint.Label") + Label45.Text = LocalizationService.ForSection("Main.Interface")("Version.Label") + Label42.Text = LocalizationService.ForSection("Main.Interface")("Name.Label") + Label40.Text = LocalizationService.ForSection("Main.Interface")("Description.Label") + Label56.Text = LocalizationService.ForSection("Main.Interface")("ImageTasks.Label") + LinkLabel20.Text = LocalizationService.ForSection("Main.Interface")("View.Image.Props.Link") + LinkLabel19.Text = LocalizationService.ForSection("Main.Interface")("UnmountImage.Link") + GroupBox4.Text = LocalizationService.ForSection("Main.Interface")("ImageOperations.Group") + Button26.Text = LocalizationService.ForSection("Main.Interface")("MountImage.Button") + Button27.Text = LocalizationService.ForSection("Main.Interface")("Commit.Changes.Button") + Button28.Text = LocalizationService.ForSection("Main.Interface")("CommitImage.Button") + Button29.Text = LocalizationService.ForSection("Main.Interface")("Unmount.Image.Button") + Button25.Text = LocalizationService.ForSection("Main.Interface")("Reload.Servicing.Button") + Button24.Text = LocalizationService.ForSection("Main.Interface")("Switch.Image.Indexes.Button") + Button30.Text = LocalizationService.ForSection("Main.Interface")("ApplyImage.Button") + Button31.Text = LocalizationService.ForSection("Main.Interface")("CaptureImage.Button") + Button32.Text = LocalizationService.ForSection("Main.Interface")("Remove.VolumeImages.Button") + Button33.Text = LocalizationService.ForSection("Main.Interface")("Save.Complete.Image.Button") + GroupBox5.Text = LocalizationService.ForSection("Main.Interface")("Package.Operations.Group") + Button36.Text = LocalizationService.ForSection("Main.Interface")("AddPackage.Button") + Button34.Text = LocalizationService.ForSection("Main.Interface")("Get.Package.Button") + Button38.Text = LocalizationService.ForSection("Main.Interface")("Save.Installed.Button") + Button35.Text = LocalizationService.ForSection("Main.Interface")("RemovePackage.Button") + Button37.Text = LocalizationService.ForSection("Main.Interface")("Component.Store.Maint.Button") + GroupBox6.Text = LocalizationService.ForSection("Main.Interface")("Feature.Operations.Group") + Button41.Text = LocalizationService.ForSection("Main.Interface")("EnableFeature.Button") + Button39.Text = LocalizationService.ForSection("Main.Interface")("Get.Feature.Button") + Button42.Text = LocalizationService.ForSection("Main.Interface")("Save.Feature.Button") + Button40.Text = LocalizationService.ForSection("Main.Interface")("DisableFeature.Button") + GroupBox7.Text = LocalizationService.ForSection("Main.Interface")("AppX.Package.Operations") + Button44.Text = LocalizationService.ForSection("Main.Interface")("Add.AppX.Package.Button") + Button45.Text = LocalizationService.ForSection("Main.Interface")("Get.App.Button") + Button46.Text = LocalizationService.ForSection("Main.Interface")("Save.Installed.AppX.Button") + Button43.Text = LocalizationService.ForSection("Main.Interface")("Remove.AppX.Package.Button") + GroupBox8.Text = LocalizationService.ForSection("Main.Interface")("Capability.Operations.Group") + Button48.Text = LocalizationService.ForSection("Main.Interface")("AddCapability.Button") + Button49.Text = LocalizationService.ForSection("Main.Interface")("Get.Capability.Button") + Button50.Text = LocalizationService.ForSection("Main.Interface")("Save.Capability.Button") + Button47.Text = LocalizationService.ForSection("Main.Interface")("RemoveCapability.Button") + GroupBox9.Text = LocalizationService.ForSection("Main.Interface")("DriverOperations.Group") + Button53.Text = LocalizationService.ForSection("Main.Interface")("AddDriverPackage.Button") + Button52.Text = LocalizationService.ForSection("Main.Interface")("Get.Driver.Button") + Button54.Text = LocalizationService.ForSection("Main.Interface")("Save.Installed.Driver.Button") + Button51.Text = LocalizationService.ForSection("Main.Interface")("RemoveDriver.Button") + GroupBox10.Text = LocalizationService.ForSection("Main.Interface")("Windows.Group") + Button55.Text = LocalizationService.ForSection("Main.Interface")("GetConfig.Button") + Button56.Text = LocalizationService.ForSection("Main.Interface")("SaveConfig.Button") + Button57.Text = LocalizationService.ForSection("Main.Interface")("Set.Target.Path.Button") + Button58.Text = LocalizationService.ForSection("Main.Interface")("SetScratchSpace.Button") If OnlineManagement Then - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label50.Text = If(IsImageMounted, "Yes", "No") - Text = "Online installation - DISMTools" - Label41.Text = "(Online installation)" - Label47.Text = "(Online installation)" - Label49.Text = "(Online installation)" - Case "ESN" - Label50.Text = If(IsImageMounted, "Sí", "No") - Text = "Instalación activa - DISMTools" - Label41.Text = "(Instalación activa)" - Label47.Text = "(Instalación activa)" - Label49.Text = "(Instalación activa)" - Case "FRA" - Label50.Text = If(IsImageMounted, "Oui", "Non") - Text = "Installation en ligne - DISMTools" - Label41.Text = "(Installation en ligne)" - Label47.Text = "(Installation en ligne)" - Label49.Text = "(Installation en ligne)" - Case "PTB", "PTG" - Label50.Text = If(IsImageMounted, "Sim", "Não") - Text = "Instalação em linha - DISMTools" - Label41.Text = "(Instalação em linha)" - Label47.Text = "(Instalação em linha)" - Label49.Text = "(Instalação em linha)" - Case "ITA" - Label50.Text = If(IsImageMounted, "Sì", "No") - Text = "Installazione online - DISMTools" - Label41.Text = "(Installazione online)" - Label47.Text = "(Installazione online)" - Label49.Text = "(Installazione online)" - End Select - Case 1 - Label50.Text = If(IsImageMounted, "Yes", "No") - Text = "Online installation - DISMTools" - Label41.Text = "(Online installation)" - Label47.Text = "(Online installation)" - Label49.Text = "(Online installation)" - Case 2 - Label50.Text = If(IsImageMounted, "Sí", "No") - Text = "Instalación activa - DISMTools" - Label41.Text = "(Instalación activa)" - Label47.Text = "(Instalación activa)" - Label49.Text = "(Instalación activa)" - Case 3 - Label50.Text = If(IsImageMounted, "Oui", "Non") - Text = "Installation en ligne - DISMTools" - Label41.Text = "(Installation en ligne)" - Label47.Text = "(Installation en ligne)" - Label49.Text = "(Installation en ligne)" - Case 4 - Label50.Text = If(IsImageMounted, "Sim", "Não") - Text = "Instalação em linha - DISMTools" - Label41.Text = "(Instalação em linha)" - Label47.Text = "(Instalação em linha)" - Label49.Text = "(Instalação em linha)" - Case 5 - Label50.Text = If(IsImageMounted, "Sì", "No") - Text = "Installazione online - DISMTools" - Label41.Text = "(Installazione online)" - Label47.Text = "(Installazione online)" - Label49.Text = "(Installazione online)" - End Select + Dim onlineMountedText As String = LocalizationService.ForSection("Main.Interface")("Yes.Button") + Dim onlineNotMountedText As String = LocalizationService.ForSection("Main.Interface")("No.Button") + Label50.Text = If(IsImageMounted, onlineMountedText, onlineNotMountedText) + Text = LocalizationService.ForSection("Main.OnlineManagement.Start")("Install.DISM.Tools.Label") + Label41.Text = LocalizationService.ForSection("Main.OnlineManagement.Start")("Install.Label") + Label47.Text = LocalizationService.ForSection("Main.OnlineManagement.Start")("Install.Label") + Label49.Text = LocalizationService.ForSection("Main.OnlineManagement.Start")("Install.Label") ElseIf OfflineManagement Then - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label50.Text = If(IsImageMounted, "Yes", "No") - Text = "Offline installation - DISMTools" - Label41.Text = "(Offline installation)" - Label46.Text = "(Offline installation)" - Label47.Text = "(Offline installation)" - Label49.Text = "(Offline installation)" - Case "ESN" - Label50.Text = If(IsImageMounted, "Sí", "No") - Text = "Instalación fuera de línea - DISMTools" - Label41.Text = "(Instalación fuera de línea)" - Label46.Text = "(Instalación fuera de línea)" - Label47.Text = "(Instalación fuera de línea)" - Label49.Text = "(Instalación fuera de línea)" - Case "FRA" - Label50.Text = If(IsImageMounted, "Oui", "Non") - Text = "Installation hors ligne - DISMTools" - Label41.Text = "(Installation hors ligne)" - Label46.Text = "(Installation hors ligne)" - Label47.Text = "(Installation hors ligne)" - Label49.Text = "(Installation hors ligne)" - Case "PTB", "PTG" - Label50.Text = If(IsImageMounted, "Sim", "Não") - Text = "Instalação offline - DISMTools" - Label41.Text = "(Instalação offline)" - Label46.Text = "(Instalação offline)" - Label47.Text = "(Instalação offline)" - Label49.Text = "(Instalação offline)" - Case "ITA" - Label50.Text = If(IsImageMounted, "Sì", "No") - Text = "Installazione offline - DISMTools" - Label41.Text = "(Installazione offline)" - Label46.Text = "(Installazione offline)" - Label47.Text = "(Installazione offline)" - Label49.Text = "(Installazione offline)" - End Select - Case 1 - Label50.Text = If(IsImageMounted, "Yes", "No") - Text = "Online installation - DISMTools" - Label41.Text = "(Offline installation)" - Label46.Text = "(Offline installation)" - Label47.Text = "(Offline installation)" - Label49.Text = "(Offline installation)" - Case 2 - Label50.Text = If(IsImageMounted, "Sí", "No") - Text = "Instalación fuera de línea - DISMTools" - Label41.Text = "(Instalación fuera de línea)" - Label46.Text = "(Instalación fuera de línea)" - Label47.Text = "(Instalación fuera de línea)" - Label49.Text = "(Instalación fuera de línea)" - Case 3 - Label50.Text = If(IsImageMounted, "Oui", "Non") - Text = "Installation hors ligne - DISMTools" - Label41.Text = "(Installation hors ligne)" - Label46.Text = "(Installation hors ligne)" - Label47.Text = "(Installation hors ligne)" - Label49.Text = "(Installation hors ligne)" - Case 4 - Label50.Text = If(IsImageMounted, "Sim", "Não") - Text = "Instalação offline - DISMTools" - Label41.Text = "(Instalação offline)" - Label46.Text = "(Instalação offline)" - Label47.Text = "(Instalação offline)" - Label49.Text = "(Instalação offline)" - Case 5 - Label50.Text = If(IsImageMounted, "Sì", "No") - Text = "Installazione offline - DISMTools" - Label41.Text = "(Installazione offline)" - Label46.Text = "(Installazione offline)" - Label47.Text = "(Installazione offline)" - Label49.Text = "(Installazione offline)" - End Select + Dim offlineMountedText As String = LocalizationService.ForSection("Main.Interface")("Offline.Management.Button") + Dim offlineNotMountedText As String = LocalizationService.ForSection("Main.Interface")("No.Button") + Label50.Text = If(IsImageMounted, offlineMountedText, offlineNotMountedText) + Text = LocalizationService.ForSection("Main.OfflineManagement")("OfflineInstall.Label") + Label41.Text = LocalizationService.ForSection("Main.OfflineManagement")("Install.Label") + Label46.Text = LocalizationService.ForSection("Main.OfflineManagement")("Install.Label") + Label47.Text = LocalizationService.ForSection("Main.OfflineManagement")("Install.Label") + Label49.Text = LocalizationService.ForSection("Main.OfflineManagement")("Install.Label") End If - ' Infinity Home -- don't refresh computer information - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ChangeComputerNameLink.Text = "Rename" - Label1.Text = "Domain Membership:" - Label2.Text = "Workgroup/Domain:" - Label3.Text = "IP Address Configuration:" - Label4.Text = "Explore and get started" - Label5.Text = "Stay up-to-date" - Label9.Text = "Fact of the day" - LinkLabel27.Text = "Learn what's new in this release" - LinkLabel28.Text = "Get started with DISMTools and image servicing" - LinkLabel29.Text = "Manage your current installation" - LinkLabel30.Text = "Manage external Windows installations" - Label12.Text = "Learn by watching videos" - Label6.Text = "Video content could not be loaded." - Label7.Text = "The news feed could not be loaded." - LinkLabel31.Text = "Learn more" - LinkLabel32.Text = "Retry" - LinkLabel33.Text = "Retry" - LinkLabel34.Text = "Learn more" - Case "ESN" - ChangeComputerNameLink.Text = "Cambiar nombre" - Label1.Text = "Membresía de dominio:" - Label2.Text = "Grupo de trabajo/dominio:" - Label3.Text = "Configuración de dirección IP:" - Label4.Text = "Explore y comience" - Label5.Text = "Manténgase informado" - Label9.Text = "Dato del día" - LinkLabel27.Text = "Aprenda qué hay de nuevo en esta versión" - LinkLabel28.Text = "Comience con DISMTools y con el servicio de imágenes" - LinkLabel29.Text = "Administre su instalación actual" - LinkLabel30.Text = "Administre instalaciones externas" - Label12.Text = "Aprenda viendo vídeos (en inglés)" - Label6.Text = "No se han podido cargar los vídeos." - Label7.Text = "No se han podido cargar las noticias." - LinkLabel31.Text = "Saber más" - LinkLabel32.Text = "Intentarlo de nuevo" - LinkLabel33.Text = "Intentarlo de nuevo" - LinkLabel34.Text = "Saber más" - Case "FRA" - ChangeComputerNameLink.Text = "Renommer" - Label1.Text = "Appartenance au domaine :" - Label2.Text = "Groupe de travail/Domaine :" - Label3.Text = "Configuration de l'adresse IP :" - Label4.Text = "Découvrir et commencer" - Label5.Text = "Rester à jour" - Label9.Text = "Le fait du jour" - LinkLabel27.Text = "Découvrez les nouveautés de cette version" - LinkLabel28.Text = "Commencer avec DISMTools et la gestion des images" - LinkLabel29.Text = "Gérer votre installation actuelle" - LinkLabel30.Text = "Gérer les installations Windows externes" - Label12.Text = "Apprendre en regardant des vidéos (en anglais)" - Label6.Text = "Impossible de charger le contenu vidéo." - Label7.Text = "Impossible de charger le fil d'actualité." - LinkLabel31.Text = "En savoir plus" - LinkLabel32.Text = "Réessayer" - LinkLabel33.Text = "Réessayer" - LinkLabel34.Text = "En savoir plus" - Case "PTB", "PTG" - ChangeComputerNameLink.Text = "Renomear" - Label1.Text = "Pertença a um domínio:" - Label2.Text = "Grupo de trabalho/Domínio:" - Label3.Text = "Configuração do endereço IP:" - Label4.Text = "Explorar e começar" - Label5.Text = "Manter-se atualizado" - Label9.Text = "Curiosidade do dia" - LinkLabel27.Text = "Descubra as novidades desta versão" - LinkLabel28.Text = "Começar a utilizar o DISMTools e a manutenção de imagens" - LinkLabel29.Text = "Gerir a sua instalação atual" - LinkLabel30.Text = "Gerir instalações externas do Windows" - Label12.Text = "Aprenda assistindo a vídeos (em inglês)" - Label6.Text = "Não foi possível carregar o conteúdo de vídeo." - Label7.Text = "Não foi possível carregar o feed de notícias." - LinkLabel31.Text = "Saiba mais" - LinkLabel32.Text = "Tentar novamente" - LinkLabel33.Text = "Tentar novamente" - LinkLabel34.Text = "Saiba mais" - Case "ITA" - ChangeComputerNameLink.Text = "Rinomina" - Label1.Text = "Appartenenza al dominio:" - Label2.Text = "Gruppo di lavoro/Dominio:" - Label3.Text = "Configurazione dell'indirizzo IP:" - Label4.Text = "Esplora e inizia" - Label5.Text = "Rimani aggiornato" - Label9.Text = "Curiosità del giorno" - LinkLabel27.Text = "Scopri le novità di questa versione" - LinkLabel28.Text = "Inizia a utilizzare DISMTools e la gestione delle immagini" - LinkLabel29.Text = "Gestisci la tua installazione attuale" - LinkLabel30.Text = "Gestisci installazioni Windows esterne" - Label12.Text = "Impara guardando i video (in inglese)" - Label6.Text = "Impossibile caricare il contenuto video." - Label7.Text = "Impossibile caricare il feed delle notizie." - LinkLabel31.Text = "Ulteriori informazioni" - LinkLabel32.Text = "Riprova" - LinkLabel33.Text = "Riprova" - LinkLabel34.Text = "Ulteriori informazioni" - End Select - Case 1 - ChangeComputerNameLink.Text = "Rename" - Label1.Text = "Domain Membership:" - Label2.Text = "Workgroup/Domain:" - Label3.Text = "IP Address Configuration:" - Label4.Text = "Explore and get started" - Label5.Text = "Stay up-to-date" - Label9.Text = "Fact of the day" - LinkLabel27.Text = "Learn what's new in this release" - LinkLabel28.Text = "Get started with DISMTools and image servicing" - LinkLabel29.Text = "Manage your current installation" - LinkLabel30.Text = "Manage external Windows installations" - Label12.Text = "Learn by watching videos" - Label6.Text = "Video content could not be loaded." - Label7.Text = "The news feed could not be loaded." - LinkLabel31.Text = "Learn more" - LinkLabel32.Text = "Retry" - LinkLabel33.Text = "Retry" - LinkLabel34.Text = "Learn more" - Case 2 - ChangeComputerNameLink.Text = "Cambiar nombre" - Label1.Text = "Membresía de dominio:" - Label2.Text = "Grupo de trabajo/dominio:" - Label3.Text = "Configuración de dirección IP:" - Label4.Text = "Explore y comience" - Label5.Text = "Manténgase informado" - Label9.Text = "Dato del día" - LinkLabel27.Text = "Aprenda qué hay de nuevo en esta versión" - LinkLabel28.Text = "Comience con DISMTools y con el servicio de imágenes" - LinkLabel29.Text = "Administre su instalación actual" - LinkLabel30.Text = "Administre instalaciones externas" - Label12.Text = "Aprenda viendo vídeos (en inglés)" - Label6.Text = "No se han podido cargar los vídeos." - Label7.Text = "No se han podido cargar las noticias." - LinkLabel31.Text = "Saber más" - LinkLabel32.Text = "Intentarlo de nuevo" - LinkLabel33.Text = "Intentarlo de nuevo" - LinkLabel34.Text = "Saber más" - Case 3 - ChangeComputerNameLink.Text = "Renommer" - Label1.Text = "Appartenance au domaine :" - Label2.Text = "Groupe de travail/Domaine :" - Label3.Text = "Configuration de l'adresse IP :" - Label4.Text = "Découvrir et commencer" - Label5.Text = "Rester à jour" - Label9.Text = "Le fait du jour" - LinkLabel27.Text = "Découvrez les nouveautés de cette version" - LinkLabel28.Text = "Commencer avec DISMTools et la gestion des images" - LinkLabel29.Text = "Gérer votre installation actuelle" - LinkLabel30.Text = "Gérer les installations Windows externes" - Label12.Text = "Apprendre en regardant des vidéos (en anglais)" - Label6.Text = "Impossible de charger le contenu vidéo." - Label7.Text = "Impossible de charger le fil d'actualité." - LinkLabel31.Text = "En savoir plus" - LinkLabel32.Text = "Réessayer" - LinkLabel33.Text = "Réessayer" - LinkLabel34.Text = "En savoir plus" - Case 4 - ChangeComputerNameLink.Text = "Renomear" - Label1.Text = "Pertença a um domínio:" - Label2.Text = "Grupo de trabalho/Domínio:" - Label3.Text = "Configuração do endereço IP:" - Label4.Text = "Explorar e começar" - Label5.Text = "Manter-se atualizado" - Label9.Text = "Curiosidade do dia" - LinkLabel27.Text = "Descubra as novidades desta versão" - LinkLabel28.Text = "Começar a utilizar o DISMTools e a manutenção de imagens" - LinkLabel29.Text = "Gerir a sua instalação atual" - LinkLabel30.Text = "Gerir instalações externas do Windows" - Label12.Text = "Aprenda assistindo a vídeos (em inglês)" - Label6.Text = "Não foi possível carregar o conteúdo de vídeo." - Label7.Text = "Não foi possível carregar o feed de notícias." - LinkLabel31.Text = "Saiba mais" - LinkLabel32.Text = "Tentar novamente" - LinkLabel33.Text = "Tentar novamente" - LinkLabel34.Text = "Saiba mais" - Case 5 - ChangeComputerNameLink.Text = "Rinomina" - Label1.Text = "Appartenenza al dominio:" - Label2.Text = "Gruppo di lavoro/Dominio:" - Label3.Text = "Configurazione dell'indirizzo IP:" - Label4.Text = "Esplora e inizia" - Label5.Text = "Rimani aggiornato" - Label9.Text = "Curiosità del giorno" - LinkLabel27.Text = "Scopri le novità di questa versione" - LinkLabel28.Text = "Inizia a utilizzare DISMTools e la gestione delle immagini" - LinkLabel29.Text = "Gestisci la tua installazione attuale" - LinkLabel30.Text = "Gestisci installazioni Windows esterne" - Label12.Text = "Impara guardando i video (in inglese)" - Label6.Text = "Impossibile caricare il contenuto video." - Label7.Text = "Impossibile caricare il feed delle notizie." - LinkLabel31.Text = "Ulteriori informazioni" - LinkLabel32.Text = "Riprova" - LinkLabel33.Text = "Riprova" - LinkLabel34.Text = "Ulteriori informazioni" - End Select + ' Infinity Home + ChangeComputerNameLink.Text = LocalizationService.ForSection("Main.Interface")("Rename.Link") + Label1.Text = LocalizationService.ForSection("Main.Interface")("DomainMembership.Label") + Label2.Text = LocalizationService.ForSection("Main.Interface")("WorkgroupDomain.Label") + Label3.Text = LocalizationService.ForSection("Main.Interface")("IP.Address.Config.Label") + Label4.Text = LocalizationService.ForSection("Main.Interface")("Explore.Get.Started.Label") + Label5.Text = LocalizationService.ForSection("Main.Interface")("Stay.Up.Date.Label") + Label9.Text = LocalizationService.ForSection("Main.Interface")("FactDay.Label") + LinkLabel27.Text = LocalizationService.ForSection("Main.Interface")("Learn.Snew.Link") + LinkLabel28.Text = LocalizationService.ForSection("Main.Interface")("Get.Started.DISM.Link") + LinkLabel29.Text = LocalizationService.ForSection("Main.Interface")("Manage.Install.Link") + LinkLabel30.Text = LocalizationService.ForSection("Main.Interface")("Manage.External.Link") + Label12.Text = LocalizationService.ForSection("Main.Interface")("Learn.Watching.Videos.Label") + Label6.Text = LocalizationService.ForSection("Main.Interface")("Video.Content.Loaded.Label") + Label7.Text = LocalizationService.ForSection("Main.Interface")("News.Feed.Loaded.Label") + LinkLabel31.Text = LocalizationService.ForSection("Main.Interface")("LearnMore.Link") + LinkLabel32.Text = LocalizationService.ForSection("Main.Interface")("Retry.Button") + LinkLabel33.Text = LocalizationService.ForSection("Main.News.Load")("Retry.Button") + LinkLabel34.Text = LocalizationService.ForSection("Main.News")("LearnMore.Link") + + RefreshInfinityHomeLocalizedInformation() + RefreshNewsFeedLocalizedInformation() + End Sub + + Private Sub RefreshNewsFeedLocalizedInformation() + If Not IsHandleCreated Then Exit Sub + + Try + If FeedContents IsNot Nothing AndAlso FeedContents.Items IsNot Nothing AndAlso FeedContents.Items.Any() Then + Label8.Text = GetNewsLastUpdatedText() + End If + Catch ex As Exception + DynaLog.LogMessage("Could not refresh localized news feed information: " & ex.Message) + End Try + End Sub + + Private Sub RefreshInfinityHomeLocalizedInformation() + If Not IsHandleCreated Then Exit Sub + + Try + DisplayInfinityComputerInformation() + Catch ex As Exception + DynaLog.LogMessage("Could not refresh Infinity Home localized information: " & ex.Message) + End Try End Sub Sub CheckDTProjHeaders(DTFileName As String) @@ -8171,31 +4428,7 @@ Public Class MainForm If RegistryControlPanel.Visible Then DynaLog.LogMessage("Second check determined the image registry control panel is still open. Cannot continue loading project until it's closed") Dim msg As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "The image registry control panel needs to be closed before loading projects." - Case "ESN" - msg = "El panel de control del registro de la imagen debe ser cerrado antes de cargar proyectos." - Case "FRA" - msg = "Le panneau de contrôle du registre des images doit être fermé avant le chargement des projets." - Case "PTB", "PTG" - msg = "O painel de controlo do registo de imagens tem de ser fechado antes de carregar projectos." - Case "ITA" - msg = "Prima di caricare i progetti il pannello di controllo del registro immagini deve essere chiuso." - End Select - Case 1 - msg = "The image registry control panel needs to be closed before loading projects." - Case 2 - msg = "El panel de control del registro de la imagen debe ser cerrado antes de cargar proyectos." - Case 3 - msg = "Le panneau de contrôle du registre des images doit être fermé avant le chargement des projets." - Case 4 - msg = "O painel de controlo do registo de imagens tem de ser fechado antes de carregar projectos." - Case 5 - msg = "Il pannello di controllo del registro immagini deve essere chiuso prima di caricare i progetti." - End Select + msg = LocalizationService.ForSection("Main.Project.Load.Guard")("Image.Registry.Message") MsgBox(msg, vbOKOnly + vbExclamation, Text) Exit Sub End If @@ -8206,7 +4439,7 @@ Public Class MainForm CheckDTProjHeaders(DTProjPath) If isSqlServerDTProj Then DynaLog.LogMessage("We are dealing with a SQL Server Data Tools project. Cancelling project load...") - MessageBox.Show("The specified project is not a DISMTools project.", Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + MessageBox.Show(LocalizationService.ForSection("Main.Messages")("Project.DISM.Tools.Label"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If SaveProjectToolStripMenuItem.Enabled = True @@ -8219,31 +4452,7 @@ Public Class MainForm Text &= " (debug mode)" End If DynaLog.LogMessage("Project name: " & prjName) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Loading project: " & Quote & prjName & Quote - Case "ESN" - PleaseWaitDialog.Label2.Text = "Cargando proyecto: " & Quote & prjName & Quote - Case "FRA" - PleaseWaitDialog.Label2.Text = "Chargement du projet en cours : " & Quote & prjName & Quote - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Carregar projeto: " & Quote & prjName & Quote - Case "ITA" - PleaseWaitDialog.Label2.Text = "Caricamento progetto: " & Quote & prjName & Quote - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Loading project: " & Quote & prjName & Quote - Case 2 - PleaseWaitDialog.Label2.Text = "Cargando proyecto: " & Quote & prjName & Quote - Case 3 - PleaseWaitDialog.Label2.Text = "Chargement du projet en cours : " & Quote & prjName & Quote - Case 4 - PleaseWaitDialog.Label2.Text = "Carregar projeto: " & Quote & prjName & Quote - Case 5 - PleaseWaitDialog.Label2.Text = "Caricamento progetto: " & Quote & prjName & Quote - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main.Project.Load").Format("LoadingProject.Label", prjName) PleaseWaitDialog.ShowDialog(Me) Label49.Text = prjName Label52.Text = DTProjPath @@ -8326,31 +4535,7 @@ Public Class MainForm projPath = DTProjPath projPath = projPath.Replace("\" & DTProjFileName & ".dtproj", "").Trim() DynaLog.LogMessage("Project name: " & prjName) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Loading project: " & Quote & prjName & Quote - Case "ESN" - PleaseWaitDialog.Label2.Text = "Cargando proyecto: " & Quote & prjName & Quote - Case "FRA" - PleaseWaitDialog.Label2.Text = "Chargement du projet en cours : " & Quote & prjName & Quote - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Carregar projeto: " & Quote & prjName & Quote - Case "ITA" - PleaseWaitDialog.Label2.Text = "Caricamento progetto: " & Quote & prjName & Quote - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Loading project: " & Quote & prjName & Quote - Case 2 - PleaseWaitDialog.Label2.Text = "Cargando proyecto: " & Quote & prjName & Quote - Case 3 - PleaseWaitDialog.Label2.Text = "Chargement du projet en cours : " & Quote & prjName & Quote - Case 4 - PleaseWaitDialog.Label2.Text = "Carregar projeto: " & Quote & prjName & Quote - Case 5 - PleaseWaitDialog.Label2.Text = "Caricamento progetto: " & Quote & prjName & Quote - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main.Project.Load").Format("LoadingProject.Label", prjName) PleaseWaitDialog.ShowDialog(Me) Label49.Text = prjName DynaLog.LogMessage("Detecting if images are mounted here...") @@ -8496,31 +4681,7 @@ Public Class MainForm projPath = DTProjPath projPath = projPath.Replace("\" & DTProjFileName & ".dtproj", "").Trim() DynaLog.LogMessage("Project name: " & prjName) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Loading project: " & Quote & prjName & Quote - Case "ESN" - PleaseWaitDialog.Label2.Text = "Cargando proyecto: " & Quote & prjName & Quote - Case "FRA" - PleaseWaitDialog.Label2.Text = "Chargement du projet en cours : " & Quote & prjName & Quote - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Carregar projeto: " & Quote & prjName & Quote - Case "ITA" - PleaseWaitDialog.Label2.Text = "Caricamento progetto: " & Quote & prjName & Quote - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Loading project: " & Quote & prjName & Quote - Case 2 - PleaseWaitDialog.Label2.Text = "Cargando proyecto: " & Quote & prjName & Quote - Case 3 - PleaseWaitDialog.Label2.Text = "Chargement du projet en cours : " & Quote & prjName & Quote - Case 4 - PleaseWaitDialog.Label2.Text = "Carregar projeto: " & Quote & prjName & Quote - Case 5 - PleaseWaitDialog.Label2.Text = "Caricamento progetto: " & Quote & prjName & Quote - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main.Project.Load").Format("LoadingProject.Label", prjName) PleaseWaitDialog.ShowDialog(Me) Label49.Text = prjName DynaLog.LogMessage("Detecting if images are mounted here...") @@ -8674,7 +4835,7 @@ Public Class MainForm BackgroundProcessesButton.Image = GetGlyphResource("bg_ops_complete") Else DynaLog.LogMessage("Project file doesn't exist.") - MessageBox.Show("Cannot load the project. Reason: the project was not found. It may have been moved or its folder may have been deleted.", "Project load error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) + MessageBox.Show(LocalizationService.ForSection("Main.Messages.Validation")("Cannot.Load.Project.Message"), LocalizationService.ForSection("Main.Messages.Validation")("Project.Load.Error.Title"), MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1) If DialogResult.OK Then Exit Sub End If @@ -8758,8 +4919,8 @@ Public Class MainForm ProjectValueLoadForm.EpochRTB2.Text = DateTimeOffset.FromUnixTimeSeconds(CType(ProjectValueLoadForm.RichTextBox22.Text, Long)).ToString().Replace(" +00:00", "").Trim() ProjectValueLoadForm.EpochRTB3.Text = DateTimeOffset.FromUnixTimeSeconds(CType(ProjectValueLoadForm.RichTextBox23.Text, Long)).ToString().Replace(" +00:00", "").Trim() Catch ex As Exception - ProjectValueLoadForm.EpochRTB2.Text = "Not available" - ProjectValueLoadForm.EpochRTB3.Text = "Not available" + ProjectValueLoadForm.EpochRTB2.Text = LocalizationService.ForSection("Wait")("NotAvailable.Label") + ProjectValueLoadForm.EpochRTB3.Text = LocalizationService.ForSection("Wait")("ProjectValue.Label") End Try DynaLog.LogMessage("Configured project settings:" & CrLf & ProjectValueLoadForm.RichTextBox26.Text) If Debugger.IsAttached Then @@ -8788,31 +4949,7 @@ Public Class MainForm If ImgBW.IsBusy Then DynaLog.LogMessage("Background processes are busy. Ask the user what they want to do") Dim msg As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Background processes are still gathering information about this image. Do you want to cancel them?" - Case "ESN" - msg = "Procesos en segundo plano todavía están recopilando información de esta imagen. ¿Desea cancelarlos?" - Case "FRA" - msg = "Les processus en arrière-plan sont encore en train de recueillir des informations sur cette image. Voulez-vous les annuler ?" - Case "PTB", "PTG" - msg = "Os processos em segundo plano ainda estão a recolher informações sobre esta imagem. Deseja cancelá-los?" - Case "ITA" - msg = "I processi in background stanno ancora raccogliendo informazioni sull'immagine. Vuoi annullarli?" - End Select - Case 1 - msg = "Background processes are still gathering information about this image. Do you want to cancel them?" - Case 2 - msg = "Procesos en segundo plano todavía están recopilando información de esta imagen. ¿Desea cancelarlos?" - Case 3 - msg = "Les processus en arrière-plan sont encore en train de recueillir des informations sur cette image. Voulez-vous les annuler ?" - Case 4 - msg = "Os processos em segundo plano ainda estão a recolher informações sobre esta imagem. Deseja cancelá-los?" - Case 5 - msg = "I processi in background stanno ancora raccogliendo informazioni sull'immagine. Si desidera annullarli?" - End Select + msg = LocalizationService.ForSection("Main.Project.Unload")("Bg.Procs.Still.Message") If MsgBox(msg, vbYesNo + vbQuestion, Text) = MsgBoxResult.Yes Then DynaLog.LogMessage("Cancelling background processes...") ImgBW.CancelAsync() @@ -8820,62 +4957,14 @@ Public Class MainForm DynaLog.LogMessage("User decided not to cancel background processes. Exiting procedure...") Exit Sub End If - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Cancelling background processes. Please wait..." - Case "ESN" - MenuDesc.Text = "Espere mientras cancelamos los procesos en segundo plano..." - Case "FRA" - MenuDesc.Text = "Annulation des processus en arrière plan en cours. Veuillez patienter ..." - Case "PTB", "PTG" - MenuDesc.Text = "Cancelamento de processos em segundo plano. Por favor, aguarde..." - Case "ITA" - MenuDesc.Text = "Annullamento dei processi in background..." - End Select - Case 1 - MenuDesc.Text = "Cancelling background processes. Please wait..." - Case 2 - MenuDesc.Text = "Espere mientras cancelamos los procesos en segundo plano..." - Case 3 - MenuDesc.Text = "Annulation des processus en arrière plan en cours. Veuillez patienter ..." - Case 4 - MenuDesc.Text = "Cancelamento de processos em segundo plano. Por favor, aguarde..." - Case 5 - MenuDesc.Text = "Annullamento dei processi in backround..." - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.Project.Unload")("Cancelling.Bg.Procs.Button") While ImgBW.IsBusy() ToolStripButton3.Enabled = False Application.DoEvents() Thread.Sleep(100) End While ToolStripButton3.Enabled = True - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Ready" - Case "ESN" - MenuDesc.Text = "Listo" - Case "FRA" - MenuDesc.Text = "Prêt" - Case "PTB", "PTG" - MenuDesc.Text = "Pronto" - Case "ITA" - MenuDesc.Text = "Pronto" - End Select - Case 1 - MenuDesc.Text = "Ready" - Case 2 - MenuDesc.Text = "Listo" - Case 3 - MenuDesc.Text = "Prêt" - Case 4 - MenuDesc.Text = "Pronto" - Case 5 - MenuDesc.Text = "Pronto" - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.Project.Unload")("Ready.Item") End If bwBackgroundProcessAction = 0 bwGetImageInfo = True @@ -8982,61 +5071,13 @@ Public Class MainForm End If IsImageMounted = True isProjectLoaded = True - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Online installation - DISMTools" - Case "ESN" - Text = "Instalación activa - DISMTools" - Case "FRA" - Text = "Installation en ligne - DISMTools" - Case "PTB", "PTG" - Text = "Instalação em linha - DISMTools" - Case "ITA" - Text = "Installazione online - DISMTools" - End Select - Case 1 - Text = "Online installation - DISMTools" - Case 2 - Text = "Instalación activa - DISMTools" - Case 3 - Text = "Installation en ligne - DISMTools" - Case 4 - Text = "Instalação em linha - DISMTools" - Case 5 - Text = "Installazione attiva - DISMTools" - End Select + Text = LocalizationService.ForSection("Main.OnlineManagement.Start")("Install.DISM.Tools.Label") OnlineManagement = True ' Initialize background processes bwGetImageInfo = True bwGetAdvImgInfo = True bwBackgroundProcessAction = 0 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label50.Text = "Yes" - Case "ESN" - Label50.Text = "Sí" - Case "FRA" - Label50.Text = "Oui" - Case "PTB", "PTG" - Label50.Text = "Sim" - Case "ITA" - Label50.Text = "Sì" - End Select - Case 1 - Label50.Text = "Yes" - Case 2 - Label50.Text = "Sí" - Case 3 - Label50.Text = "Oui" - Case 4 - Label50.Text = "Sim" - Case 5 - Label50.Text = "Sì" - End Select + Label50.Text = LocalizationService.ForSection("Main.OnlineManagement.Start")("Yes.Button") DynaLog.LogMessage("Clearing items in project tree. We don't need them") UnpopulateProjectTree() HomePanel.Visible = False @@ -9051,41 +5092,8 @@ Public Class MainForm Refresh() ' Saving a project is not possible in online mode ToolStripButton2.Enabled = False - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label41.Text = "(Online installation)" - Label44.Text = "(Online installation)" - Case "ESN" - Label41.Text = "(Instalación activa)" - Label44.Text = "(Instalación activa)" - Case "FRA" - Label41.Text = "(Installation en ligne)" - Label44.Text = "(Installation en ligne)" - Case "PTB", "PTG" - Label41.Text = "(Instalação em linha)" - Label44.Text = "(Instalação em linha)" - Case "ITA" - Label41.Text = "(Installazione online)" - Label44.Text = "(Installazione online)" - End Select - Case 1 - Label41.Text = "(Online installation)" - Label44.Text = "(Online installation)" - Case 2 - Label41.Text = "(Instalación activa)" - Label44.Text = "(Instalación activa)" - Case 3 - Label41.Text = "(Installation en ligne)" - Label44.Text = "(Installation en ligne)" - Case 4 - Label41.Text = "(Instalação em linha)" - Label44.Text = "(Instalação em linha)" - Case 5 - Label41.Text = "(Installazione online)" - Label44.Text = "(Installazione online)" - End Select + Label41.Text = LocalizationService.ForSection("Main.OnlineManagement.Start")("Install.Label") + Label44.Text = LocalizationService.ForSection("Main.OnlineManagement.Start")("Install.Label") Panel2.Visible = False ManageOnlineInstallationToolStripMenuItem.Enabled = False DynaLog.LogMessage("Setting mount directory to disk root...") @@ -9104,31 +5112,7 @@ Public Class MainForm If RegistryControlPanel.Visible Then DynaLog.LogMessage("Second check determined the image registry control panel is still open. Cannot continue loading project until it's closed") Dim msg As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "The image registry control panel needs to be closed before loading this mode." - Case "ESN" - msg = "El panel de control del registro de la imagen debe ser cerrado antes de cargar este modo." - Case "FRA" - msg = "Le panneau de contrôle du registre des images doit être fermé avant de charger ce mode." - Case "PTB", "PTG" - msg = "O painel de controlo do registo de imagens tem de ser fechado antes de carregar este modo." - Case "ITA" - msg = "Prima di caricare questa modalità il pannello di controllo del registro immagini deve essere chiuso." - End Select - Case 1 - msg = "The image registry control panel needs to be closed before loading this mode." - Case 2 - msg = "El panel de control del registro de la imagen debe ser cerrado antes de cargar este modo." - Case 3 - msg = "Le panneau de contrôle du registre des images doit être fermé avant de charger ce mode." - Case 4 - msg = "O painel de controlo do registo de imagens tem de ser fechado antes de carregar este modo." - Case 5 - msg = "Prima di caricare questa modalità Il pannello di controllo del registro immagini deve essere chiuso." - End Select + msg = LocalizationService.ForSection("Main.OfflineManagement")("Image.Registry.Message") MsgBox(msg, vbOKOnly + vbExclamation, Text) Exit Sub End If @@ -9136,61 +5120,13 @@ Public Class MainForm DynaLog.LogMessage("Either the control panel was closed successfully or wasn't opened in the first place. Continuing project load...") IsImageMounted = True isProjectLoaded = True - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Offline installation - DISMTools" - Case "ESN" - Text = "Instalación fuera de línea - DISMTools" - Case "FRA" - Text = "Installation hors ligne - DISMTools" - Case "PTB", "PTG" - Text = "Instalação offline - DISMTools" - Case "ITA" - Text = "Installazione offline - DISMTools" - End Select - Case 1 - Text = "Offline installation - DISMTools" - Case 2 - Text = "Instalación fuera de línea - DISMTools" - Case 3 - Text = "Installation hors ligne - DISMTools" - Case 4 - Text = "Instalação offline - DISMTools" - Case 5 - Text = "Installazione offline - DISMTools" - End Select + Text = LocalizationService.ForSection("Main.OfflineManagement")("OfflineInstall.Label") OfflineManagement = True ' Initialize background processes bwGetImageInfo = True bwGetAdvImgInfo = True bwBackgroundProcessAction = 0 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label50.Text = "Yes" - Case "ESN" - Label50.Text = "Sí" - Case "FRA" - Label50.Text = "Oui" - Case "PTB", "PTG" - Label50.Text = "Sim" - Case "ITA" - Label50.Text = "Sì" - End Select - Case 1 - Label50.Text = "Yes" - Case 2 - Label50.Text = "Sí" - Case 3 - Label50.Text = "Oui" - Case 4 - Label50.Text = "Sim" - Case 5 - Label50.Text = "Sì" - End Select + Label50.Text = LocalizationService.ForSection("Main.OfflineManagement")("Yes.Button") DynaLog.LogMessage("Clearing items in project tree. We don't need them") UnpopulateProjectTree() HomePanel.Visible = False @@ -9205,43 +5141,9 @@ Public Class MainForm Refresh() ' Saving a project is not possible in offline mode either ToolStripButton2.Enabled = False - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label41.Text = "(Offline installation)" - Label44.Text = "(Offline installation)" - Case "ESN" - Label41.Text = "(Instalación fuera de línea)" - Label44.Text = "(Instalación fuera de línea)" - Case "FRA" - Label41.Text = "(Installation hors ligne)" - Label44.Text = "(Installation hors ligne)" - Case "PTB", "PTG" - Label41.Text = "(Instalação offline)" - Label44.Text = "(Instalação offline)" - Case "ITA" - Label41.Text = "(Installazione offline)" - Label44.Text = "(Installazione offline)" - End Select - Case 1 - Label41.Text = "(Offline installation)" - Label44.Text = "(Offline installation)" - Case 2 - Label41.Text = "(Instalación fuera de línea)" - Label44.Text = "(Instalación fuera de línea)" - Case 3 - Label41.Text = "(Installation hors ligne)" - Label44.Text = "(Installation hors ligne)" - Case 4 - Label41.Text = "(Instalação offline)" - Label44.Text = "(Instalação offline)" - Case 5 - Label41.Text = "(Installazione offline)" - Label44.Text = "(Installazione offline)" - End Select + Label41.Text = LocalizationService.ForSection("Main.OfflineManagement")("Install.Label") + Label44.Text = LocalizationService.ForSection("Main.OfflineManagement")("Install.Label") Panel2.Visible = False - ManageOfflineInstallationToolStripMenuItem.Enabled = False DynaLog.LogMessage("Setting mount directory to disk...") MountDir = ImageDrive DynaLog.LogMessage("Beginning background processes...") @@ -9253,31 +5155,7 @@ Public Class MainForm If ImgBW.IsBusy Then DynaLog.LogMessage("Background processes are busy. Ask the user what they want to do") Dim msg As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Background processes are still gathering information about this image. Do you want to cancel them?" - Case "ESN" - msg = "Procesos en segundo plano todavía están recopilando información de esta imagen. ¿Desea cancelarlos?" - Case "FRA" - msg = "Les processus en arrière-plan sont encore en train de recueillir des informations sur cette image. Voulez-vous les annuler ?" - Case "PTB", "PTG" - msg = "Os processos em segundo plano ainda estão a recolher informações sobre esta imagem. Deseja cancelá-los?" - Case "ITA" - msg = "I processi in background stanno ancora raccogliendo informazioni sull'immagine. Vuoi annullarli?" - End Select - Case 1 - msg = "Background processes are still gathering information about this image. Do you want to cancel them?" - Case 2 - msg = "Procesos en segundo plano todavía están recopilando información de esta imagen. ¿Desea cancelarlos?" - Case 3 - msg = "Les processus en arrière-plan sont encore en train de recueillir des informations sur cette image. Voulez-vous les annuler ?" - Case 4 - msg = "Os processos em segundo plano ainda estão a recolher informações sobre esta imagem. Deseja cancelá-los?" - Case 5 - msg = "I processi in background stanno ancora raccogliendo informazioni sull'immagine. Vuoi annullarli?" - End Select + msg = LocalizationService.ForSection("Main.EndOfflineMgmt")("Bg.Procs.Still.Message") If MsgBox(msg, vbYesNo + vbQuestion, Text) = MsgBoxResult.Yes Then DynaLog.LogMessage("Cancelling background processes...") ImgBW.CancelAsync() @@ -9285,62 +5163,14 @@ Public Class MainForm DynaLog.LogMessage("User decided not to cancel background processes. Exiting procedure...") Exit Sub End If - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Cancelling background processes. Please wait..." - Case "ESN" - MenuDesc.Text = "Espere mientras cancelamos los procesos en segundo plano..." - Case "FRA" - MenuDesc.Text = "Annulation des processus en arrière plan en cours. Veuillez patienter ..." - Case "PTB", "PTG" - MenuDesc.Text = "Cancelamento de processos em segundo plano. Por favor, aguarde..." - Case "ITA" - MenuDesc.Text = "Annullamento dei processi in background..." - End Select - Case 1 - MenuDesc.Text = "Cancelling background processes. Please wait..." - Case 2 - MenuDesc.Text = "Espere mientras cancelamos los procesos en segundo plano..." - Case 3 - MenuDesc.Text = "Annulation des processus en arrière plan en cours. Veuillez patienter ..." - Case 4 - MenuDesc.Text = "Cancelamento de processos em segundo plano. Por favor, aguarde..." - Case 5 - MenuDesc.Text = "Annullamento dei processi in background..." - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.EndOfflineMgmt")("Cancelling.Bg.Procs.Button") While ImgBW.IsBusy() ToolStripButton3.Enabled = False Application.DoEvents() Thread.Sleep(100) End While ToolStripButton3.Enabled = True - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Ready" - Case "ESN" - MenuDesc.Text = "Listo" - Case "FRA" - MenuDesc.Text = "Prêt" - Case "PTB", "PTG" - MenuDesc.Text = "Pronto" - Case "ITA" - MenuDesc.Text = "Pronto" - End Select - Case 1 - MenuDesc.Text = "Ready" - Case 2 - MenuDesc.Text = "Listo" - Case 3 - MenuDesc.Text = "Prêt" - Case 4 - MenuDesc.Text = "Pronto" - Case 5 - MenuDesc.Text = "Pronto" - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.EndOffline")("Ready.Item") End If bwBackgroundProcessAction = 0 bwGetImageInfo = True @@ -9349,31 +5179,7 @@ Public Class MainForm isProjectLoaded = False Text = "DISMTools" OfflineManagement = False - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label50.Text = "Yes" - Case "ESN" - Label50.Text = "Sí" - Case "FRA" - Label50.Text = "Oui" - Case "PTB", "PTG" - Label50.Text = "Sim" - Case "ITA" - Label50.Text = "Sì" - End Select - Case 1 - Label50.Text = "Yes" - Case 2 - Label50.Text = "Sí" - Case 3 - Label50.Text = "Oui" - Case 4 - Label50.Text = "Sim" - Case 5 - Label50.Text = "Sì" - End Select + Label50.Text = LocalizationService.ForSection("Main.EndOffline")("Yes.Button") HomePanel.Visible = True PrjPanel.Visible = False RemountImageWithWritePermissionsToolStripMenuItem.Enabled = False @@ -9393,42 +5199,21 @@ Public Class MainForm Button29.Enabled = True Panel2.Visible = True BGProcDetails.Hide() - ManageOfflineInstallationToolStripMenuItem.Enabled = True DynaLog.LogMessage("Clearing completion state of background processes...") Array.Clear(CompletedTasks, 0, CompletedTasks.Length) PendingTasks = Enumerable.Repeat(True, PendingTasks.Count).ToArray() MountDir = "" + If LockUnlockedVolumes AndAlso InBitLockerMode Then + LockVolumeDialog.DriveLetter = drivePath + LockVolumeDialog.ShowDialog(Me) + End If End Sub Sub EndOnlineManagement() If ImgBW.IsBusy Then DynaLog.LogMessage("Background processes are busy. Ask the user what they want to do") Dim msg As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Background processes are still gathering information about this image. Do you want to cancel them?" - Case "ESN" - msg = "Procesos en segundo plano todavía están recopilando información de esta imagen. ¿Desea cancelarlos?" - Case "FRA" - msg = "Les processus en arrière-plan sont encore en train de recueillir des informations sur cette image. Voulez-vous les annuler ?" - Case "PTB", "PTG" - msg = "Os processos em segundo plano ainda estão a recolher informações sobre esta imagem. Deseja cancelá-los?" - Case "ITA" - msg = "I processi in background stanno ancora raccogliendo informazioni sull'immagine. Vuoi annullarli?" - End Select - Case 1 - msg = "Background processes are still gathering information about this image. Do you want to cancel them?" - Case 2 - msg = "Procesos en segundo plano todavía están recopilando información de esta imagen. ¿Desea cancelarlos?" - Case 3 - msg = "Les processus en arrière-plan sont encore en train de recueillir des informations sur cette image. Voulez-vous les annuler ?" - Case 4 - msg = "Os processos em segundo plano ainda estão a recolher informações sobre esta imagem. Deseja cancelá-los?" - Case 5 - msg = "I processi in background stanno ancora raccogliendo informazioni sull'immagine. Vuoi annullarli?" - End Select + msg = LocalizationService.ForSection("Main.EndOnlineMgmt")("Bg.Procs.Still.Message") If MsgBox(msg, vbYesNo + vbQuestion, Text) = MsgBoxResult.Yes Then DynaLog.LogMessage("Cancelling background processes...") ImgBW.CancelAsync() @@ -9436,62 +5221,14 @@ Public Class MainForm DynaLog.LogMessage("User decided not to cancel background processes. Exiting procedure...") Exit Sub End If - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Cancelling background processes. Please wait..." - Case "ESN" - MenuDesc.Text = "Espere mientras cancelamos los procesos en segundo plano..." - Case "FRA" - MenuDesc.Text = "Annulation des processus en arrière plan en cours. Veuillez patienter ..." - Case "PTB", "PTG" - MenuDesc.Text = "Cancelamento de processos em segundo plano. Por favor, aguarde..." - Case "ITA" - MenuDesc.Text = "Annullamento dei processi in background..." - End Select - Case 1 - MenuDesc.Text = "Cancelling background processes. Please wait..." - Case 2 - MenuDesc.Text = "Espere mientras cancelamos los procesos en segundo plano..." - Case 3 - MenuDesc.Text = "Annulation des processus en arrière plan en cours. Veuillez patienter ..." - Case 4 - MenuDesc.Text = "Cancelamento de processos em segundo plano. Por favor, aguarde..." - Case 5 - MenuDesc.Text = "Annullamento dei processi in background..." - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.EndOnlineMgmt")("Cancelling.Bg.Procs.Button") While ImgBW.IsBusy() ToolStripButton3.Enabled = False Application.DoEvents() Thread.Sleep(100) End While ToolStripButton3.Enabled = True - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Ready" - Case "ESN" - MenuDesc.Text = "Listo" - Case "FRA" - MenuDesc.Text = "Prêt" - Case "PTB", "PTG" - MenuDesc.Text = "Pronto" - Case "ITA" - MenuDesc.Text = "Pronto" - End Select - Case 1 - MenuDesc.Text = "Ready" - Case 2 - MenuDesc.Text = "Listo" - Case 3 - MenuDesc.Text = "Prêt" - Case 4 - MenuDesc.Text = "Pronto" - Case 5 - MenuDesc.Text = "Pronto" - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.EndOnline")("Ready.Item") End If bwBackgroundProcessAction = 0 bwGetImageInfo = True @@ -9500,31 +5237,7 @@ Public Class MainForm isProjectLoaded = False Text = "DISMTools" OnlineManagement = False - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label50.Text = "Yes" - Case "ESN" - Label50.Text = "Sí" - Case "FRA" - Label50.Text = "Oui" - Case "PTB", "PTG" - Label50.Text = "Sim" - Case "ITA" - Label50.Text = "Sì" - End Select - Case 1 - Label50.Text = "Yes" - Case 2 - Label50.Text = "Sí" - Case 3 - Label50.Text = "Oui" - Case 4 - Label50.Text = "Sim" - Case 5 - Label50.Text = "Sì" - End Select + Label50.Text = LocalizationService.ForSection("Main.EndOnline")("Yes.Button") HomePanel.Visible = True PrjPanel.Visible = False RemountImageWithWritePermissionsToolStripMenuItem.Enabled = False @@ -9557,37 +5270,13 @@ Public Class MainForm DynaLog.LogMessage("- Is the mounted image read-only? " & If(IsReadOnly, "Yes", "No")) DynaLog.LogMessage("- Skip background processes? " & If(SkipBGProcs, "Yes", "No")) If WasImageMounted Then - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label50.Text = "Yes" - Case "ESN" - Label50.Text = "Sí" - Case "FRA" - Label50.Text = "Oui" - Case "PTB", "PTG" - Label50.Text = "Sim" - Case "ITA" - Label50.Text = "Sì" - End Select - Case 1 - Label50.Text = "Yes" - Case 2 - Label50.Text = "Sí" - Case 3 - Label50.Text = "Oui" - Case 4 - Label50.Text = "Sim" - Case 5 - Label50.Text = "Sì" - End Select + Label50.Text = LocalizationService.ForSection("Main.UpdateProjProps")("Yes.Button") LinkLabel14.Visible = False ImageView_NoImage.Visible = False ImageView_BasicInfo.Visible = True IsImageMounted = True Else - Label50.Text = "No" + Label50.Text = LocalizationService.ForSection("Main.UpdateProjProps")("No.Button") LinkLabel14.Visible = True ImageView_NoImage.Visible = True ImageView_BasicInfo.Visible = False @@ -9654,121 +5343,16 @@ Public Class MainForm prjTreeStatus.Visible = True DynaLog.LogMessage("Adding tree nodes...") Try - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - prjTreeView.Nodes.Add("parent", "Project: " & Quote & MainProjNameNode & Quote) - prjTreeView.Nodes("parent").Nodes.Add("dandi", "ADK Deployment Tools") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", "Deployment Tools (x86)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", "Deployment Tools (AMD64)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", "Deployment Tools (ARM)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", "Deployment Tools (ARM64)") - prjTreeView.Nodes("parent").Nodes.Add("mount", "Mount point") - prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", "Unattended answer files") - prjTreeView.Nodes("parent").Nodes.Add("scr_temp", "Scratch directory") - prjTreeView.Nodes("parent").Nodes.Add("reports", "Project reports") - Case "ESN" - prjTreeView.Nodes.Add("parent", "Proyecto: " & Quote & MainProjNameNode & Quote) - prjTreeView.Nodes("parent").Nodes.Add("dandi", "Herramientas de implementación") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", "Herramientas de implementación (x86)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", "Herramientas de implementación (AMD64)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", "Herramientas de implementación (ARM)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", "Herramientas de implementación (ARM64)") - prjTreeView.Nodes("parent").Nodes.Add("mount", "Punto de montaje") - prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", "Archivos de respuesta desatendida") - prjTreeView.Nodes("parent").Nodes.Add("scr_temp", "Directorio temporal") - prjTreeView.Nodes("parent").Nodes.Add("reports", "Informes del proyecto") - Case "FRA" - prjTreeView.Nodes.Add("parent", "Projet: " & Quote & MainProjNameNode & Quote) - prjTreeView.Nodes("parent").Nodes.Add("dandi", "Outils de déploiement ADK") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", "Outils de déploiement (x86)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", "Outils de déploiement (AMD64)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", "Outils de déploiement (ARM)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", "Outils de déploiement (ARM64)") - prjTreeView.Nodes("parent").Nodes.Add("mount", "Point de montage") - prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", "Fichiers de réponse non surveillés") - prjTreeView.Nodes("parent").Nodes.Add("scr_temp", "Répertoire temporaire") - prjTreeView.Nodes("parent").Nodes.Add("reports", "Rapports de projet") - Case "PTB", "PTG" - prjTreeView.Nodes.Add("parent", "Projeto: " & Quote & MainProjNameNode & Quote) - prjTreeView.Nodes("parent").Nodes.Add("dandi", "Ferramentas de implantação do ADK") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", "Ferramentas de implementação (x86)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", "Ferramentas de implementação (AMD64)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", "Ferramentas de implementação (ARM)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", "Ferramentas de implementação (ARM64)") - prjTreeView.Nodes("parent").Nodes.Add("mount", "Ponto de montagem") - prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", "Ficheiros de resposta não assistidos") - prjTreeView.Nodes("parent").Nodes.Add("scr_temp", "Diretório temporário") - prjTreeView.Nodes("parent").Nodes.Add("reports", "Relatórios de projectos") - Case "ITA" - prjTreeView.Nodes.Add("parent", "Progetto: " & Quote & MainProjNameNode & Quote) - prjTreeView.Nodes("parent").Nodes.Add("dandi", "Strumenti implementazione ADK") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", "Strumenti implementazione (x86)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", "Strumenti implementazione (AMD64)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", "Strumenti implementazione (ARM)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", "Strumenti installazione (ARM64)") - prjTreeView.Nodes("parent").Nodes.Add("mount", "Punto montaggio") - prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", "File risposte non presidiate") - prjTreeView.Nodes("parent").Nodes.Add("scr_temp", "Cartella temporanea") - prjTreeView.Nodes("parent").Nodes.Add("reports", "Rapporti progetto") - End Select - Case 1 - prjTreeView.Nodes.Add("parent", "Project: " & Quote & MainProjNameNode & Quote) - prjTreeView.Nodes("parent").Nodes.Add("dandi", "ADK Deployment Tools") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", "Deployment Tools (x86)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", "Deployment Tools (AMD64)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", "Deployment Tools (ARM)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", "Deployment Tools (ARM64)") - prjTreeView.Nodes("parent").Nodes.Add("mount", "Mount point") - prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", "Unattended answer files") - prjTreeView.Nodes("parent").Nodes.Add("scr_temp", "Scratch directory") - prjTreeView.Nodes("parent").Nodes.Add("reports", "Project reports") - Case 2 - prjTreeView.Nodes.Add("parent", "Proyecto: " & Quote & MainProjNameNode & Quote) - prjTreeView.Nodes("parent").Nodes.Add("dandi", "Herramientas de implementación") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", "Herramientas de implementación (x86)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", "Herramientas de implementación (AMD64)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", "Herramientas de implementación (ARM)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", "Herramientas de implementación (ARM64)") - prjTreeView.Nodes("parent").Nodes.Add("mount", "Punto de montaje") - prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", "Archivos de respuesta desatendida") - prjTreeView.Nodes("parent").Nodes.Add("scr_temp", "Directorio temporal") - prjTreeView.Nodes("parent").Nodes.Add("reports", "Informes del proyecto") - Case 3 - prjTreeView.Nodes.Add("parent", "Projet: " & Quote & MainProjNameNode & Quote) - prjTreeView.Nodes("parent").Nodes.Add("dandi", "Outils de déploiement ADK") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", "Outils de déploiement (x86)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", "Outils de déploiement (AMD64)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", "Outils de déploiement (ARM)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", "Outils de déploiement (ARM64)") - prjTreeView.Nodes("parent").Nodes.Add("mount", "Point de montage") - prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", "Fichiers de réponse non surveillés") - prjTreeView.Nodes("parent").Nodes.Add("scr_temp", "Répertoire temporaire") - prjTreeView.Nodes("parent").Nodes.Add("reports", "Rapports de projet") - Case 4 - prjTreeView.Nodes.Add("parent", "Projeto: " & Quote & MainProjNameNode & Quote) - prjTreeView.Nodes("parent").Nodes.Add("dandi", "Ferramentas de implantação do ADK") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", "Ferramentas de implementação (x86)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", "Ferramentas de implementação (AMD64)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", "Ferramentas de implementação (ARM)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", "Ferramentas de implementação (ARM64)") - prjTreeView.Nodes("parent").Nodes.Add("mount", "Ponto de montagem") - prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", "Ficheiros de resposta não assistidos") - prjTreeView.Nodes("parent").Nodes.Add("scr_temp", "Diretório temporário") - prjTreeView.Nodes("parent").Nodes.Add("reports", "Relatórios de projectos") - Case 5 - prjTreeView.Nodes.Add("parent", "Progetto: " & Quote & MainProjNameNode & Quote) - prjTreeView.Nodes("parent").Nodes.Add("dandi", "Strumenti di implementazione ADK") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", "Strumenti di implementazione (x86)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", "Strumenti di implementazione (AMD64)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", "Strumenti di implementazione (ARM)") - prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", "Strumenti di installazione (ARM64)") - prjTreeView.Nodes("parent").Nodes.Add("mount", "Punto di montaggio") - prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", "File di risposta non presidiati") - prjTreeView.Nodes("parent").Nodes.Add("scr_temp", "Directory temporanea") - prjTreeView.Nodes("parent").Nodes.Add("reports", "Rapporti del progetto") - End Select + prjTreeView.Nodes.Add("parent", LocalizationService.ForSection("Main.Project.Load").Format("Project.Label", MainProjNameNode)) + prjTreeView.Nodes("parent").Nodes.Add("dandi", LocalizationService.ForSection("Main.Project.Load")("Adkdeployment.Tools.Label")) + prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_x86", LocalizationService.ForSection("Main.Project.Load")("DeploymentTools.X86.Label")) + prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_amd64", LocalizationService.ForSection("Main.Project.Load")("Deployment.Tools.Label")) + prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm", LocalizationService.ForSection("Main.Project.Load")("DeploymentTools.ARM.Label")) + prjTreeView.Nodes("parent").Nodes("dandi").Nodes.Add("dandi_arm64", LocalizationService.ForSection("Main.Project.Load")("DeploymentTools.ARM64.Label")) + prjTreeView.Nodes("parent").Nodes.Add("mount", LocalizationService.ForSection("Main.Project.Load")("MountPoint.Label")) + prjTreeView.Nodes("parent").Nodes.Add("unattend_xml", LocalizationService.ForSection("Main.Project.Load")("Unattended.Answer.Label")) + prjTreeView.Nodes("parent").Nodes.Add("scr_temp", LocalizationService.ForSection("Main.Project.Load")("ScratchDirectory.Label")) + prjTreeView.Nodes("parent").Nodes.Add("reports", LocalizationService.ForSection("Main.Project.Load")("ProjectReports.Label")) prjTreeView.ExpandAll() Catch ex As Exception @@ -9785,15 +5369,15 @@ Public Class MainForm Sub ShowParentDesc(ParentDescMode As Integer) Select Case ParentDescMode Case 1 - MenuDesc.Text = "View options related to files, like creating or opening projects" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowParentDesc")("View.Options.Related.Item") Case 2 - MenuDesc.Text = "View options related to this project, like viewing its properties" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowParentDesc")("View.Options.Project.Item") Case 3 - MenuDesc.Text = "View options related to image management, deployment and/or servicing" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowParentDesc")("View.Options.Image.Item") Case 4 - MenuDesc.Text = "View options related to additional tools, like the Command Console" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowParentDesc")("View.Options.Additional.Item") Case 5 - MenuDesc.Text = "View options related to help topics, glossary, command help and product information" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowParentDesc")("View.Options.Help.Item") Case Else ' Do not show anything End Select @@ -9805,349 +5389,253 @@ Public Class MainForm ' ChildDescMode follows the same style as ProgressPanel.OperationNum Select Case CommandDescriptionInt Case 1 - MenuDesc.Text = "Adds an additional image to a .wim file" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Adds.Additional.Item") Case 2 - MenuDesc.Text = "Applies a Full Flash Utility or split FFU to a physical drive" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Applies.Full.Flash.Item") Case 3 - MenuDesc.Text = "Applies a Windows image or split WIM to a partition" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Applies.Windows.Image.Item") Case 4 - MenuDesc.Text = "Captures incremental file changes on the specific WIM file to " & Quote & "custom.wim" & Quote + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Captures.Incremen.File.Item") Case 5 - MenuDesc.Text = "Captures an image of a drive's partitions to a new FFU file" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Captures.Image.Drive.Item") Case 6 - MenuDesc.Text = "Captures an image of a drive to a new WIM file" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Captures.Image.New.Item") Case 7 - MenuDesc.Text = "Deletes all resources associated with a corrupted mounted image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Deletes.Resources.Item") Case 8 - MenuDesc.Text = "Applies the changes made to the mounted image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Applies.Changes.Made.Item") Case 9 - MenuDesc.Text = "Deletes a volume image from a WIM file" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Deletes.Volume.Image.Item") Case 10 - MenuDesc.Text = "Exports a copy of the image to another file" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Exports.Copy.Image.Item") Case 11 - MenuDesc.Text = "Displays information about the images contained in a WIM, FFU, VHD or VHDX file" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.Images.Item") Case 12 - MenuDesc.Text = "Displays a list of WIM, FFU, VHD or VHDX images that are currently mounted" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.List.Wimffu.Item") Case 13 - MenuDesc.Text = "Displays WIMBoot configuration entries for the specified disk volume" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.WIM.Boot.Item") Case 14 - MenuDesc.Text = "Displays a list of files and folders in an image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.List.Files.Item") Case 15 - MenuDesc.Text = "Mounts an image from a WIM, FFU, VHD or VHDX to make it available for servicing" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Mounts.Image.Wimffu.Item") Case 16 - MenuDesc.Text = "Optimizes a FFU image to make it faster to deploy" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Optimizes.Ffuimage.Item") Case 17 - MenuDesc.Text = "Optimizes an image to make it faster to deploy" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Optimizes.Image.Faster.Item") Case 18 - MenuDesc.Text = "Remounts a mounted image that is inaccessible to make it available for servicing" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Remounts.Mounted.Image.Item") Case 19 - MenuDesc.Text = "Splits a Full Flash Utility (FFU) file into read-only split FFU (.sfu) files" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Splits.Full.Flash.Item") Case 20 - MenuDesc.Text = "Splits an existing WIM file into read-only split WIM (.swm) files" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Splits.Existing.WIM.Item") Case 21 - MenuDesc.Text = "Unmounts the WIM, FFU, VHD or VHDX file and either commits or discards its changes" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Unmounts.Wimffuvhd.Item") Case 22 - MenuDesc.Text = "Updates the WIMBoot configuration entry" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Updates.WIM.Boot.Item") Case 23 - MenuDesc.Text = "Applies siloed provisioning packages to the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Applies.Siloed.Prov.Item") Case 24 - MenuDesc.Text = "Displays information about all packages in the image or in the installation or any package file you want to add" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.Message") Case 26 - MenuDesc.Text = "Installs a .cab or .msu package in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Installs.Cabmsu.Package.Item") Case 27 - MenuDesc.Text = "Removes a .cab file package from the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Removes.Cabfile.Package.Item") Case 28 - MenuDesc.Text = "Displays information about the installed features in an image or an online installation" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.Installed.Item") Case 30 - MenuDesc.Text = "Enables or updates the specified feature in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Enables.Updates.Feature.Item") Case 31 - MenuDesc.Text = "Disables the specified feature in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Disables.Feature.Image.Item") Case 32 - MenuDesc.Text = "Performs cleanup or recovery operations on the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Performs.Cleanup.Item") Case 33 - MenuDesc.Text = "Adds an applicable payload of a provisioning package to the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Adds.Applicable.Item") Case 34 - MenuDesc.Text = "Gets infomation of a provisioning package" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Gets.Infomation.Prov.Item") Case 35 - MenuDesc.Text = "Dehydrates files contained in the custom data image to save space" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Dehydrat.Files.Containe.Item") Case 36 - MenuDesc.Text = "Displays information about app packages in an image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.App.Item") Case 37 - MenuDesc.Text = "Adds one or more app packages to the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Addsone.App.Item") Case 38 - MenuDesc.Text = "Removes provisioning for app packages from the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Removes.Prov.App.Item") Case 39 - MenuDesc.Text = "Optimizes the total size of provisioned app packages on the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Optimizes.Total.Size.Item") Case 40 - MenuDesc.Text = "Adds a custom data file into the specified app package" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Addscustom.Data.File.Item") Case 41 - MenuDesc.Text = "Displays information of MSP patches applicable to the offline image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.Msppatches.Item") Case 42 - MenuDesc.Text = "Displays information about installed MSP patches" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Command42.Item") Case 43 - MenuDesc.Text = "Displays information about all applied MSP patches for all applications installed on the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.Item") Case 44 - MenuDesc.Text = "Displays information about a specific installed Windows Installer application" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.Specific.Item") Case 45 - MenuDesc.Text = "Displays information about all Windows Installer applications in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Command45.Item") Case 46 - MenuDesc.Text = "Exports default application associations from a running OS to an XML file" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Exports.Default.Item") Case 47 - MenuDesc.Text = "Displays the list of default application associations set in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.List.Item") Case 48 - MenuDesc.Text = "Imports a set of default application associations from an XML file to an image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Imports.Set.DefaultApp.Item") Case 49 - MenuDesc.Text = "Removes default application associations from the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Removes.Default.Item") Case 50 - MenuDesc.Text = "Displays information about international settings and languages" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.Intl.Item") Case 51 - MenuDesc.Text = "Sets the default UI language" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Default.Uilanguage.Item") Case 52 - MenuDesc.Text = "Sets the fallback default language for the system UI" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Fallback.Default.Item") Case 53 - MenuDesc.Text = "Sets the " & Quote & "System Preferred" & Quote & " UI language" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.System.Preferred.Item") Case 54 - MenuDesc.Text = "Sets the language for non-Unicode programs and font settings in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Language.Non.Item") Case 55 - MenuDesc.Text = "Sets the " & Quote & "standards and formats" & Quote & " language (user locale) in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Standards.Formats.Item") Case 56 - MenuDesc.Text = "Sets the input locales and keyboard layouts to use in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Input.Locales.Item") Case 57 - MenuDesc.Text = "Sets the default system UI language, the language for non-Unicode programs, the user locale, and the keyboard layouts to the language in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Default.System.Message") Case 58 - MenuDesc.Text = "Sets the default time zone in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Default.Time.Item") Case 59 - MenuDesc.Text = "Sets the default language for the UI and non-Unicode programs, locales for the user and input, keyboard layouts and time zone values in the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Default.Message") Case 60 - MenuDesc.Text = "Specifies a keyboard driver for Japanese and Korean keyboards" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Specifies.Keyboard.Item") Case 61 - MenuDesc.Text = "Generates a Lang.ini file, used by Setup to define the language packs inside the image and out" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Generates.Lang.Ini.Item") Case 62 - MenuDesc.Text = "Defines the default language that will be used by Setup" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Defines.Default.Item") Case 63 - MenuDesc.Text = "Adds a capability to an image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Addscapability.Image.Item") Case 64 - MenuDesc.Text = "Exports a set of capabilities into a new repository" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Exports.Set.Caps.Item") Case 65 - MenuDesc.Text = "Gets information about the installed capabilities of an image or an active installation" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Gets.Installed.Item") Case 67 - MenuDesc.Text = "Removes a capability from the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Removes.Capability.Item") Case 68 - MenuDesc.Text = "Displays the edition of the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.Edition.Image.Item") Case 69 - MenuDesc.Text = "Displays the editions the image can be upgraded to" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.Editions.Image.Item") Case 70 - MenuDesc.Text = "Changes an image to a higher edition" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Changes.Image.Higher.Item") Case 71 - MenuDesc.Text = "Enters the product key for the current edition" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Enters.ProductKey.Item") Case 72 - MenuDesc.Text = "Displays information about the driver packages you specify or the installed drivers in the image or in the installation" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.Driver.Message") Case 74 - MenuDesc.Text = "Adds third-party driver packages to the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Addsthird.Party.Driver.Item") Case 75 - MenuDesc.Text = "Removes third-party drivers from the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Removes.ThirdParty.Item") Case 76 - MenuDesc.Text = "Exports all third-party driver packages from the image to a destination path" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Exports.ThirdParty.Item") Case 77 - MenuDesc.Text = "Imports all third-party drivers from a specified source to this image to provide the same hardware compatibility" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Imports.ThirdParty.Message") Case 78 - MenuDesc.Text = "Applies an Unattend.xml file to the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Applies.Unattend.Item") Case 79 - MenuDesc.Text = "Displays a list of Windows PE settings in the WinPE image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Displays.List.Windows.Item") Case 80 - MenuDesc.Text = "Retrieves the configured amount of the Windows PE system volume scratch space" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Retrieves.Configured.Item") Case 81 - MenuDesc.Text = "Retrieves the target path of the Windows PE image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Retrieves.Target.Path.Item") Case 82 - MenuDesc.Text = "Sets the available scratch space (in MB)" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Available.Item") Case 83 - MenuDesc.Text = "Sets the location of the WinPE image on the disk (for hard disk boot scenarios)" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Location.Win.Item") Case 84 - MenuDesc.Text = "Gets the number of days an uninstall can be initiated after an upgrade" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Gets.Number.Days.Item") Case 85 - MenuDesc.Text = "Reverts a PC to a previous installation" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Reverts.PC.Item") Case 86 - MenuDesc.Text = "Removes the ability to roll back a PC to a previous installation" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Removes.Ability.Roll.Item") Case 87 - MenuDesc.Text = "Sets the number of days an uninstall can be initiated after an upgrade" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.Number.Days.Item") Case 88 - MenuDesc.Text = "Gets the current state of reserved storage" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Gets.State.Reserved.Item") Case 89 - MenuDesc.Text = "Sets the state of reserved storage" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Sets.State.Reserved.Item") Case 90 ' Edge can also be deployed - MenuDesc.Text = "Adds the Microsoft Edge Browser and WebView2 component to the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Adds.Microsoft.Item") Case 91 - MenuDesc.Text = "Adds the Microsoft Edge Browser to the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Command91.Item") Case 92 - MenuDesc.Text = "Adds the Microsoft Edge WebView2 component to the image" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Addsmicrosoft.Edge.Web.Item") Case 93 - MenuDesc.Text = "Saves complete image information to the file you want. Depending on the settings you had specified, you may be asked some questions during the process" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Saves.Complete.Image.Message") Case Else ' Do not show anything End Select Else Select Case ChildDescMode Case 1 - MenuDesc.Text = "Creates a new DISMTools project. The current project will be unloaded after creating it" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Creates.New.DISM.Item") Case 2 - MenuDesc.Text = "Opens an existing DISMTools project. The current project will be unloaded" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Opens.Existing.DISM.Item") Case 3 - MenuDesc.Text = "Enters online installation management mode" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Enters.Online.Install.Item") Case 4 - MenuDesc.Text = "Saves the changes of this project" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Saves.Changes.Project.Item") Case 5 - MenuDesc.Text = "Saves this project on another location" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Saves.Project.Another.Item") Case 6 - MenuDesc.Text = "Closes the program. If a project is loaded, you will be asked whether or not you would like to save it" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Closes.Project.Message") Case 7 - MenuDesc.Text = "Opens the File Explorer to view the project files" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Opens.File.Explorer.Item") Case 8 - MenuDesc.Text = "Unloads this project. If changes were made, you will be asked whether or not you would like to save it" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Unloads.Project.Message") Case 9 - MenuDesc.Text = "Switches the mounted image index" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Switches.Mounted.Image.Item") Case 10 - MenuDesc.Text = "Launches the project section of the project properties dialog" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Launches.Project.Item") Case 11 - MenuDesc.Text = "Launches the image section of the project properties dialog" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Launches.Image.Section.Item") Case 12 - MenuDesc.Text = "Performs image format conversion from WIM to ESD and vice versa" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("ImageFormat.Item") Case 13 - MenuDesc.Text = "Merges two or more SWM files into a single WIM file" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Merges.Two.SWM.Item") Case 14 - MenuDesc.Text = "Remounts the image with read-write permissions to allow making modifications to it" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Remounts.Image.Read.Item") Case 15 - MenuDesc.Text = "Opens the Command Console" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Opens.Command.Console.Item") Case 16 - MenuDesc.Text = "Lets you manage unattended answer files for this project" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Lets.Manage.Item") Case 17 - MenuDesc.Text = "Lets you manage project reports" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Lets.Manage.Project.Item") Case 18 - MenuDesc.Text = "Shows an overview of the mounted images" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Shows.Overview.Mounted.Item") Case 19 - MenuDesc.Text = "Configures settings for the program" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Configures.Settings.Item") Case 20 - MenuDesc.Text = "Opens the help topics for this program" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Opens.Help.Topics.Item") Case 21 - MenuDesc.Text = "Opens the glossary, if you don't understand a concept" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Opens.Glossary.Don.Item") Case 22 - MenuDesc.Text = "Shows the Command Help, letting you use commands to perform the same actions" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Shows.Command.Help.Item") Case 23 - MenuDesc.Text = "Shows program information" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Shows.Item") Case 24 - MenuDesc.Text = "Lets you report feedback through a new GitHub issue (a GitHub account is needed)" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Lets.Report.Feedback.Item") Case 25 - MenuDesc.Text = "Opens the GitHub repository containing the help documentation contents, to which you can contribute (a GitHub account is needed)" + MenuDesc.Text = LocalizationService.ForSection("Main.ShowChildDescs")("Opens.Git.Hub.Message") End Select End If End Sub Sub HideParentDesc() - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Ready" - Case "ESN" - MenuDesc.Text = "Listo" - Case "FRA" - MenuDesc.Text = "Prêt" - Case "PTB", "PTG" - MenuDesc.Text = "Pronto" - Case "ITA" - MenuDesc.Text = "Pronto" - End Select - Case 1 - MenuDesc.Text = "Ready" - Case 2 - MenuDesc.Text = "Listo" - Case 3 - MenuDesc.Text = "Prêt" - Case 4 - MenuDesc.Text = "Pronto" - Case 5 - MenuDesc.Text = "Pronto" - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.HideParentDesc")("Ready.Label") If ImgBW.CancellationPending Then - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Cancelling background processes. Please wait..." - Case "ESN" - MenuDesc.Text = "Espere mientras cancelamos los procesos en segundo plano..." - Case "FRA" - MenuDesc.Text = "Annulation des processus en arrière plan en cours. Veuillez patienter ..." - Case "PTB", "PTG" - MenuDesc.Text = "Cancelamento de processos em segundo plano. Por favor, aguarde..." - Case "ITA" - MenuDesc.Text = "Annullamento dei processi in background..." - End Select - Case 1 - MenuDesc.Text = "Cancelling background processes. Please wait..." - Case 2 - MenuDesc.Text = "Espere mientras cancelamos los procesos en segundo plano..." - Case 3 - MenuDesc.Text = "Annulation des processus en arrière plan en cours. Veuillez patienter ..." - Case 4 - MenuDesc.Text = "Cancelamento de processos em segundo plano. Por favor, aguarde..." - Case 5 - MenuDesc.Text = "Annullamento dei processi in background..." - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.HideParentDesc")("Cancelling.Bg.Procs.Item") End If End Sub Sub HideChildDescs() - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Ready" - Case "ESN" - MenuDesc.Text = "Listo" - Case "FRA" - MenuDesc.Text = "Prêt" - Case "PTB", "PTG" - MenuDesc.Text = "Pronto" - Case "ITA" - MenuDesc.Text = "Pronto" - End Select - Case 1 - MenuDesc.Text = "Ready" - Case 2 - MenuDesc.Text = "Listo" - Case 3 - MenuDesc.Text = "Prêt" - Case 4 - MenuDesc.Text = "Pronto" - Case 5 - MenuDesc.Text = "Pronto" - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.HideChildDescs")("Ready.Label") If ImgBW.CancellationPending Then - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Cancelling background processes. Please wait..." - Case "ESN" - MenuDesc.Text = "Espere mientras cancelamos los procesos en segundo plano..." - Case "FRA" - MenuDesc.Text = "Annulation des processus en arrière plan en cours. Veuillez patienter ..." - Case "PTB", "PTG" - MenuDesc.Text = "Cancelamento de processos em segundo plano. Por favor, aguarde..." - Case "ITA" - MenuDesc.Text = "Annullamento dei processi in background..." - End Select - Case 1 - MenuDesc.Text = "Cancelling background processes. Please wait..." - Case 2 - MenuDesc.Text = "Espere mientras cancelamos los procesos en segundo plano..." - Case 3 - MenuDesc.Text = "Annulation des processus en arrière plan en cours. Veuillez patienter ..." - Case 4 - MenuDesc.Text = "Cancelamento de processos em segundo plano. Por favor, aguarde..." - Case 5 - MenuDesc.Text = "Annullamento dei processi in background..." - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.HideChildDescs")("Cancelling.Bg.Procs.Item") End If End Sub @@ -10727,31 +6215,7 @@ Public Class MainForm End Sub Private Sub Button14_Click(sender As Object, e As EventArgs) Handles ProjectPropertiesToolStripMenuItem.Click, Button23.Click - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ProjProperties.ImageTaskHeader1.ItemText = "Properties" - Case "ESN" - ProjProperties.ImageTaskHeader1.ItemText = "Propiedades" - Case "FRA" - ProjProperties.ImageTaskHeader1.ItemText = "Propriétés" - Case "PTB", "PTG" - ProjProperties.ImageTaskHeader1.ItemText = "Propriedades" - Case "ITA" - ProjProperties.ImageTaskHeader1.ItemText = "Proprietà" - End Select - Case 1 - ProjProperties.ImageTaskHeader1.ItemText = "Properties" - Case 2 - ProjProperties.ImageTaskHeader1.ItemText = "Propiedades" - Case 3 - ProjProperties.ImageTaskHeader1.ItemText = "Propriétés" - Case 4 - ProjProperties.ImageTaskHeader1.ItemText = "Propriedades" - Case 5 - ProjProperties.ImageTaskHeader1.ItemText = "Proprietà" - End Select + ProjProperties.ImageTaskHeader1.ItemText = LocalizationService.ForSection("Main")("Props.Label") If Environment.OSVersion.Version.Major = 10 Then ProjProperties.Text = "" Else @@ -10763,31 +6227,7 @@ Public Class MainForm Private Sub Button15_Click(sender As Object, e As EventArgs) Handles ImagePropertiesToolStripMenuItem.Click - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ProjProperties.ImageTaskHeader1.ItemText = "Properties" - Case "ESN" - ProjProperties.ImageTaskHeader1.ItemText = "Propiedades" - Case "FRA" - ProjProperties.ImageTaskHeader1.ItemText = "Propriétés" - Case "PTB", "PTG" - ProjProperties.ImageTaskHeader1.ItemText = "Propriedades" - Case "ITA" - ProjProperties.ImageTaskHeader1.ItemText = "Proprietà" - End Select - Case 1 - ProjProperties.ImageTaskHeader1.ItemText = "Properties" - Case 2 - ProjProperties.ImageTaskHeader1.ItemText = "Propiedades" - Case 3 - ProjProperties.ImageTaskHeader1.ItemText = "Propriétés" - Case 4 - ProjProperties.ImageTaskHeader1.ItemText = "Propriedades" - Case 5 - ProjProperties.ImageTaskHeader1.ItemText = "Proprietà" - End Select + ProjProperties.ImageTaskHeader1.ItemText = LocalizationService.ForSection("Main")("ProjProps.Label") If Environment.OSVersion.Version.Major = 10 Then ProjProperties.Text = "" Else @@ -10891,11 +6331,15 @@ Public Class MainForm EnableDynaLog = True DynaLog.EnableLogging() End If - If tourServer.IsListenerAlive() Then + If tourServer IsNot Nothing AndAlso tourServer.IsListenerAlive() Then DynaLog.LogMessage("Tour is active. Attempting to shut down server...") tourServer.StopServer() TourActionsTSMI.Visible = False End If + If videoServer IsNot Nothing AndAlso videoServer.IsListenerAlive() Then + DynaLog.LogMessage("Video server is active. Attempting to shut down server...") + videoServer.StopServer() + End If DynaLog.LogMessage("Stopping mounted image detector...") StopMountedImageDetector() DynaLog.LogMessage("Stopping detection of news...") @@ -10990,78 +6434,12 @@ Public Class MainForm Private Sub prjTreeView_AfterExpand(sender As Object, e As TreeViewEventArgs) Handles prjTreeView.AfterExpand Try If prjTreeView.SelectedNode.IsExpanded Then - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ExpandCollapseTSB.Text = "Collapse" - ExpandToolStripMenuItem.Text = "Collapse item" - Case "ESN" - ExpandCollapseTSB.Text = "Contraer" - ExpandToolStripMenuItem.Text = "Contraer objeto" - Case "FRA" - ExpandCollapseTSB.Text = "Réduire" - ExpandToolStripMenuItem.Text = "Réduire élément" - Case "PTB", "PTG" - ExpandCollapseTSB.Text = "Recolher" - ExpandToolStripMenuItem.Text = "Recolher item" - Case "ITA" - ExpandCollapseTSB.Text = "Minimizza" - ExpandToolStripMenuItem.Text = "Minimizza elemento" - End Select - Case 1 - ExpandCollapseTSB.Text = "Collapse" - ExpandToolStripMenuItem.Text = "Collapse item" - Case 2 - ExpandCollapseTSB.Text = "Contraer" - ExpandToolStripMenuItem.Text = "Contraer objeto" - Case 3 - ExpandCollapseTSB.Text = "Réduire" - ExpandToolStripMenuItem.Text = "Réduire élément" - Case 4 - ExpandCollapseTSB.Text = "Recolher" - ExpandToolStripMenuItem.Text = "Recolher item" - Case 5 - ExpandCollapseTSB.Text = "Minimizza" - ExpandToolStripMenuItem.Text = "Minimizza elemento" - End Select + ExpandCollapseTSB.Text = LocalizationService.ForSection("Main.ProjectTree.AfterExpand")("Collapse.Label") + ExpandToolStripMenuItem.Text = LocalizationService.ForSection("Main.ProjectTree.AfterExpand")("CollapseItem.Label") ExpandCollapseTSB.Image = GetGlyphResource("collapse_glyph") Else - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ExpandCollapseTSB.Text = "Expand" - ExpandToolStripMenuItem.Text = "Expand item" - Case "ESN" - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir objeto" - Case "FRA" - ExpandCollapseTSB.Text = "Agrandir" - ExpandToolStripMenuItem.Text = "Agrandir élément" - Case "PTB", "PTG" - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir item" - Case "ITA" - ExpandCollapseTSB.Text = "Espandi" - ExpandToolStripMenuItem.Text = "Espandi elemento" - End Select - Case 1 - ExpandCollapseTSB.Text = "Expand" - ExpandToolStripMenuItem.Text = "Expand item" - Case 2 - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir objeto" - Case 3 - ExpandCollapseTSB.Text = "Agrandir" - ExpandToolStripMenuItem.Text = "Agrandir élément" - Case 4 - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir item" - Case 5 - ExpandCollapseTSB.Text = "Espandi" - ExpandToolStripMenuItem.Text = "Espandi elemento" - End Select + ExpandCollapseTSB.Text = LocalizationService.ForSection("Main.ProjectTree.AfterExpand")("Expand.Item") + ExpandToolStripMenuItem.Text = LocalizationService.ForSection("Main.ProjectTree.AfterExpand")("ExpandItem") ExpandCollapseTSB.Image = GetGlyphResource("expand_glyph") End If Catch ex As Exception @@ -11073,194 +6451,29 @@ Public Class MainForm Private Sub prjTreeView_AfterCollapse(sender As Object, e As TreeViewEventArgs) Handles prjTreeView.AfterCollapse Try If prjTreeView.SelectedNode.IsExpanded Then - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ExpandCollapseTSB.Text = "Collapse" - ExpandToolStripMenuItem.Text = "Collapse item" - Case "ESN" - ExpandCollapseTSB.Text = "Contraer" - ExpandToolStripMenuItem.Text = "Contraer objeto" - Case "FRA" - ExpandCollapseTSB.Text = "Réduire" - ExpandToolStripMenuItem.Text = "Réduire élément" - Case "PTB", "PTG" - ExpandCollapseTSB.Text = "Recolher" - ExpandToolStripMenuItem.Text = "Recolher item" - Case "ITA" - ExpandCollapseTSB.Text = "Minimizza" - ExpandToolStripMenuItem.Text = "Minimizza elemento" - End Select - Case 1 - ExpandCollapseTSB.Text = "Collapse" - ExpandToolStripMenuItem.Text = "Collapse item" - Case 2 - ExpandCollapseTSB.Text = "Contraer" - ExpandToolStripMenuItem.Text = "Contraer objeto" - Case 3 - ExpandCollapseTSB.Text = "Réduire" - ExpandToolStripMenuItem.Text = "Réduire élément" - Case 4 - ExpandCollapseTSB.Text = "Recolher" - ExpandToolStripMenuItem.Text = "Recolher item" - Case 5 - ExpandCollapseTSB.Text = "Minimizza" - ExpandToolStripMenuItem.Text = "Minimizza elemento" - End Select + ExpandCollapseTSB.Text = LocalizationService.ForSection("Main.ProjectTree.AfterCollapse")("Collapse.Label") + ExpandToolStripMenuItem.Text = LocalizationService.ForSection("Main.ProjectTree.AfterCollapse")("CollapseItem.Label") ExpandCollapseTSB.Image = GetGlyphResource("collapse_glyph") Else - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ExpandCollapseTSB.Text = "Expand" - ExpandToolStripMenuItem.Text = "Expand item" - Case "ESN" - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir objeto" - Case "FRA" - ExpandCollapseTSB.Text = "Agrandir" - ExpandToolStripMenuItem.Text = "Agrandir élément" - Case "PTB", "PTG" - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir item" - Case "ITA" - ExpandCollapseTSB.Text = "Espandi" - ExpandToolStripMenuItem.Text = "Espandi elemento" - End Select - Case 1 - ExpandCollapseTSB.Text = "Expand" - ExpandToolStripMenuItem.Text = "Expand item" - Case 2 - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir objeto" - Case 3 - ExpandCollapseTSB.Text = "Agrandir" - ExpandToolStripMenuItem.Text = "Agrandir élément" - Case 4 - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir item" - Case 5 - ExpandCollapseTSB.Text = "Espandi" - ExpandToolStripMenuItem.Text = "Espandi elemento" - End Select + ExpandCollapseTSB.Text = LocalizationService.ForSection("Main.ProjectTree.AfterCollapse")("Expand.Item") + ExpandToolStripMenuItem.Text = LocalizationService.ForSection("Main.ProjectTree.AfterCollapse")("ExpandItem") ExpandCollapseTSB.Image = GetGlyphResource("expand_glyph") End If Catch ex As Exception - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ExpandCollapseTSB.Text = "Expand" - ExpandToolStripMenuItem.Text = "Expand item" - Case "ESN" - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir objeto" - Case "FRA" - ExpandCollapseTSB.Text = "Agrandir" - ExpandToolStripMenuItem.Text = "Agrandir élément" - Case "PTB", "PTG" - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir item" - Case "ITA" - ExpandCollapseTSB.Text = "Espandi" - ExpandToolStripMenuItem.Text = "Espandi elemento" - End Select - Case 1 - ExpandCollapseTSB.Text = "Expand" - ExpandToolStripMenuItem.Text = "Expand item" - Case 2 - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir objeto" - Case 3 - ExpandCollapseTSB.Text = "Agrandir" - ExpandToolStripMenuItem.Text = "Agrandir élément" - Case 4 - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir item" - Case 5 - ExpandCollapseTSB.Text = "Espandi" - ExpandToolStripMenuItem.Text = "Espandi elemento" - End Select + ExpandCollapseTSB.Text = LocalizationService.ForSection("Main.ProjectTree.AfterCollapse")("ExpandCollapse.Item") + ExpandToolStripMenuItem.Text = LocalizationService.ForSection("Main.ProjectTree.AfterCollapse")("ExpandTool.ExpandItem") ExpandCollapseTSB.Image = GetGlyphResource("expand_glyph") End Try End Sub Private Sub prjTreeView_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles prjTreeView.AfterSelect If prjTreeView.SelectedNode.IsExpanded Then - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ExpandCollapseTSB.Text = "Collapse" - ExpandToolStripMenuItem.Text = "Collapse item" - Case "ESN" - ExpandCollapseTSB.Text = "Contraer" - ExpandToolStripMenuItem.Text = "Contraer objeto" - Case "FRA" - ExpandCollapseTSB.Text = "Réduire" - ExpandToolStripMenuItem.Text = "Réduire élément" - Case "PTB", "PTG" - ExpandCollapseTSB.Text = "Recolher" - ExpandToolStripMenuItem.Text = "Recolher item" - Case "ITA" - ExpandCollapseTSB.Text = "Minimizzae" - ExpandToolStripMenuItem.Text = "Minimizza elemento" - End Select - Case 1 - ExpandCollapseTSB.Text = "Collapse" - ExpandToolStripMenuItem.Text = "Collapse item" - Case 2 - ExpandCollapseTSB.Text = "Contraer" - ExpandToolStripMenuItem.Text = "Contraer objeto" - Case 3 - ExpandCollapseTSB.Text = "Réduire" - ExpandToolStripMenuItem.Text = "Réduire élément" - Case 4 - ExpandCollapseTSB.Text = "Recolher" - ExpandToolStripMenuItem.Text = "Recolher item" - Case 5 - ExpandCollapseTSB.Text = "Minimizza" - ExpandToolStripMenuItem.Text = "Minimizza elemento" - End Select + ExpandCollapseTSB.Text = LocalizationService.ForSection("Main.ProjectTree.AfterSelect")("Collapse.Label") + ExpandToolStripMenuItem.Text = LocalizationService.ForSection("Main.ProjectTree.AfterSelect")("CollapseItem.Label") ExpandCollapseTSB.Image = GetGlyphResource("collapse_glyph") Else - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ExpandCollapseTSB.Text = "Expand" - ExpandToolStripMenuItem.Text = "Expand item" - Case "ESN" - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir objeto" - Case "FRA" - ExpandCollapseTSB.Text = "Agrandir" - ExpandToolStripMenuItem.Text = "Agrandir élément" - Case "PTB", "PTG" - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir item" - Case "ITA" - ExpandCollapseTSB.Text = "Espandi" - ExpandToolStripMenuItem.Text = "Espandi elemento" - End Select - Case 1 - ExpandCollapseTSB.Text = "Expand" - ExpandToolStripMenuItem.Text = "Expand item" - Case 2 - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir objeto" - Case 3 - ExpandCollapseTSB.Text = "Agrandir" - ExpandToolStripMenuItem.Text = "Agrandir élément" - Case 4 - ExpandCollapseTSB.Text = "Expandir" - ExpandToolStripMenuItem.Text = "Expandir item" - Case 5 - ExpandCollapseTSB.Text = "Espandi" - ExpandToolStripMenuItem.Text = "Espandi elemento" - End Select + ExpandCollapseTSB.Text = LocalizationService.ForSection("Main.ProjectTree.AfterSelect")("Expand.Item") + ExpandToolStripMenuItem.Text = LocalizationService.ForSection("Main.ProjectTree.AfterSelect")("ExpandItem") ExpandCollapseTSB.Image = GetGlyphResource("expand_glyph") End If If prjTreeView.SelectedNode.Nodes.Count = 0 Then @@ -11273,19 +6486,16 @@ Public Class MainForm End Sub Private Sub ExpandCollapseTSB_Click(sender As Object, e As EventArgs) Handles ExpandCollapseTSB.Click - If ExpandCollapseTSB.Text = "Expand" Or ExpandCollapseTSB.Text = "Expandir" Or ExpandCollapseTSB.Text = "Agrandir" Or ExpandCollapseTSB.Text = "Espandi" Then - Try - prjTreeView.SelectedNode.Expand() - Catch ex As Exception - - End Try - ElseIf ExpandCollapseTSB.Text = "Collapse" Or ExpandCollapseTSB.Text = "Contraer" Or ExpandCollapseTSB.Text = "Réduire" Or ExpandCollapseTSB.Text = "Recolher" Or ExpandCollapseTSB.Text = "Collassare" Then - Try + If prjTreeView.SelectedNode Is Nothing Then Exit Sub + Try + If prjTreeView.SelectedNode.IsExpanded Then prjTreeView.SelectedNode.Collapse() - Catch ex As Exception + Else + prjTreeView.SelectedNode.Expand() + End If + Catch ex As Exception - End Try - End If + End Try End Sub Private Sub AddPackage_Click(sender As Object, e As EventArgs) Handles AddPackage.Click @@ -11403,31 +6613,7 @@ Public Class MainForm WatcherTimer.Enabled = True areBackgroundProcessesDone = True BackgroundProcessesButton.Image = GetGlyphResource("bg_ops_complete") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - progressLabel = "Image processes have completed" - Case "ESN" - progressLabel = "Los procesos de la imagen han completado" - Case "FRA" - progressLabel = "Les processus de l'image sont terminés" - Case "PTB", "PTG" - progressLabel = "Os processos de imagem foram concluídos" - Case "ITA" - progressLabel = "I processi dell'immagine sono stati completati" - End Select - Case 1 - progressLabel = "Image processes have completed" - Case 2 - progressLabel = "Los procesos de la imagen han completado" - Case 3 - progressLabel = "Les processus de l'image sont terminés" - Case 4 - progressLabel = "Os processos de imagem foram concluídos" - Case 5 - progressLabel = "I processi dell'immagine sono stati completati" - End Select + progressLabel = LocalizationService.ForSection("Main.BgProcesses")("ImageCompleted.Label") BGProcDetails.Label2.Text = progressLabel BGProcDetails.ProgressBar1.Value = BGProcDetails.ProgressBar1.Maximum DynaLog.LogMessage("Disposing of progress panel if not disposed of previously...") @@ -11626,17 +6812,24 @@ Public Class MainForm Private Sub UnmountImage_Click(sender As Object, e As EventArgs) Handles UnmountImage.Click, UnmountSettingsToolStripMenuItem.Click DynaLog.LogMessage("Opening image unmount dialog...") - If isProjectLoaded And MountDir = MountedImgMgr.ListView1.FocusedItem.SubItems(2).Text Then - DynaLog.LogMessage("This is the image the user is managing here") + ' We default to the current image but, if we have the mounted image manager open, we'll check + If MountedImgMgr.ListView1.FocusedItem IsNot Nothing Then + If isProjectLoaded And MountDir = MountedImgMgr.ListView1.FocusedItem.SubItems(2).Text Then + DynaLog.LogMessage("This is the image the user is managing here") + ImgUMount.RadioButton1.Checked = True + ImgUMount.RadioButton2.Checked = False + ImgUMount.TextBox1.Text = "" + Else + DynaLog.LogMessage("This is an image different from the one the user is managing here") + ImgUMount.RadioButton1.Checked = False + ImgUMount.RadioButton2.Checked = True + ImgUMount.TextBox1.Text = MountedImgMgr.ListView1.FocusedItem.SubItems(2).Text + ProgressPanel.UMountImgIndex = MountedImgMgr.ListView1.FocusedItem.SubItems(1).Text + End If + Else ImgUMount.RadioButton1.Checked = True ImgUMount.RadioButton2.Checked = False ImgUMount.TextBox1.Text = "" - Else - DynaLog.LogMessage("This is an image different from the one the user is managing here") - ImgUMount.RadioButton1.Checked = False - ImgUMount.RadioButton2.Checked = True - ImgUMount.TextBox1.Text = MountedImgMgr.ListView1.FocusedItem.SubItems(2).Text - ProgressPanel.UMountImgIndex = MountedImgMgr.ListView1.FocusedItem.SubItems(1).Text End If ImgUMount.ShowDialog(Me) End Sub @@ -11819,10 +7012,8 @@ Public Class MainForm DynaLog.LogMessage("An AppX manifest file exists in the main directory. There are no variations of any kind") ' Read from manifest DynaLog.LogMessage("Reading AppX manifest...") - Dim ManFile As New RichTextBox() With { - .Text = File.ReadAllText(If(OnlineManagement, Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)), MountDir) & "\Program Files\WindowsApps\" & PackageName & "\AppxManifest.xml") - } - For Each line In ManFile.Lines + Dim ManFileLines As String() = File.ReadAllLines(If(OnlineManagement, Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)), MountDir) & "\Program Files\WindowsApps\" & PackageName & "\AppxManifest.xml") + For Each line In ManFileLines If line.Contains("Logo") Then DynaLog.LogMessage("We have a possible logo...") Dim SplitPaths As New List(Of String) @@ -11861,10 +7052,8 @@ Public Class MainForm If Not folder.Contains("neutral") Then DynaLog.LogMessage("We have a possible folder candidate. Reading manifest...") ' Read from manifest - Dim ManFile As New RichTextBox() With { - .Text = File.ReadAllText(folder & "AppxManifest.xml") - } - For Each line In ManFile.Lines + Dim ManFileLines As String() = File.ReadAllLines(folder & "AppxManifest.xml") + For Each line In ManFileLines If line.Contains("Logo") Then DynaLog.LogMessage("Returning logo...") Return Path.Combine(folder, line.Replace(" ", "").Trim().Replace("/", "").Trim().Replace("", "").Trim()) @@ -11931,10 +7120,8 @@ Public Class MainForm DynaLog.LogMessage("Checking if AppX manifest exists...") If File.Exists(suitableFolderName & "\AppxManifest.xml") Then DynaLog.LogMessage("Reading AppX manifest...") - Dim ManFile As New RichTextBox() With { - .Text = File.ReadAllText(suitableFolderName & "\AppxManifest.xml") - } - For Each line In ManFile.Lines + Dim ManFileLines As String() = File.ReadAllLines(suitableFolderName & "\AppxManifest.xml") + For Each line In ManFileLines If line.Contains("") Then Dim SplitPaths As New List(Of String) SplitPaths = line.Replace(" ", "").Trim().Replace("/", "").Trim().Replace("", "").Trim().Split("\").ToList() @@ -11985,37 +7172,13 @@ Public Class MainForm End Using Catch ex As WebException DynaLog.LogMessage("Could not get updater. Error message: " & ex.Status.ToString()) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("We couldn't download the update checker. Reason:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Check for updates") - Case "ESN" - MsgBox("No pudimos descargar el comprobador de actualizaciones. Razón:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Comprobar actualizaciones") - Case "FRA" - MsgBox("Nous n'avons pas pu télécharger le vérificateur de mise à jour. Raison :" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Vérifier les mises à jour du programme") - Case "PTB", "PTG" - MsgBox("Não foi possível descarregar o verificador de actualizações. Motivo:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Verificar actualizações") - Case "ITA" - MsgBox("Non è stato possibile scaricare il programma di controllo degli aggiornamenti. Motivo:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Verifica aggiornamenti") - End Select - Case 1 - MsgBox("We couldn't download the update checker. Reason:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Check for updates") - Case 2 - MsgBox("No pudimos descargar el comprobador de actualizaciones. Razón:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Comprobar actualizaciones") - Case 3 - MsgBox("Nous n'avons pas pu télécharger le vérificateur de mise à jour. Raison :" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Vérifier les mises à jour du programme") - Case 4 - MsgBox("Não foi possível descarregar o verificador de actualizações. Motivo:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Verificar actualizações") - Case 5 - MsgBox("Non è stato possibile scaricare il programma di controllo degli aggiornamenti. Motivo:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Verifica aggiornamenti") - End Select + MsgBox(LocalizationService.ForSection("Main.UpdateChecker").Format("Couldn.Tdownload.Message", ex.Status.ToString()), vbOKOnly + vbCritical, LocalizationService.ForSection("Main.UpdateChecker")("CheckUpdates.Title")) Exit Sub End Try DynaLog.LogMessage("Information to pass to updater:") DynaLog.LogMessage("- Branch: " & dtBranch) DynaLog.LogMessage("- Process ID (PID): " & Process.GetCurrentProcess().Id) - If File.Exists(Application.StartupPath & "\update.exe") Then Process.Start(Application.StartupPath & "\update.exe", "/" & dtBranch & " /pid=" & Process.GetCurrentProcess().Id) + If File.Exists(Application.StartupPath & "\update.exe") Then Process.Start(Application.StartupPath & "\update.exe", "/" & dtBranch & " /pid=" & Process.GetCurrentProcess().Id & " " & LocalizationService.GetLanguageCommandLineArgument()) End Sub Private Sub prjTreeView_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles prjTreeView.NodeMouseClick @@ -12088,31 +7251,7 @@ Public Class MainForm ' Count files fileCount = My.Computer.FileSystem.GetFiles(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\" & arches(x), FileIO.SearchOption.SearchAllSubDirectories).Count DynaLog.LogMessage("Count of ADK files for " & currentArch & ": " & fileCount) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Preparing to copy deployment tools..." & If(adkCopyArg = 0, " (architecture " & archIntg & " of 4)", "") - Case "ESN" - MenuDesc.Text = "Preparándonos para copiar las herramientas de implementación..." & If(adkCopyArg = 0, " (arquitectura " & archIntg & " de 4)", "") - Case "FRA" - MenuDesc.Text = "Préparation de la copie des outils de déploiement en cours..." & If(adkCopyArg = 0, " (architecture " & archIntg & " de 4)", "") - Case "PTB", "PTG" - MenuDesc.Text = "Preparar a cópia das ferramentas de implantação..." & If(adkCopyArg = 0, " (arquitetura " & archIntg & " de 4)", "") - Case "ITA" - MenuDesc.Text = "Preparazione copia strumenti implementazione..." & If(adkCopyArg = 0, " (architettura " & archIntg & " di 4)", "") - End Select - Case 1 - MenuDesc.Text = "Preparing to copy deployment tools..." & If(adkCopyArg = 0, " (architecture " & archIntg & " of 4)", "") - Case 2 - MenuDesc.Text = "Preparándonos para copiar las herramientas de implementación..." & If(adkCopyArg = 0, " (arquitectura " & archIntg & " de 4)", "") - Case 3 - MenuDesc.Text = "Préparation de la copie des outils de déploiement en cours..." & If(adkCopyArg = 0, " (architecture " & archIntg & " de 4)", "") - Case 4 - MenuDesc.Text = "Preparar a cópia das ferramentas de implantação..." & If(adkCopyArg = 0, " (arquitetura " & archIntg & " de 4)", "") - Case 5 - MenuDesc.Text = "Preparazione alla copia degli strumenti di implementazione..." & If(adkCopyArg = 0, " (architettura " & archIntg & " di 4)", "") - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopy").Format("Prepare.Deploy.Tools.Label", If(adkCopyArg = 0, LocalizationService.ForSection("Main.ADKCopy").Format("Architecture.Label", archIntg), "")) CurrentFileInt = 0 For Each folder In My.Computer.FileSystem.GetDirectories(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\" & arches(x), FileIO.SearchOption.SearchAllSubDirectories) Directory.CreateDirectory(folder.Replace(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\" & arches(x), projPath & "\DandI\" & arches(x))) @@ -12129,31 +7268,7 @@ Public Class MainForm ' Count files DynaLog.LogMessage("Copying ADK files for x86...") Dim fileCount As Integer = My.Computer.FileSystem.GetFiles(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\x86", FileIO.SearchOption.SearchAllSubDirectories).Count - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Preparing to copy deployment tools..." & If(adkCopyArg = 0, " (architecture " & archIntg & " of 4)", "") - Case "ESN" - MenuDesc.Text = "Preparándonos para copiar las herramientas de implementación..." & If(adkCopyArg = 0, " (arquitectura " & archIntg & " de 4)", "") - Case "FRA" - MenuDesc.Text = "Préparation de la copie des outils de déploiement en cours..." & If(adkCopyArg = 0, " (architecture " & archIntg & " de 4)", "") - Case "PTB", "PTG" - MenuDesc.Text = "Preparar a cópia das ferramentas de implantação..." & If(adkCopyArg = 0, " (arquitetura " & archIntg & " de 4)", "") - Case "ITA" - MenuDesc.Text = "Preparazione copia strumenti implementazione..." & If(adkCopyArg = 0, " (architettura " & archIntg & " di 4)", "") - End Select - Case 1 - MenuDesc.Text = "Preparing to copy deployment tools..." & If(adkCopyArg = 0, " (architecture " & archIntg & " of 4)", "") - Case 2 - MenuDesc.Text = "Preparándonos para copiar las herramientas de implementación..." & If(adkCopyArg = 0, " (arquitectura " & archIntg & " de 4)", "") - Case 3 - MenuDesc.Text = "Préparation de la copie des outils de déploiement en cours..." & If(adkCopyArg = 0, " (architecture " & archIntg & " de 4)", "") - Case 4 - MenuDesc.Text = "Preparar a cópia das ferramentas de implantação..." & If(adkCopyArg = 0, " (arquitetura " & archIntg & " de 4)", "") - Case 5 - MenuDesc.Text = "Preparazione alla copia degli strumenti di implementazione..." & If(adkCopyArg = 0, " (architettura " & archIntg & " di 4)", "") - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopy").Format("Prepare.Deploy.Tools.Label", If(adkCopyArg = 0, LocalizationService.ForSection("Main.ADKCopy").Format("Architecture.Label", archIntg), "")) Dim CurrentFileInt As Integer = 0 For Each folder In My.Computer.FileSystem.GetDirectories(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\x86", FileIO.SearchOption.SearchAllSubDirectories) Directory.CreateDirectory(folder.Replace(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\x86", projPath & "\DandI\x86")) @@ -12168,31 +7283,7 @@ Public Class MainForm ' Count files DynaLog.LogMessage("Copying ADK files for AMD64...") Dim fileCount As Integer = My.Computer.FileSystem.GetFiles(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64", FileIO.SearchOption.SearchAllSubDirectories).Count - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Preparing to copy deployment tools..." & If(adkCopyArg = 0, " (architecture " & archIntg & " of 4)", "") - Case "ESN" - MenuDesc.Text = "Preparándonos para copiar las herramientas de implementación..." & If(adkCopyArg = 0, " (arquitectura " & archIntg & " de 4)", "") - Case "FRA" - MenuDesc.Text = "Préparation de la copie des outils de déploiement en cours..." & If(adkCopyArg = 0, " (architecture " & archIntg & " de 4)", "") - Case "PTB", "PTG" - MenuDesc.Text = "Preparar a cópia das ferramentas de implantação..." & If(adkCopyArg = 0, " (arquitetura " & archIntg & " de 4)", "") - Case "ITA" - MenuDesc.Text = "Preparazione copia strumenti implementazione..." & If(adkCopyArg = 0, " (architettura " & archIntg & " di 4)", "") - End Select - Case 1 - MenuDesc.Text = "Preparing to copy deployment tools..." & If(adkCopyArg = 0, " (architecture " & archIntg & " of 4)", "") - Case 2 - MenuDesc.Text = "Preparándonos para copiar las herramientas de implementación..." & If(adkCopyArg = 0, " (arquitectura " & archIntg & " de 4)", "") - Case 3 - MenuDesc.Text = "Préparation de la copie des outils de déploiement en cours..." & If(adkCopyArg = 0, " (architecture " & archIntg & " de 4)", "") - Case 4 - MenuDesc.Text = "Preparar a cópia das ferramentas de implantação..." & If(adkCopyArg = 0, " (arquitetura " & archIntg & " de 4)", "") - Case 5 - MenuDesc.Text = "Preparazione alla copia degli strumenti di implementazione..." & If(adkCopyArg = 0, " (architettura " & archIntg & " di 4)", "") - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopy").Format("Prepare.Deploy.Tools.Label", If(adkCopyArg = 0, LocalizationService.ForSection("Main.ADKCopy").Format("Architecture.Label", archIntg), "")) Dim CurrentFileInt As Integer = 0 For Each folder In My.Computer.FileSystem.GetDirectories(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64", FileIO.SearchOption.SearchAllSubDirectories) Directory.CreateDirectory(folder.Replace(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\amd64", projPath & "\DandI\amd64")) @@ -12207,31 +7298,7 @@ Public Class MainForm ' Count files DynaLog.LogMessage("Copying ADK files for ARM...") Dim fileCount As Integer = My.Computer.FileSystem.GetFiles(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\arm", FileIO.SearchOption.SearchAllSubDirectories).Count - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Preparing to copy deployment tools..." & If(adkCopyArg = 0, " (architecture " & archIntg & " of 4)", "") - Case "ESN" - MenuDesc.Text = "Preparándonos para copiar las herramientas de implementación..." & If(adkCopyArg = 0, " (arquitectura " & archIntg & " de 4)", "") - Case "FRA" - MenuDesc.Text = "Préparation de la copie des outils de déploiement en cours..." & If(adkCopyArg = 0, " (architecture " & archIntg & " de 4)", "") - Case "PTB", "PTG" - MenuDesc.Text = "Preparar a cópia das ferramentas de implantação..." & If(adkCopyArg = 0, " (arquitetura " & archIntg & " de 4)", "") - Case "ITA" - MenuDesc.Text = "Preparazione copia strumenti implementazione..." & If(adkCopyArg = 0, " (architettura " & archIntg & " di 4)", "") - End Select - Case 1 - MenuDesc.Text = "Preparing to copy deployment tools..." & If(adkCopyArg = 0, " (architecture " & archIntg & " of 4)", "") - Case 2 - MenuDesc.Text = "Preparándonos para copiar las herramientas de implementación..." & If(adkCopyArg = 0, " (arquitectura " & archIntg & " de 4)", "") - Case 3 - MenuDesc.Text = "Préparation de la copie des outils de déploiement en cours..." & If(adkCopyArg = 0, " (architecture " & archIntg & " de 4)", "") - Case 4 - MenuDesc.Text = "Preparar a cópia das ferramentas de implantação..." & If(adkCopyArg = 0, " (arquitetura " & archIntg & " de 4)", "") - Case 5 - MenuDesc.Text = "Preparazione alla copia degli strumenti di implementazione..." & If(adkCopyArg = 0, " (architettura " & archIntg & " di 4)", "") - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopy").Format("Prepare.Deploy.Tools.Label", If(adkCopyArg = 0, LocalizationService.ForSection("Main.ADKCopy").Format("Architecture.Label", archIntg), "")) Dim CurrentFileInt As Integer = 0 For Each folder In My.Computer.FileSystem.GetDirectories(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\arm", FileIO.SearchOption.SearchAllSubDirectories) Directory.CreateDirectory(folder.Replace(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\arm", projPath & "\DandI\arm")) @@ -12246,31 +7313,7 @@ Public Class MainForm ' Count files DynaLog.LogMessage("Copying ADK files for ARM64...") Dim fileCount As Integer = My.Computer.FileSystem.GetFiles(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\arm64", FileIO.SearchOption.SearchAllSubDirectories).Count - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Preparing to copy deployment tools..." & If(adkCopyArg = 0, " (architecture " & archIntg & " of 4)", "") - Case "ESN" - MenuDesc.Text = "Preparándonos para copiar las herramientas de implementación..." & If(adkCopyArg = 0, " (arquitectura " & archIntg & " de 4)", "") - Case "FRA" - MenuDesc.Text = "Préparation de la copie des outils de déploiement en cours..." & If(adkCopyArg = 0, " (architecture " & archIntg & " de 4)", "") - Case "PTB", "PTG" - MenuDesc.Text = "Preparar a cópia das ferramentas de implantação..." & If(adkCopyArg = 0, " (arquitetura " & archIntg & " de 4)", "") - Case "ITA" - MenuDesc.Text = "Preparazione copia strumenti implementazione..." & If(adkCopyArg = 0, " (architettura " & archIntg & " di 4)", "") - End Select - Case 1 - MenuDesc.Text = "Preparing to copy deployment tools..." & If(adkCopyArg = 0, " (architecture " & archIntg & " of 4)", "") - Case 2 - MenuDesc.Text = "Preparándonos para copiar las herramientas de implementación..." & If(adkCopyArg = 0, " (arquitectura " & archIntg & " de 4)", "") - Case 3 - MenuDesc.Text = "Préparation de la copie des outils de déploiement en cours..." & If(adkCopyArg = 0, " (architecture " & archIntg & " de 4)", "") - Case 4 - MenuDesc.Text = "Preparar a cópia das ferramentas de implantação..." & If(adkCopyArg = 0, " (arquitetura " & archIntg & " de 4)", "") - Case 5 - MenuDesc.Text = "Preparazione alla copia degli strumenti di implementazione..." & If(adkCopyArg = 0, " (architettura " & archIntg & " di 4)", "") - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopy").Format("Prepare.Deploy.Tools.Label", If(adkCopyArg = 0, LocalizationService.ForSection("Main.ADKCopy").Format("Architecture.Label", archIntg), "")) Dim CurrentFileInt As Integer = 0 For Each folder In My.Computer.FileSystem.GetDirectories(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\arm64", FileIO.SearchOption.SearchAllSubDirectories) Directory.CreateDirectory(folder.Replace(Environment.GetFolderPath(If(Environment.Is64BitOperatingSystem, Environment.SpecialFolder.ProgramFilesX86, Environment.SpecialFolder.ProgramFiles)) & "\Windows Kits\10\Assessment and Deployment Kit\Deployment Tools\arm64", projPath & "\DandI\arm64")) @@ -12331,84 +7374,12 @@ Public Class MainForm Try ' Detect if ADKs are present If DetectPossibleADKs() = 2 Then - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Deployment tools were copied to the project successfully" - Case "ESN" - MenuDesc.Text = "Las herramientas de implementación fueron copiadas al proyecto satisfactoriamente" - Case "FRA" - MenuDesc.Text = "Les outils de déploiement ont été copiés dans le projet avec succès." - Case "PTB", "PTG" - MenuDesc.Text = "As ferramentas de implementação foram copiadas para o projeto com sucesso" - Case "ITA" - MenuDesc.Text = "Copia strumenti di distribuzione nel progetto completata" - End Select - Case 1 - MenuDesc.Text = "Deployment tools were copied to the project successfully" - Case 2 - MenuDesc.Text = "Las herramientas de implementación fueron copiadas al proyecto satisfactoriamente" - Case 3 - MenuDesc.Text = "Les outils de déploiement ont été copiés dans le projet avec succès." - Case 4 - MenuDesc.Text = "As ferramentas de implementação foram copiadas para o projeto com sucesso" - Case 5 - MenuDesc.Text = "Copia strumenti di distribuzione nel progetto completata" - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopierBW.Background")("ToolsCopied.Label") Else - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Deployment tools aren't present on this system" - Case "ESN" - MenuDesc.Text = "Las herramientas de implementación no están presentes en este sistema" - Case "FRA" - MenuDesc.Text = "Les outils de déploiement ne sont pas présents sur ce système." - Case "PTB", "PTG" - MenuDesc.Text = "As ferramentas de implantação não estão presentes neste sistema" - Case "ITA" - MenuDesc.Text = "In questo sistema non sono presenti gli strumenti di implementazione" - End Select - Case 1 - MenuDesc.Text = "Deployment tools aren't present on this system" - Case 2 - MenuDesc.Text = "Las herramientas de implementación no están presentes en este sistema" - Case 3 - MenuDesc.Text = "Les outils de déploiement ne sont pas présents sur ce système." - Case 4 - MenuDesc.Text = "As ferramentas de implantação não estão presentes neste sistema" - Case 5 - MenuDesc.Text = "In questo sistema non sono presenti gli strumenti di implementazione" - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopierBW.Background")("Deployment.Tools.Aren.Item") End If Catch ex As Exception - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Deployment tools could not be copied" - Case "ESN" - MenuDesc.Text = "Las herramientas de implementación no pudieron ser copiadas" - Case "FRA" - MenuDesc.Text = "Les outils de déploiement n'ont pas pu être copiés." - Case "PTB", "PTG" - MenuDesc.Text = "Não foi possível copiar as ferramentas de implantação" - Case "ITA" - MenuDesc.Text = "Non è stato possibile copiare gli strumenti di implementazione" - End Select - Case 1 - MenuDesc.Text = "Deployment tools could not be copied" - Case 2 - MenuDesc.Text = "Las herramientas de implementación no pudieron ser copiadas" - Case 3 - MenuDesc.Text = "Les outils de déploiement n'ont pas pu être copiés." - Case 4 - MenuDesc.Text = "Não foi possível copiar as ferramentas de implantação" - Case 5 - MenuDesc.Text = "Non è stato possibile copiare gli strumenti di implementazione" - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopierBW.Background")("Deployment.Tools.Copied.Item") If AdkCopyEx IsNot Nothing Then MenuDesc.Text &= " (" & AdkCopyEx.Message & ")" End If @@ -12418,135 +7389,15 @@ Public Class MainForm Private Sub ADKCopierBW_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles ADKCopierBW.ProgressChanged Select Case adkCopyArg Case 0 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Copying deployment tools for architecture (" & currentArch & ", " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " of 4)...", ")...") - Case "ESN" - MenuDesc.Text = "Copiando herramientas de implementación para la arquitectura (" & currentArch & ", " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitectura " & archIntg & " de 4)...", ")...") - Case "FRA" - MenuDesc.Text = "Copie des outils de déploiement pour l'architecture en cours (" & currentArch & ", " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " de 4)...", ") ...") - Case "PTB", "PTG" - MenuDesc.Text = "Cópia das ferramentas de implementação para a arquitetura (" & currentArch & ", " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitetura " & archIntg & " de 4)...", ")...") - Case "ITA" - MenuDesc.Text = "Copia strumenti implementazione per l'architettura (" & currentArch & ", " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architettura " & archIntg & " di 4)...", ")...") - End Select - Case 1 - MenuDesc.Text = "Copying deployment tools for architecture (" & currentArch & ", " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " of 4)...", ")...") - Case 2 - MenuDesc.Text = "Copiando herramientas de implementación para la arquitectura (" & currentArch & ", " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitectura " & archIntg & " de 4)...", ")...") - Case 3 - MenuDesc.Text = "Copie des outils de déploiement pour l'architecture en cours (" & currentArch & ", " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " de 4)...", ") ...") - Case 4 - MenuDesc.Text = "Cópia das ferramentas de implementação para a arquitetura (" & currentArch & ", " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitetura " & archIntg & " de 4)...", ")...") - Case 5 - MenuDesc.Text = "Copia strumenti implementazione per l'architettura (" & currentArch & ", " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architettura " & archIntg & " di 4)...", ")...") - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopy").Format("Copying.Deployment.Label", currentArch, e.ProgressPercentage, If(adkCopyArg = 0, LocalizationService.ForSection("Main.ADKCopy").Format("Progress.Architecture.Label", archIntg), "")) Case 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Copying deployment tools for architecture (x86, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " of 4)...", ")...") - Case "ESN" - MenuDesc.Text = "Copiando herramientas de implementación para la arquitectura (x86, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitectura " & archIntg & " de 4)...", ")...") - Case "FRA" - MenuDesc.Text = "Copie des outils de déploiement pour l'architecture en cours (x86," & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " de 4)...", ") ...") - Case "PTB", "PTG" - MenuDesc.Text = "Cópia das ferramentas de implementação para a arquitetura (x86, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitetura " & archIntg & " de 4)...", ")...") - Case "ITA" - MenuDesc.Text = "Copia strumenti implementazione per l'architettura (x86, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architettura " & archIntg & " di 4)...", ")...") - End Select - Case 1 - MenuDesc.Text = "Copying deployment tools for architecture (x86, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " of 4)...", ")...") - Case 2 - MenuDesc.Text = "Copiando herramientas de implementación para la arquitectura (x86, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitectura " & archIntg & " de 4)...", ")...") - Case 3 - MenuDesc.Text = "Copie des outils de déploiement pour l'architecture en cours (x86," & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " de 4)...", ") ...") - Case 4 - MenuDesc.Text = "Cópia das ferramentas de implementação para a arquitetura (x86, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitetura " & archIntg & " de 4)...", ")...") - Case 5 - MenuDesc.Text = "Copia strumenti implementazione per l'architettura (x86, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architettura " & archIntg & " di 4)...", ")...") - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopy").Format("Copying.Deployment.Label", "x86", e.ProgressPercentage, If(adkCopyArg = 0, LocalizationService.ForSection("Main.ADKCopy").Format("Progress.Architecture.Label", archIntg), "")) Case 2 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Copying deployment tools for architecture (amd64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " of 4)...", ")...") - Case "ESN" - MenuDesc.Text = "Copiando herramientas de implementación para la arquitectura (amd64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitectura " & archIntg & " de 4)...", ")...") - Case "FRA" - MenuDesc.Text = "Copie des outils de déploiement pour l'architecture en cours (amd64," & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " de 4)...", ") ...") - Case "PTB", "PTG" - MenuDesc.Text = "Cópia das ferramentas de implementação para a arquitetura (amd64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitetura " & archIntg & " de 4)...", ")...") - Case "ITA" - MenuDesc.Text = "Copia strumenti implementazione per l'architettura (amd64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architettura " & archIntg & " di 4)...", ")...") - End Select - Case 1 - MenuDesc.Text = "Copying deployment tools for architecture (amd64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " of 4)...", ")...") - Case 2 - MenuDesc.Text = "Copiando herramientas de implementación para la arquitectura (amd64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitectura " & archIntg & " de 4)...", ")...") - Case 3 - MenuDesc.Text = "Copie des outils de déploiement pour l'architecture en cours (amd64," & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " de 4)...", ") ...") - Case 4 - MenuDesc.Text = "Cópia das ferramentas de implementação para a arquitetura (amd64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitetura " & archIntg & " de 4)...", ")...") - Case 5 - MenuDesc.Text = "Copia strumenti implementazione per l'architettura (amd64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architettura " & archIntg & " di 4)...", ")...") - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopy").Format("Copying.Deployment.Label", "amd64", e.ProgressPercentage, If(adkCopyArg = 0, LocalizationService.ForSection("Main.ADKCopy").Format("Progress.Architecture.Label", archIntg), "")) Case 3 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Copying deployment tools for architecture (arm, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " of 4)...", ")...") - Case "ESN" - MenuDesc.Text = "Copiando herramientas de implementación para la arquitectura (arm, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitectura " & archIntg & " de 4)...", ")...") - Case "FRA" - MenuDesc.Text = "Copie des outils de déploiement pour l'architecture en cours (arm," & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " de 4)...", ") ...") - Case "PTB", "PTG" - MenuDesc.Text = "Cópia das ferramentas de implementação para a arquitetura (arm, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitetura " & archIntg & " de 4)...", ")...") - Case "ITA" - MenuDesc.Text = "Copia strumenti implementazione per l'architettura (arm, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architettura " & archIntg & " di 4)...", ")...") - End Select - Case 1 - MenuDesc.Text = "Copying deployment tools for architecture (arm, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " of 4)...", ")...") - Case 2 - MenuDesc.Text = "Copiando herramientas de implementación para la arquitectura (arm, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitectura " & archIntg & " de 4)...", ")...") - Case 3 - MenuDesc.Text = "Copie des outils de déploiement pour l'architecture en cours (arm," & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " de 4)...", ") ...") - Case 4 - MenuDesc.Text = "Cópia das ferramentas de implementação para a arquitetura (arm, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitetura " & archIntg & " de 4)...", ")...") - Case 5 - MenuDesc.Text = "Copia strumenti implementazione per l'architettura (arm, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architettura " & archIntg & " di 4)...", ")...") - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopy").Format("Copying.Deployment.Label", "arm", e.ProgressPercentage, If(adkCopyArg = 0, LocalizationService.ForSection("Main.ADKCopy").Format("Progress.Architecture.Label", archIntg), "")) Case 4 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MenuDesc.Text = "Copying deployment tools for architecture (arm64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " of 4)...", ")...") - Case "ESN" - MenuDesc.Text = "Copiando herramientas de implementación para la arquitectura (arm64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitectura " & archIntg & " de 4)...", ")...") - Case "FRA" - MenuDesc.Text = "Copie des outils de déploiement pour l'architecture en cours (arm64," & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " de 4)...", ") ...") - Case "PTB", "PTG" - MenuDesc.Text = "Cópia das ferramentas de implementação para a arquitetura (arm64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitetura " & archIntg & " de 4)...", ")...") - Case "ITA" - MenuDesc.Text = "Copia strumenti implementazione per l'architettura (arm64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architettura " & archIntg & " di 4)...", ")...") - End Select - Case 1 - MenuDesc.Text = "Copying deployment tools for architecture (arm64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " of 4)...", ")...") - Case 2 - MenuDesc.Text = "Copiando herramientas de implementación para la arquitectura (arm64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitectura " & archIntg & " de 4)...", ")...") - Case 3 - MenuDesc.Text = "Copie des outils de déploiement pour l'architecture en cours (arm64," & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architecture " & archIntg & " de 4)...", ") ...") - Case 4 - MenuDesc.Text = "Cópia das ferramentas de implementação para a arquitetura (arm64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", arquitetura " & archIntg & " de 4)...", ")...") - Case 5 - MenuDesc.Text = "Copia strumenti implementazione per l'architettura (arm64, " & e.ProgressPercentage & "%" & If(adkCopyArg = 0, ", architettura " & archIntg & " di 4)...", ")...") - End Select + MenuDesc.Text = LocalizationService.ForSection("Main.ADKCopy").Format("Copying.Deployment.Label", "arm64", e.ProgressPercentage, If(adkCopyArg = 0, LocalizationService.ForSection("Main.ADKCopy").Format("Progress.Architecture.Label", archIntg), "")) End Select End Sub @@ -12728,31 +7579,7 @@ Public Class MainForm Private Sub GetDrivers_Click(sender As Object, e As EventArgs) Handles GetDrivers.Click DynaLog.LogMessage("Opening driver information dialog...") ProgressPanel.OperationNum = 994 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Getting installed driver packages..." - Case "ESN" - PleaseWaitDialog.Label2.Text = "Obteniendo paquetes de controladores instalados..." - Case "FRA" - PleaseWaitDialog.Label2.Text = "Obtention des paquets de pilotes installés en cours..." - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Obter pacotes de controladores instalados..." - Case "ITA" - PleaseWaitDialog.Label2.Text = "Verifica pacchetti driver installati..." - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Getting installed driver packages..." - Case 2 - PleaseWaitDialog.Label2.Text = "Obteniendo paquetes de controladores instalados..." - Case 3 - PleaseWaitDialog.Label2.Text = "Obtention des paquets de pilotes installés en cours..." - Case 4 - PleaseWaitDialog.Label2.Text = "Obter pacotes de controladores instalados..." - Case 5 - PleaseWaitDialog.Label2.Text = "Verifica pacchetti driver installati..." - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main.GetDrivers")("Loading.DriverPackages.Label") If Not CompletedTasks(4) Then DynaLog.LogMessage("Device driver background processes haven't completed.") PleaseWaitDialog.ShowDialog(Me) @@ -12787,31 +7614,7 @@ Public Class MainForm If Not IsImageMounted Then Exit Sub DynaLog.LogMessage("Opening feature information dialog...") ProgressPanel.OperationNum = 994 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Getting feature names and their state..." - Case "ESN" - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de características y sus estados..." - Case "FRA" - PleaseWaitDialog.Label2.Text = "Obtention des noms des caractéristiques et de leur état en cours..." - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Obter os nomes das características e o seu estado..." - Case "ITA" - PleaseWaitDialog.Label2.Text = "Verifica nomi e stato funzionalità..." - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Getting feature names and their state..." - Case 2 - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de características y sus estados..." - Case 3 - PleaseWaitDialog.Label2.Text = "Obtention des noms des caractéristiques et de leur état en cours..." - Case 4 - PleaseWaitDialog.Label2.Text = "Obter os nomes das características e o seu estado..." - Case 5 - PleaseWaitDialog.Label2.Text = "Verifica nomi e stato funzionalità..." - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main.GetFeatures")("Getting.Feature.Names.Label") If Not CompletedTasks(1) Then DynaLog.LogMessage("Feature background processes haven't completed.") PleaseWaitDialog.ShowDialog(Me) @@ -12825,61 +7628,13 @@ Public Class MainForm DynaLog.LogMessage("Checking edition and version information for any unmet requirements...") If (CurrentImage.ImageEditionId.Equals("WindowsPE", StringComparison.OrdinalIgnoreCase) OrElse CurrentImage.WinPeInDisguise) Or Not IsWindows10OrHigher(MountDir & "\Windows\system32\ntoskrnl.exe") Then DynaLog.LogMessage("The image is not supported") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("This action is not supported on this image", vbOKOnly + vbCritical, Text) - Case "ESN" - MsgBox("Esta acción no está soportada en esta imagen", vbOKOnly + vbCritical, Text) - Case "FRA" - MsgBox("Cette action n'est pas prise en charge sur cette image", vbOKOnly + vbCritical, Text) - Case "PTB", "PTG" - MsgBox("Esta ação não é suportada nesta imagem", vbOKOnly + vbCritical, Text) - Case "ITA" - MsgBox("Questa azione non è supportata su questa immagine", vbOKOnly + vbCritical, Text) - End Select - Case 1 - MsgBox("This action is not supported on this image", vbOKOnly + vbCritical, Text) - Case 2 - MsgBox("Esta acción no está soportada en esta imagen", vbOKOnly + vbCritical, Text) - Case 3 - MsgBox("Cette action n'est pas prise en charge sur cette image", vbOKOnly + vbCritical, Text) - Case 4 - MsgBox("Esta ação não é suportada nesta imagem", vbOKOnly + vbCritical, Text) - Case 5 - MsgBox("In questa immagine questa azione non è supportata", vbOKOnly + vbCritical, Text) - End Select + MsgBox(LocalizationService.ForSection("Main.GetCapabilities.Actions")("UnsupportedImage.Message"), vbOKOnly + vbCritical, Text) Exit Sub End If DynaLog.LogMessage("All requirements are met. Continuing with the task...") DynaLog.LogMessage("Opening capability information dialog...") ProgressPanel.OperationNum = 994 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Getting capability names and their state..." - Case "ESN" - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de funcionalidades y sus estados..." - Case "FRA" - PleaseWaitDialog.Label2.Text = "Obtention des noms des capacités et de leur état en cours..." - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Obter os nomes das capacidades e o seu estado..." - Case "ITA" - PleaseWaitDialog.Label2.Text = "Verifica nomi capacità e relativo stato..." - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Getting capability names and their state..." - Case 2 - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de funcionalidades y sus estados..." - Case 3 - PleaseWaitDialog.Label2.Text = "Obtention des noms des capacités et de leur état en cours..." - Case 4 - PleaseWaitDialog.Label2.Text = "Obter os nomes das capacidades e o seu estado..." - Case 5 - PleaseWaitDialog.Label2.Text = "Verifica nomi capacità e relativo stato..." - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main.GetCapabilities")("Cap.Names.Their.Label") If Not CompletedTasks(3) Then DynaLog.LogMessage("Capability background processes haven't completed.") PleaseWaitDialog.ShowDialog(Me) @@ -12892,31 +7647,7 @@ Public Class MainForm Private Sub GetPackages_Click(sender As Object, e As EventArgs) Handles GetPackages.Click DynaLog.LogMessage("Opening OS package information dialog...") ProgressPanel.OperationNum = 993 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Getting package names..." - Case "ESN" - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de paquetes..." - Case "FRA" - PleaseWaitDialog.Label2.Text = "Obtention des noms de paquets en cours..." - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Obter nomes de pacotes..." - Case "ITA" - PleaseWaitDialog.Label2.Text = "Verifica nomi pacchetti..." - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Getting package names..." - Case 2 - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de paquetes..." - Case 3 - PleaseWaitDialog.Label2.Text = "Obtention des noms de paquets en cours..." - Case 4 - PleaseWaitDialog.Label2.Text = "Obter nomes de pacotes..." - Case 5 - PleaseWaitDialog.Label2.Text = "Verifica nomi pacchetti..." - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main.GetPackages")("Getting.Package.Names.Label") If Not CompletedTasks(0) Then DynaLog.LogMessage("OS package background processes haven't completed.") PleaseWaitDialog.ShowDialog(Me) @@ -12930,61 +7661,13 @@ Public Class MainForm DynaLog.LogMessage("Checking edition and version information for any unmet requirements...") If (CurrentImage.ImageEditionId.Equals("WindowsPE", StringComparison.OrdinalIgnoreCase) OrElse CurrentImage.WinPeInDisguise) Or Not IsWindows8OrHigher(MountDir & "\Windows\system32\ntoskrnl.exe") Then DynaLog.LogMessage("The image is not supported") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("This action is not supported on this image", vbOKOnly + vbCritical, Text) - Case "ESN" - MsgBox("Esta acción no está soportada en esta imagen", vbOKOnly + vbCritical, Text) - Case "FRA" - MsgBox("Cette action n'est pas prise en charge sur cette image", vbOKOnly + vbCritical, Text) - Case "PTB", "PTG" - MsgBox("Esta ação não é suportada nesta imagem", vbOKOnly + vbCritical, Text) - Case "ITA" - MsgBox("In questa immagine questa azione non è supportata", vbOKOnly + vbCritical, Text) - End Select - Case 1 - MsgBox("This action is not supported on this image", vbOKOnly + vbCritical, Text) - Case 2 - MsgBox("Esta acción no está soportada en esta imagen", vbOKOnly + vbCritical, Text) - Case 3 - MsgBox("Cette action n'est pas prise en charge sur cette image", vbOKOnly + vbCritical, Text) - Case 4 - MsgBox("Esta ação não é suportada nesta imagem", vbOKOnly + vbCritical, Text) - Case 5 - MsgBox("In questa immagine questa azione non è supportata", vbOKOnly + vbCritical, Text) - End Select + MsgBox(LocalizationService.ForSection("Main.ProvAppx")("UnsupportedImage.Message"), vbOKOnly + vbCritical, Text) Exit Sub End If DynaLog.LogMessage("All requirements are met. Continuing with the task...") DynaLog.LogMessage("Opening AppX package information dialog...") ProgressPanel.OperationNum = 993 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Getting package names..." - Case "ESN" - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de paquetes..." - Case "FRA" - PleaseWaitDialog.Label2.Text = "Obtention des noms de paquets en cours..." - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Obter nomes de pacotes..." - Case "ITA" - PleaseWaitDialog.Label2.Text = "Verifica nomi pacchetti..." - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Getting package names..." - Case 2 - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de paquetes..." - Case 3 - PleaseWaitDialog.Label2.Text = "Obtention des noms de paquets en cours..." - Case 4 - PleaseWaitDialog.Label2.Text = "Obter nomes de pacotes..." - Case 5 - PleaseWaitDialog.Label2.Text = "Verifica nomi pacchetti..." - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main.GetProvAppx")("Getting.Package.Names.Label") If Not CompletedTasks(2) Then DynaLog.LogMessage("AppX package background processes haven't completed.") PleaseWaitDialog.ShowDialog(Me) @@ -13007,41 +7690,8 @@ Public Class MainForm GetAppxPkgInfoDlg.PictureBox2.Image.Save(AppxResSFD.FileName, Imaging.ImageFormat.Png) Notifications.Visible = True Notifications.Icon = Icon - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Notifications.BalloonTipText = "The asset has been saved to the location you specified" - Notifications.BalloonTipTitle = "Save successful" - Case "ESN" - Notifications.BalloonTipText = "El recurso ha sido guardado en la ubicación que especificó" - Notifications.BalloonTipTitle = "Guardado satisfactorio" - Case "FRA" - Notifications.BalloonTipText = "Le fichier a été sauvegardé à l'emplacement que vous avez spécifié." - Notifications.BalloonTipTitle = "Sauvegarde du fichier réussie" - Case "PTB", "PTG" - Notifications.BalloonTipText = "O recurso foi guardado no local indicado" - Notifications.BalloonTipTitle = "Guardado com sucesso" - Case "ITA" - Notifications.BalloonTipText = "La risorsa è stata salvata nella posizione specificata" - Notifications.BalloonTipTitle = "Il salvataggio è stato completato correttamente" - End Select - Case 1 - Notifications.BalloonTipText = "The asset has been saved to the location you specified" - Notifications.BalloonTipTitle = "Save successful" - Case 2 - Notifications.BalloonTipText = "El recurso ha sido guardado en la ubicación que especificó" - Notifications.BalloonTipTitle = "Guardado satisfactorio" - Case 3 - Notifications.BalloonTipText = "Le fichier a été sauvegardé à l'emplacement que vous avez spécifié." - Notifications.BalloonTipTitle = "Sauvegarde du fichier réussie" - Case 4 - Notifications.BalloonTipText = "O recurso foi guardado no local indicado" - Notifications.BalloonTipTitle = "Guardado com sucesso" - Case 5 - Notifications.BalloonTipText = "La risorsa è stata salvata nella posizione specificata" - Notifications.BalloonTipTitle = "Il salvataggio è è stato completato correttamente" - End Select + Notifications.BalloonTipText = LocalizationService.ForSection("Main.SaveAsset")("Saved.Location.Label") + Notifications.BalloonTipTitle = LocalizationService.ForSection("Main.SaveAsset")("SaveSuccessful.Title") Notifications.ShowBalloonTip(3000) Catch ex As Exception DynaLog.LogMessage("Could not save logo asset. Error message: " & ex.Message) @@ -13056,41 +7706,8 @@ Public Class MainForm Clipboard.SetDataObject(data, True) Notifications.Visible = True Notifications.Icon = Icon - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Notifications.BalloonTipText = "The asset has been copied to the clipboard" - Notifications.BalloonTipTitle = "Copy successful" - Case "ESN" - Notifications.BalloonTipText = "El recurso ha sido copiado al portapapeles" - Notifications.BalloonTipTitle = "Copia satisfactoria" - Case "FRA" - Notifications.BalloonTipText = "Le fichier a été copié dans le presse-papiers." - Notifications.BalloonTipTitle = "Copie du fichier réussie" - Case "PTB", "PTG" - Notifications.BalloonTipText = "O recurso foi copiado para a área de transferência" - Notifications.BalloonTipTitle = "Cópia com sucesso" - Case "ITA" - Notifications.BalloonTipText = "La risorsa è stata copiata negli appunti" - Notifications.BalloonTipTitle = "Copia completata" - End Select - Case 1 - Notifications.BalloonTipText = "The asset has been copied to the clipboard" - Notifications.BalloonTipTitle = "Copy successful" - Case 2 - Notifications.BalloonTipText = "El recurso ha sido copiado al portapapeles" - Notifications.BalloonTipTitle = "Copia satisfactoria" - Case 3 - Notifications.BalloonTipText = "Le fichier a été copié dans le presse-papiers." - Notifications.BalloonTipTitle = "Copie du fichier réussie" - Case 4 - Notifications.BalloonTipText = "O recurso foi copiado para a área de transferência" - Notifications.BalloonTipTitle = "Cópia com sucesso" - Case 5 - Notifications.BalloonTipText = "La risorsa è stata copiata negli appunti" - Notifications.BalloonTipTitle = "Copia riuscita" - End Select + Notifications.BalloonTipText = LocalizationService.ForSection("Main.CopyAsset")("Copied.Clipboard.Label") + Notifications.BalloonTipTitle = LocalizationService.ForSection("Main.CopyAsset")("CopySuccessful.Title") Notifications.ShowBalloonTip(3000) Catch ex As Exception DynaLog.LogMessage("Could not copy logo asset. Error message: " & ex.Message) @@ -13212,31 +7829,7 @@ Public Class MainForm #Region "Task Links" Private Sub LinkLabel15_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel15.LinkClicked - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ProjProperties.ImageTaskHeader1.ItemText = "Properties" - Case "ESN" - ProjProperties.ImageTaskHeader1.ItemText = "Propiedades" - Case "FRA" - ProjProperties.ImageTaskHeader1.ItemText = "Propriétés" - Case "PTB", "PTG" - ProjProperties.ImageTaskHeader1.ItemText = "Propriedades" - Case "ITA" - ProjProperties.ImageTaskHeader1.ItemText = "Proprietà" - End Select - Case 1 - ProjProperties.ImageTaskHeader1.ItemText = "Properties" - Case 2 - ProjProperties.ImageTaskHeader1.ItemText = "Propiedades" - Case 3 - ProjProperties.ImageTaskHeader1.ItemText = "Propriétés" - Case 4 - ProjProperties.ImageTaskHeader1.ItemText = "Propriedades" - Case 5 - ProjProperties.ImageTaskHeader1.ItemText = "Proprietà" - End Select + ProjProperties.ImageTaskHeader1.ItemText = LocalizationService.ForSection("Main.Links")("Props.Label") If Environment.OSVersion.Version.Major = 10 Then ProjProperties.Text = "" Else @@ -13294,31 +7887,7 @@ Public Class MainForm End Sub Private Sub LinkLabel20_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel20.LinkClicked - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ProjProperties.ImageTaskHeader1.ItemText = "Properties" - Case "ESN" - ProjProperties.ImageTaskHeader1.ItemText = "Propiedades" - Case "FRA" - ProjProperties.ImageTaskHeader1.ItemText = "Propriétés" - Case "PTB", "PTG" - ProjProperties.ImageTaskHeader1.ItemText = "Propriedades" - Case "ITA" - ProjProperties.ImageTaskHeader1.ItemText = "Proprietà" - End Select - Case 1 - ProjProperties.ImageTaskHeader1.ItemText = "Properties" - Case 2 - ProjProperties.ImageTaskHeader1.ItemText = "Propiedades" - Case 3 - ProjProperties.ImageTaskHeader1.ItemText = "Propriétés" - Case 4 - ProjProperties.ImageTaskHeader1.ItemText = "Propriedades" - Case 5 - ProjProperties.ImageTaskHeader1.ItemText = "Proprietà" - End Select + ProjProperties.ImageTaskHeader1.ItemText = LocalizationService.ForSection("Main.Links")("ProjProps.Label") If Environment.OSVersion.Version.Major = 10 Then ProjProperties.Text = "" Else @@ -13473,31 +8042,7 @@ Public Class MainForm Private Sub Button34_Click(sender As Object, e As EventArgs) Handles Button34.Click DynaLog.LogMessage("Opening OS package information dialog...") ProgressPanel.OperationNum = 993 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Getting package names..." - Case "ESN" - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de paquetes..." - Case "FRA" - PleaseWaitDialog.Label2.Text = "Obtention des noms de paquets en cours..." - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Obter nomes de pacotes..." - Case "ITA" - PleaseWaitDialog.Label2.Text = "Verifica nomi pacchetti..." - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Getting package names..." - Case 2 - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de paquetes..." - Case 3 - PleaseWaitDialog.Label2.Text = "Obtention des noms de paquets en cours..." - Case 4 - PleaseWaitDialog.Label2.Text = "Obter nomes de pacotes..." - Case 5 - PleaseWaitDialog.Label2.Text = "Verifica nomi pacchetti..." - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main")("Getting.Package.Names.Label") If Not CompletedTasks(0) Then DynaLog.LogMessage("OS package background processes haven't completed.") PleaseWaitDialog.ShowDialog(Me) @@ -13544,31 +8089,7 @@ Public Class MainForm If Not IsImageMounted Then Exit Sub DynaLog.LogMessage("Opening feature information dialog...") ProgressPanel.OperationNum = 994 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Getting feature names and their state..." - Case "ESN" - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de características y sus estados..." - Case "FRA" - PleaseWaitDialog.Label2.Text = "Obtention des noms des caractéristiques et de leur état en cours..." - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Obter os nomes das características e o seu estado..." - Case "ITA" - PleaseWaitDialog.Label2.Text = "Verifica nomi e stato funzionalità..." - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Getting feature names and their state..." - Case 2 - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de características y sus estados..." - Case 3 - PleaseWaitDialog.Label2.Text = "Obtention des noms des caractéristiques et de leur état en cours..." - Case 4 - PleaseWaitDialog.Label2.Text = "Obter os nomes das características e o seu estado..." - Case 5 - PleaseWaitDialog.Label2.Text = "Verifica nomi e stato funzionalità..." - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main")("Getting.Feature.Names.Label") If Not CompletedTasks(1) Then DynaLog.LogMessage("Feature background processes haven't completed.") PleaseWaitDialog.ShowDialog(Me) @@ -13617,61 +8138,13 @@ Public Class MainForm DynaLog.LogMessage("Checking edition and version information for any unmet requirements...") If (CurrentImage.ImageEditionId.Equals("WindowsPE", StringComparison.OrdinalIgnoreCase) OrElse CurrentImage.WinPeInDisguise) Or Not IsWindows8OrHigher(MountDir & "\Windows\system32\ntoskrnl.exe") Then DynaLog.LogMessage("The image is not supported") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("This action is not supported on this image", vbOKOnly + vbCritical, Text) - Case "ESN" - MsgBox("Esta acción no está soportada en esta imagen", vbOKOnly + vbCritical, Text) - Case "FRA" - MsgBox("Cette action n'est pas prise en charge sur cette image", vbOKOnly + vbCritical, Text) - Case "PTB", "PTG" - MsgBox("Esta ação não é suportada nesta imagem", vbOKOnly + vbCritical, Text) - Case "ITA" - MsgBox("In questa immagine questa azione non è supportata", vbOKOnly + vbCritical, Text) - End Select - Case 1 - MsgBox("This action is not supported on this image", vbOKOnly + vbCritical, Text) - Case 2 - MsgBox("Esta acción no está soportada en esta imagen", vbOKOnly + vbCritical, Text) - Case 3 - MsgBox("Cette action n'est pas prise en charge sur cette image", vbOKOnly + vbCritical, Text) - Case 4 - MsgBox("Esta ação não é suportada nesta imagem", vbOKOnly + vbCritical, Text) - Case 5 - MsgBox("In questa immagine questa azione non è supportata", vbOKOnly + vbCritical, Text) - End Select + MsgBox(LocalizationService.ForSection("Main.Actions")("UnsupportedImage.Message"), vbOKOnly + vbCritical, Text) Exit Sub End If DynaLog.LogMessage("All requirements are met. Continuing with the task...") DynaLog.LogMessage("Opening AppX package information dialog...") ProgressPanel.OperationNum = 993 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Getting package names..." - Case "ESN" - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de paquetes..." - Case "FRA" - PleaseWaitDialog.Label2.Text = "Obtention des noms de paquets en cours..." - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Obter nomes de pacotes..." - Case "ITA" - PleaseWaitDialog.Label2.Text = "Verifica nomi pacchetti..." - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Getting package names..." - Case 2 - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de paquetes..." - Case 3 - PleaseWaitDialog.Label2.Text = "Obtention des noms de paquets en cours..." - Case 4 - PleaseWaitDialog.Label2.Text = "Obter nomes de pacotes..." - Case 5 - PleaseWaitDialog.Label2.Text = "Verifica nomi pacchetti..." - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main")("Wait.Label") If Not CompletedTasks(2) Then DynaLog.LogMessage("AppX package background processes haven't completed.") PleaseWaitDialog.ShowDialog(Me) @@ -13711,61 +8184,13 @@ Public Class MainForm DynaLog.LogMessage("Checking edition and version information for any unmet requirements...") If (CurrentImage.ImageEditionId.Equals("WindowsPE", StringComparison.OrdinalIgnoreCase) OrElse CurrentImage.WinPeInDisguise) Or Not IsWindows10OrHigher(MountDir & "\Windows\system32\ntoskrnl.exe") Then DynaLog.LogMessage("The image is not supported") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("This action is not supported on this image", vbOKOnly + vbCritical, Text) - Case "ESN" - MsgBox("Esta acción no está soportada en esta imagen", vbOKOnly + vbCritical, Text) - Case "FRA" - MsgBox("Cette action n'est pas prise en charge sur cette image", vbOKOnly + vbCritical, Text) - Case "PTB", "PTG" - MsgBox("Esta ação não é suportada nesta imagem", vbOKOnly + vbCritical, Text) - Case "ITA" - MsgBox("In questa immagine questa azione non è supportata", vbOKOnly + vbCritical, Text) - End Select - Case 1 - MsgBox("This action is not supported on this image", vbOKOnly + vbCritical, Text) - Case 2 - MsgBox("Esta acción no está soportada en esta imagen", vbOKOnly + vbCritical, Text) - Case 3 - MsgBox("Cette action n'est pas prise en charge sur cette image", vbOKOnly + vbCritical, Text) - Case 4 - MsgBox("Esta ação não é suportada nesta imagem", vbOKOnly + vbCritical, Text) - Case 5 - MsgBox("In questa immagine questa azione non è supportata", vbOKOnly + vbCritical, Text) - End Select + MsgBox(LocalizationService.ForSection("Main.Actions")("UnsupportedImage.Message"), vbOKOnly + vbCritical, Text) Exit Sub End If DynaLog.LogMessage("All requirements are met. Continuing with the task...") DynaLog.LogMessage("Opening capability information dialog...") ProgressPanel.OperationNum = 994 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Getting capability names and their state..." - Case "ESN" - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de funcionalidades y sus estados..." - Case "FRA" - PleaseWaitDialog.Label2.Text = "Obtention des noms des capacités et de leur état en cours..." - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Obter os nomes das capacidades e o seu estado..." - Case "ITA" - PleaseWaitDialog.Label2.Text = "Verifica nomi capacità e relativo stato..." - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Getting capability names and their state..." - Case 2 - PleaseWaitDialog.Label2.Text = "Obteniendo nombres de funcionalidades y sus estados..." - Case 3 - PleaseWaitDialog.Label2.Text = "Obtention des noms des capacités et de leur état en cours..." - Case 4 - PleaseWaitDialog.Label2.Text = "Obter os nomes das capacidades e o seu estado..." - Case 5 - PleaseWaitDialog.Label2.Text = "Verifica nomi capacità e relativo stato..." - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main")("Get.Cap.Names.Label") If Not CompletedTasks(3) Then DynaLog.LogMessage("Capability background processes haven't completed.") PleaseWaitDialog.ShowDialog(Me) @@ -13801,31 +8226,7 @@ Public Class MainForm Private Sub Button52_Click(sender As Object, e As EventArgs) Handles Button52.Click DynaLog.LogMessage("Opening driver information dialog...") ProgressPanel.OperationNum = 994 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - PleaseWaitDialog.Label2.Text = "Getting installed driver packages..." - Case "ESN" - PleaseWaitDialog.Label2.Text = "Obteniendo paquetes de controladores instalados..." - Case "FRA" - PleaseWaitDialog.Label2.Text = "Obtention des paquets de pilotes installés en cours..." - Case "PTB", "PTG" - PleaseWaitDialog.Label2.Text = "Obter pacotes de controladores instalados..." - Case "ITA" - PleaseWaitDialog.Label2.Text = "Verifica pacchetti driver installati..." - End Select - Case 1 - PleaseWaitDialog.Label2.Text = "Getting installed driver packages..." - Case 2 - PleaseWaitDialog.Label2.Text = "Obteniendo paquetes de controladores instalados..." - Case 3 - PleaseWaitDialog.Label2.Text = "Obtention des paquets de pilotes installés en cours..." - Case 4 - PleaseWaitDialog.Label2.Text = "Obter pacotes de controladores instalados..." - Case 5 - PleaseWaitDialog.Label2.Text = "Verifica pacchetti driver installati..." - End Select + PleaseWaitDialog.Label2.Text = LocalizationService.ForSection("Main")("Loading.DriverPackages.Label") If Not CompletedTasks(4) Then DynaLog.LogMessage("Device driver background processes haven't completed.") PleaseWaitDialog.ShowDialog(Me) @@ -13892,6 +8293,21 @@ Public Class MainForm #End Region + + + Private Function GetNewsLastUpdatedText() As String + Dim currentOSCulture As CultureInfo = CultureInfo.CurrentCulture + Dim dateText As String = If(HumanizeDates, + String.Format("{0}, {1}", NewsLastUpdateDate.ToString(currentOSCulture.DateTimeFormat.LongDatePattern, currentOSCulture), + NewsLastUpdateDate.ToString(currentOSCulture.DateTimeFormat.LongTimePattern, currentOSCulture)), + NewsLastUpdateDate.ToString("MM/dd/yyyy HH:mm:ss")) + + Dim lastUpdatedPrefix As String = LocalizationService.ForSection("Main.News")("Last.Updated.Label") + + Return String.Format("{0} {1}", lastUpdatedPrefix.TrimEnd(), dateText) + End Function + + Sub GetFeedNews() NewsLastUpdateDate = Date.Now DynaLog.LogMessage("Pulling news feed from DISMTools subreddit...") @@ -13960,7 +8376,7 @@ Public Class MainForm If FeedWorker.CancellationPending Then Exit Sub DynaLog.LogMessage("Getting feed news...") GetFeedNews() - DynaLog.LogMessage("Reporting progress to UI. We got feeds!!!") + DynaLog.LogMessage("Reporting feed result to UI.") FeedWorker.ReportProgress(0) If Not FeedWorker.CancellationPending Then Thread.Sleep(2000) End Sub @@ -14031,10 +8447,7 @@ Public Class MainForm Private Sub FeedWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles FeedWorker.ProgressChanged DynaLog.LogMessage("Refreshing news feed...") Dim currentOSCulture As CultureInfo = CultureInfo.CurrentCulture - Label8.Text = String.Format("News last updated: {0}", If(HumanizeDates, - String.Format("{0}, {1}", NewsLastUpdateDate.ToString(currentOSCulture.DateTimeFormat.LongDatePattern, currentOSCulture), - NewsLastUpdateDate.ToString(currentOSCulture.DateTimeFormat.LongTimePattern, currentOSCulture)), - NewsLastUpdateDate.ToString("MM/dd/yyyy HH:mm:ss"))) + Label8.Text = GetNewsLastUpdatedText() NewsItemCardContainerPanel.Controls.Clear() FeedLinks.Clear() Try @@ -14194,92 +8607,14 @@ Public Class MainForm osUninstReg.Close() DynaLog.LogMessage("OS Uninstallation Window: " & RollbackDays & " day(s)") Dim msg As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "You have " & RollbackDays & " days to go back to the old version of Windows." & CrLf & CrLf & - "- To increase or decrease this uninstall window, go to Commands -> OS uninstall -> Set uninstall window..." & CrLf & - "- To initiate the OS rollback, go to Commands -> OS uninstall -> Initiate uninstall..." & CrLf & - "- To remove the ability to revert to the old version, go to Commands -> OS uninstall -> Remove roll back ability..." - Case "ESN" - msg = "Tiene " & RollbackDays & " días para volver a la versión anterior de Windows." & CrLf & CrLf & - "- Para aumentar o reducir este margen de desinstalación, vaya a Comandos -> Desinstalación del sistema operativo -> Establecer margen de desinstalación..." & CrLf & - "- Para iniciar la desinstalación, vaya a Comandos -> Desinstalación del sistema operativo -> Iniciar desinstalación..." & CrLf & - "- Para eliminar la habilidad de revertir a la versión anterior, vaya a Comandos -> Desinstalación del sistema operativo -> Eliminar habilidad de desinstalación..." - Case "FRA" - msg = "Vous avez " & RollbackDays & " jours pour revenir à l'ancienne version de Windows." & CrLf & CrLf & - "- Pour augmenter ou réduire cette créneau de désinstallation, allez dans Commandes -> Désinstallation du système d'exploitation -> Définir la créneau de désinstallation..." & CrLf & - "- Pour démarrer le retour en arrière du système d'exploitation, cliquez sur Commandes -> Désinstallation du système d'exploitation -> Démarrer la désinstallation..." & CrLf & - "- Pour supprimer la possibilité de revenir à l'ancienne version, cliquez sur Commandes -> Désinstallation du système d'exploitation -> Supprimer la possibilité de revenir en arrière..." - Case "PTB", "PTG" - msg = "Tem " & RollbackDays & " dias para voltar à versão antiga do Windows." & CrLf & CrLf & - "- Para aumentar ou diminuir esta janela de desinstalação, aceda a Comandos -> Desinstalação do sistema operativo -> Definir janela de desinstalação..." & CrLf & - "- Para iniciar a reversão do SO, aceda a Comandos -> Desinstalação do sistema operativo -> Iniciar desinstalação..." & CrLf & - "- Para remover a capacidade de reverter para a versão antiga, vá para Comandos -> Desinstalação do sistema operacional -> Remover capacidade de reversão..." - Case "ITA" - msg = "Hai a disposizione " & RollbackDays & " giorni per tornare alla vecchia versione di Windows." & CrLf & CrLf & - "- Per aumentare o diminuire questa finestra di disinstallazione, vai su Comandi -> Disinstallazione del sistema operativo -> Imposta finestra disinstallazione..." & CrLf & - "- Per avviare il rollback del sistema operativo, vai su Comandi -> Disinstallazione del sistema operativo -> Avvia disinstallazione..." & CrLf & - "- Per rimuovere la possibilità di tornare alla vecchia versione, vai su Comandi -> Disinstallazione del sistema operativo -> Rimuovi la possibilità di fallback..." - End Select - Case 1 - msg = "You have " & RollbackDays & " days to go back to the old version of Windows." & CrLf & CrLf & - "- To increase or decrease this uninstall window, go to Commands -> OS uninstall -> Set uninstall window..." & CrLf & - "- To initiate the OS rollback, go to Commands -> OS uninstall -> Initiate uninstall..." & CrLf & - "- To remove the ability to revert to the old version, go to Commands -> OS uninstall -> Remove roll back ability..." - Case 2 - msg = "Tiene " & RollbackDays & " días para volver a la versión anterior de Windows." & CrLf & CrLf & - "- Para aumentar o reducir este margen de desinstalación, vaya a Comandos -> Desinstalación del sistema operativo -> Establecer margen de desinstalación..." & CrLf & - "- Para iniciar la desinstalación, vaya a Comandos -> Desinstalación del sistema operativo -> Iniciar desinstalación..." & CrLf & - "- Para eliminar la habilidad de revertir a la versión anterior, vaya a Comandos -> Desinstalación del sistema operativo -> Eliminar habilidad de desinstalación..." - Case 3 - msg = "Vous avez " & RollbackDays & " jours pour revenir à l'ancienne version de Windows." & CrLf & CrLf & - "- Pour augmenter ou réduire cette créneau de désinstallation, allez dans Commandes -> Désinstallation du système d'exploitation -> Définir la créneau de désinstallation..." & CrLf & - "- Pour démarrer le retour en arrière du système d'exploitation, cliquez sur Commandes -> Désinstallation du système d'exploitation -> Démarrer la désinstallation..." & CrLf & - "- Pour supprimer la possibilité de revenir à l'ancienne version, cliquez sur Commandes -> Désinstallation du système d'exploitation -> Supprimer la possibilité de revenir en arrière..." - Case 4 - msg = "Tem " & RollbackDays & " dias para voltar à versão antiga do Windows." & CrLf & CrLf & - "- Para aumentar ou diminuir esta janela de desinstalação, aceda a Comandos -> Desinstalação do sistema operativo -> Definir janela de desinstalação..." & CrLf & - "- Para iniciar a reversão do SO, aceda a Comandos -> Desinstalação do sistema operativo -> Iniciar desinstalação..." & CrLf & - "- Para remover a capacidade de reverter para a versão antiga, vá para Comandos -> Desinstalação do sistema operacional -> Remover capacidade de reversão..." - Case 5 - msg = "Hai a disposizione " & RollbackDays & " giorni per tornare alla vecchia versione di Windows." & CrLf & CrLf & - "- Per aumentare o diminuire questa finestra di disinstallazione, vai su Comandi -> Disinstallazione del sistema operativo -> Imposta finestra di disinstallazione..." & CrLf & - "- Per avviare il rollback del sistema operativo, vai su Comandi -> Disinstallazione del sistema operativo -> Avvia disinstallazione..." & CrLf & - "- Per rimuovere la possibilità di tornare alla vecchia versione, vai su Comandi -> Disinstallazione del sistema operativo -> Rimuovi la possibilità di fallback..." - End Select + msg = LocalizationService.ForSection("Main.Get.OS").Format("Days.Go.Back.Message", RollbackDays) MsgBox(msg, vbOKOnly + vbInformation, Text) Catch ex As Exception Exit Sub End Try Else DynaLog.LogMessage("The active installation is not being managed right now.") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("This action is only supported on online installations", vbOKOnly + vbCritical, Text) - Case "ESN" - MsgBox("Esta acción solo está soportada en instalaciones activas", vbOKOnly + vbCritical, Text) - Case "FRA" - MsgBox("Cette action est seulement prise en charge par les installations en ligne", vbOKOnly + vbCritical, Text) - Case "PTB", "PTG" - MsgBox("Esta ação só é suportada em instalações online", vbOKOnly + vbCritical, Text) - Case "ITA" - MsgBox("Questa azione è supportata solo su installazioni attive", vbOKOnly + vbCritical, Text) - End Select - Case 1 - MsgBox("This action is only supported on online installations", vbOKOnly + vbCritical, Text) - Case 2 - MsgBox("Esta acción solo está soportada en instalaciones activas", vbOKOnly + vbCritical, Text) - Case 3 - MsgBox("Cette action est seulement prise en charge par les installations en ligne", vbOKOnly + vbCritical, Text) - Case 4 - MsgBox("Esta ação só é suportada em instalações online", vbOKOnly + vbCritical, Text) - Case 5 - MsgBox("Questa azione è supportata solo in installazioni online", vbOKOnly + vbCritical, Text) - End Select + MsgBox(LocalizationService.ForSection("Main.OSUninstallWindow")("OnlineOnly.Message"), vbOKOnly + vbCritical, Text) End If End Sub @@ -14293,71 +8628,7 @@ Public Class MainForm Exit Sub End If Dim msg As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = Environment.UserName & ", please read this message carefully before proceeding." & CrLf & CrLf & - "If you have installed programs after the upgrade, proceeding with the rollback process may remove them. Make sure you have backed up their settings in case you need to reinstall them later on. Also, back up your files in case they are affected by the rollback process." & CrLf & CrLf & - "Next, don't get locked out. If you have set a password for your current user, make sure you know it. Otherwise, you may not be able to log in." & CrLf & CrLf & - "Finally, thanks for trying this version of Windows." & CrLf & CrLf & - "Do you want to start the rollback process?" - Case "ESN" - msg = Environment.UserName & ", lea este mensaje antes de proceder." & CrLf & CrLf & - "Si ha instalado programas tras la actualización, este proceso podría eliminarlos. Asegúrese de hacer una copia de seguridad de sus configuraciones en el caso de que deba reinstalarlos después. También, haga una copia de seguridad de sus archivos en el caso de que se vean afectados por este proceso." & CrLf & CrLf & - "Después, si ha establecido una contraseña, asegúrese de recordarla para ser capaz de iniciar sesión." & CrLf & CrLf & - "Finalmente, gracias por probar esta versión de Windows." & CrLf & CrLf & - "¿Desea iniciar el proceso de desinstalación?" - Case "FRA" - msg = Environment.UserName & ", veuillez lire attentivement ce message avant de poursuivre." & CrLf & CrLf & - "Si vous avez installé des programmes après la mise à niveau, le processus de retour en arrière risque de les supprimer. Assurez-vous d'avoir sauvegardé leurs paramètres au cas où vous devriez les réinstaller ultérieurement. Sauvegardez également vos fichiers au cas où ils seraient affectés par le processus de retour en arrière." & CrLf & CrLf & - "Ensuite, ne vous laissez pas bloquer. Si vous avez défini un mot de passe pour votre utilisateur actuel, assurez-vous de le connaître. Sinon, vous risquez de ne pas pouvoir vous connecter." & CrLf & CrLf & - "Enfin, merci d'avoir essayé cette version de Windows." & CrLf & CrLf & - "Souhaitez-vous démarrer le processus de retour en arrière ?" - Case "PTB", "PTG" - msg = Environment.UserName & ", leia atentamente esta mensagem antes de prosseguir." & CrLf & CrLf & - "Se tiver instalado programas após a atualização, o processo de reversão poderá removê-los. Certifique-se de que efectuou uma cópia de segurança das respectivas definições para o caso de ter de os reinstalar mais tarde. Além disso, faça uma cópia de segurança dos seus ficheiros para o caso de serem afectados pelo processo de reversão." & CrLf & CrLf & - "De seguida, não obtenha o seu acesso bloqueado. Se tiver definido uma palavra-passe para o seu utilizador atual, certifique-se de que a sabe. Caso contrário, poderá não conseguir iniciar sessão." & CrLf & CrLf & - "Por fim, obrigado por experimentar esta versão do Windows." & CrLf & CrLf & - "Pretende iniciar o processo de reversão?" - Case "ITA" - msg = Environment.UserName & ", prima di procedere leggi attentamente questo messaggio." & CrLf & CrLf & - "Se sono stati installati dei programmi dopo l'aggiornamento, procedere con il processo di rollback potrebbe rimuoverli. Nel caso in cui sia necessario reinstallarli in seguito assicurati di aver eseguito il backup delle impostazioni. Inoltre, nel caso in cui siano interessati dal processo di rollback esegui il backup dei file." & CrLf & CrLf & - "Poi, non rimanete chiusi fuori. Se è stata impostata una password per l'utente attuale, assicurati di conoscerla. In caso contrario, potresti non essere in grado di accedere" & CrLf & CrLf & - "Infine, grazie per aver provato questa versione di Windows." & CrLf & CrLf & - "Vuoi avviare il processo di rollback?" - End Select - Case 1 - msg = Environment.UserName & ", please read this message carefully before proceeding." & CrLf & CrLf & - "If you have installed programs after the upgrade, proceeding with the rollback process may remove them. Make sure you have backed up their settings in case you need to reinstall them later on. Also, back up your files in case they are affected by the rollback process." & CrLf & CrLf & - "Next, don't get locked out. If you have set a password for your current user, make sure you know it. Otherwise, you may not be able to log in." & CrLf & CrLf & - "Finally, thanks for trying this version of Windows." & CrLf & CrLf & - "Do you want to start the rollback process?" - Case 2 - msg = Environment.UserName & ", lea este mensaje antes de proceder." & CrLf & CrLf & - "Si ha instalado programas tras la actualización, este proceso podría eliminarlos. Asegúrese de hacer una copia de seguridad de sus configuraciones en el caso de que deba reinstalarlos después. También, haga una copia de seguridad de sus archivos en el caso de que se vean afectados por este proceso." & CrLf & CrLf & - "Después, si ha establecido una contraseña, asegúrese de recordarla para ser capaz de iniciar sesión." & CrLf & CrLf & - "Finalmente, gracias por probar esta versión de Windows." & CrLf & CrLf & - "¿Desea iniciar el proceso de desinstalación?" - Case 3 - msg = Environment.UserName & ", veuillez lire attentivement ce message avant de poursuivre." & CrLf & CrLf & - "Si vous avez installé des programmes après la mise à niveau, le processus de retour en arrière risque de les supprimer. Assurez-vous d'avoir sauvegardé leurs paramètres au cas où vous devriez les réinstaller ultérieurement. Sauvegardez également vos fichiers au cas où ils seraient affectés par le processus de retour en arrière." & CrLf & CrLf & - "Ensuite, ne vous laissez pas bloquer. Si vous avez défini un mot de passe pour votre utilisateur actuel, assurez-vous de le connaître. Sinon, vous risquez de ne pas pouvoir vous connecter." & CrLf & CrLf & - "Enfin, merci d'avoir essayé cette version de Windows." & CrLf & CrLf & - "Souhaitez-vous démarrer le processus de retour en arrière ?" - Case 4 - msg = Environment.UserName & ", leia atentamente esta mensagem antes de prosseguir." & CrLf & CrLf & - "Se tiver instalado programas após a atualização, o processo de reversão poderá removê-los. Certifique-se de que efectuou uma cópia de segurança das respectivas definições para o caso de ter de os reinstalar mais tarde. Além disso, faça uma cópia de segurança dos seus ficheiros para o caso de serem afectados pelo processo de reversão." & CrLf & CrLf & - "De seguida, não obtenha o seu acesso bloqueado. Se tiver definido uma palavra-passe para o seu utilizador atual, certifique-se de que a sabe. Caso contrário, poderá não conseguir iniciar sessão." & CrLf & CrLf & - "Por fim, obrigado por experimentar esta versão do Windows." & CrLf & CrLf & - "Pretende iniciar o processo de reversão?" - Case 5 - msg = Environment.UserName & ", prima di procedere leggi attentamente questo messaggio." & CrLf & CrLf & - "Se sono stati installati dei programmi dopo l'aggiornamento, procedere con il processo di rollback potrebbe rimuoverli. Nel caso in cui sia necessario reinstallarli in seguito assicurati di aver eseguito il backup delle impostazioni. Inoltre,nel caso in cui siano interessati dal processo di rollback esegui il backup dei file." & CrLf & CrLf & - "Poi, non rimanete chiusi fuori. Se è stata impostata una password per l'utente attuale, assicurati di conoscerla. In caso contrario, potresti non essere in grado di accedere" & CrLf & CrLf & - "Infine, grazie per aver provato questa versione di Windows." & CrLf & CrLf & - "Vuoi avviare il processo di rollback?" - End Select + msg = LocalizationService.ForSection("Main.StartOSUninstall").Format("ReadCarefully.Message", Environment.UserName) If MsgBox(msg, vbYesNo + vbExclamation, Text) = MsgBoxResult.Yes Then DynaLog.LogMessage("User accepted the question. Proceeding with OS uninstallation...") If Not ProgressPanel.IsDisposed Then ProgressPanel.Dispose() @@ -14374,31 +8645,7 @@ Public Class MainForm End Try Else DynaLog.LogMessage("The active installation is not being managed right now.") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("This action is only supported on online installations", vbOKOnly + vbCritical, Text) - Case "ESN" - MsgBox("Esta acción solo está soportada en instalaciones activas", vbOKOnly + vbCritical, Text) - Case "FRA" - MsgBox("Cette action est seulement prise en charge par les installations en ligne", vbOKOnly + vbCritical, Text) - Case "PTB", "PTG" - MsgBox("Esta ação só é suportada em instalações online", vbOKOnly + vbCritical, Text) - Case "ITA" - MsgBox("Questa azione è supportata solo in installazioni online", vbOKOnly + vbCritical, Text) - End Select - Case 1 - MsgBox("This action is only supported on online installations", vbOKOnly + vbCritical, Text) - Case 2 - MsgBox("Esta acción solo está soportada en instalaciones activas", vbOKOnly + vbCritical, Text) - Case 3 - MsgBox("Cette action est seulement prise en charge par les installations en ligne", vbOKOnly + vbCritical, Text) - Case 4 - MsgBox("Esta ação só é suportada em instalações online", vbOKOnly + vbCritical, Text) - Case 5 - MsgBox("Questa azione è supportata solo in installazioni online", vbOKOnly + vbCritical, Text) - End Select + MsgBox(LocalizationService.ForSection("Main.OSUninstall")("OnlineOnly.Message"), vbOKOnly + vbCritical, Text) End If End Sub @@ -14412,61 +8659,7 @@ Public Class MainForm Exit Sub End If Dim msg As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = Environment.UserName & ", please read this message carefully before proceeding." & CrLf & CrLf & - "If you have used this new Windows version for some time and have determined that no issues are present, you can remove the ability to initiate a rollback." & CrLf & CrLf & - "This won't delete the files from the old installation, so you need to use Disk Cleanup (cleanmgr) if you want to free up some space." & CrLf & CrLf & - "Do you want to remove the ability to roll back to an older version of Windows?" - Case "ESN" - msg = Environment.UserName & ", lea este mensaje antes de proceder." & CrLf & CrLf & - "Si ha utilizado esta versión nueva de Windows por un rato y ha determinado que no hay errores, puede eliminar la habilidad para iniciar un restablecimiento a una versión anterior." & CrLf & CrLf & - "Esto no eliminará los archivos de la instalación anterior, así que debe utilizar la herramienta de Limpieza de Disco (cleanmgr) si desea liberar algo de espacio." & CrLf & CrLf & - "¿Desea eliminar la habilidad para revertir a una versión anterior de Windows?" - Case "FRA" - msg = Environment.UserName & ", veuillez lire attentivement ce message avant de poursuivre." & CrLf & CrLf & - "Si vous avez utilisé cette nouvelle version de Windows pendant un certain temps et que vous avez déterminé qu'il n'y a pas de problème, vous pouvez supprimer la possibilité de lancer un retour en arrière." & CrLf & CrLf & - "Cette opération ne supprime pas les fichiers de l'ancienne installation ; vous devez donc utiliser l'outil de nettoyage de disque (cleanmgr) si vous souhaitez libérer de l'espace." & CrLf & CrLf & - "Voulez-vous supprimer la possibilité de revenir à une ancienne version de Windows ?" - Case "PTB", "PTG" - msg = Environment.UserName & ", leia atentamente esta mensagem antes de prosseguir." & CrLf & CrLf & - "Se já utilizou esta nova versão do Windows durante algum tempo e determinou que não existem problemas, pode remover a capacidade de iniciar uma reversão." & CrLf & CrLf & - "Isto não eliminará os ficheiros da instalação antiga, pelo que terá de utilizar a Limpeza de disco (cleanmgr) se pretender libertar algum espaço." & CrLf & CrLf & - "Pretende remover a capacidade de retroceder para uma versão mais antiga do Windows?" - Case "ITA" - msg = Environment.UserName & ", prima di procedere leggi attentamente questo messaggio." & CrLf & CrLf & - "Se si usa la nuova versione di Windows da qualche tempo e si è accertato che non ci sono problemi, è possibile rimuovere la possibilità di avviare un ripristino." & CrLf & CrLf & - "Questa operazione non cancellerà i file della vecchia installazione, quindi se vuoi liberare un po' di spazio è necessario usare Pulizia disco (cleanmgr)." & CrLf & CrLf & - "Vuoi rimuovere la possibilità di tornare a una versione precedente di Windows?" - End Select - Case 1 - msg = Environment.UserName & ", please read this message carefully before proceeding." & CrLf & CrLf & - "If you have used this new Windows version for some time and have determined that no issues are present, you can remove the ability to initiate a rollback." & CrLf & CrLf & - "This won't delete the files from the old installation, so you need to use Disk Cleanup (cleanmgr) if you want to free up some space." & CrLf & CrLf & - "Do you want to remove the ability to roll back to an older version of Windows?" - Case 2 - msg = Environment.UserName & ", lea este mensaje antes de proceder." & CrLf & CrLf & - "Si ha utilizado esta versión nueva de Windows por un rato y ha determinado que no hay errores, puede eliminar la habilidad para iniciar un restablecimiento a una versión anterior." & CrLf & CrLf & - "Esto no eliminará los archivos de la instalación anterior, así que debe utilizar la herramienta de Limpieza de Disco (cleanmgr) si desea liberar algo de espacio." & CrLf & CrLf & - "¿Desea eliminar la habilidad para revertir a una versión anterior de Windows?" - Case 3 - msg = Environment.UserName & ", veuillez lire attentivement ce message avant de poursuivre." & CrLf & CrLf & - "Si vous avez utilisé cette nouvelle version de Windows pendant un certain temps et que vous avez déterminé qu'il n'y a pas de problème, vous pouvez supprimer la possibilité de lancer un retour en arrière." & CrLf & CrLf & - "Cette opération ne supprime pas les fichiers de l'ancienne installation ; vous devez donc utiliser l'outil de nettoyage de disque (cleanmgr) si vous souhaitez libérer de l'espace." & CrLf & CrLf & - "Voulez-vous supprimer la possibilité de revenir à une ancienne version de Windows ?" - Case 4 - msg = Environment.UserName & ", leia atentamente esta mensagem antes de prosseguir." & CrLf & CrLf & - "Se já utilizou esta nova versão do Windows durante algum tempo e determinou que não existem problemas, pode remover a capacidade de iniciar uma reversão." & CrLf & CrLf & - "Isto não eliminará os ficheiros da instalação antiga, pelo que terá de utilizar a Limpeza de disco (cleanmgr) se pretender libertar algum espaço." & CrLf & CrLf & - "Pretende remover a capacidade de retroceder para uma versão mais antiga do Windows?" - Case 5 - msg = Environment.UserName & ", prima di procedere leggi attentamente questo messaggio." & CrLf & CrLf & - "Se si usa la nuova versione di Windows da qualche tempo e si è accertato che non ci sono problemi, è possibile rimuovere la possibilità di avviare un ripristino." & CrLf & CrLf & - "Questa operazione non cancellerà i file della vecchia installazione, quindi se vuoi liberare un po' di spazio è necessario utilizzare Pulizia disco (cleanmgr)." & CrLf & CrLf & - "Vuoi rimuovere la possibilità di tornare a una versione precedente di Windows?" - End Select + msg = LocalizationService.ForSection("Main.RemoveOSUninstall").Format("ReadCarefully.Message", Environment.UserName) If MsgBox(msg, vbYesNo + vbExclamation, Text) = MsgBoxResult.Yes Then DynaLog.LogMessage("User accepted the question. Proceeding with removal of OS uninstallation capability...") If Not ProgressPanel.IsDisposed Then ProgressPanel.Dispose() @@ -14482,31 +8675,7 @@ Public Class MainForm End Try Else DynaLog.LogMessage("The active installation is not being managed right now.") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("This action is only supported on online installations", vbOKOnly + vbCritical, Text) - Case "ESN" - MsgBox("Esta acción solo está soportada en instalaciones activas", vbOKOnly + vbCritical, Text) - Case "FRA" - MsgBox("Cette action est seulement prise en charge par les installations en ligne", vbOKOnly + vbCritical, Text) - Case "PTB", "PTG" - MsgBox("Esta ação só é suportada em instalações online", vbOKOnly + vbCritical, Text) - Case "ITA" - MsgBox("Questa azione è supportata solo in installazioni online", vbOKOnly + vbCritical, Text) - End Select - Case 1 - MsgBox("This action is only supported on online installations", vbOKOnly + vbCritical, Text) - Case 2 - MsgBox("Esta acción solo está soportada en instalaciones activas", vbOKOnly + vbCritical, Text) - Case 3 - MsgBox("Cette action est seulement prise en charge par les installations en ligne", vbOKOnly + vbCritical, Text) - Case 4 - MsgBox("Esta ação só é suportada em instalações online", vbOKOnly + vbCritical, Text) - Case 5 - MsgBox("Questa azione è supportata solo in installazioni online", vbOKOnly + vbCritical, Text) - End Select + MsgBox(LocalizationService.ForSection("Main.RemoveOSUninstall")("OnlineOnly.Message"), vbOKOnly + vbCritical, Text) End If End Sub @@ -14674,19 +8843,21 @@ Public Class MainForm DynaLog.LogMessage("Browser emulation setting level < 11001 (IE 11+Edge). Setting value...") IECompatRk.SetValue("DISMTools.exe", 11001, RegistryValueKind.DWord) DynaLog.LogMessage("Value set. A program restart is necessary.") - MsgBox("Modified Internet Explorer emulation settings for DISMTools. You will need to restart DISMTools in order to start video playback", vbOKOnly + vbInformation, "DISMTools") + MsgBox(LocalizationService.ForSection("Main.Messages")("IE.Emulation.Changed.Message"), vbOKOnly + vbInformation, "DISMTools") IECompatRk.Close() Exit Sub End If IECompatRk.Close() Catch ex As Exception DynaLog.LogMessage("Could not detect/modify IE browser emulation settings. Error message: " & ex.Message) - MsgBox("DISMTools could not modify Internet Explorer emulation settings. Video playback will not start.", vbOKOnly + vbCritical, "DISMTools") + MsgBox(LocalizationService.ForSection("Main.Messages")("DISM.Tools.Modify.Message"), vbOKOnly + vbCritical, "DISMTools") Exit Sub End Try - If Not videoServer.IsListenerAlive Then videoServer.StartServer() - If videoServer.IsListenerAlive() Then - Process.Start("http://localhost:2026/videoplay.html") + If videoServer IsNot Nothing Then + If Not videoServer.IsListenerAlive Then videoServer.StartServer() + If videoServer.IsListenerAlive() Then + Process.Start("http://localhost:2026/videoplay.html") + End If End If End If End Sub @@ -14728,7 +8899,7 @@ Public Class MainForm DynaLog.LogMessage("Items in recents list: " & RecentList.Count) If RecentList.Count <= 0 Then DynaLog.LogMessage("No items are present in the recents list. Exiting...") - MsgBox("No items are present in the Recents list.") + MsgBox(LocalizationService.ForSection("Main.Messages")("Items.Present.None.Label")) Exit Sub End If If (itemOrder + 1) > RecentList.Count Then @@ -14848,8 +9019,8 @@ Public Class MainForm ImgInfoSaveDlg.SaveTarget = ImgInfoSFD.FileName ImgInfoSaveDlg.SourceImage = MountedImgMgr.ListView1.FocusedItem.SubItems(0).Text ImgInfoSaveDlg.ImgMountDir = MountedImgMgr.ListView1.FocusedItem.SubItems(2).Text - ImgInfoSaveDlg.OnlineMode = OnlineManagement - ImgInfoSaveDlg.OfflineMode = OfflineManagement + ImgInfoSaveDlg.OnlineMode = False + ImgInfoSaveDlg.OfflineMode = False ImgInfoSaveDlg.AllDrivers = AllDrivers ImgInfoSaveDlg.SkipQuestions = SkipQuestions ImgInfoSaveDlg.AutoCompleteInfo = AutoCompleteInfo @@ -14862,7 +9033,6 @@ Public Class MainForm End Sub Private Sub CreateDiscImageWithThisFileToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CreateDiscImageWithThisFileToolStripMenuItem.Click - If ISOCreator.BackgroundWorker1.IsBusy Then Exit Sub DynaLog.LogMessage("Opening ISO creator...") ISOCreator.TextBox1.Text = MountedImgMgr.ListView1.FocusedItem.SubItems(0).Text If ISOCreator.Visible Then @@ -14903,7 +9073,7 @@ Public Class MainForm contents = WIMExpClient.DownloadString("https://raw.githubusercontent.com/CodingWonders/WIM-Explorer/main/DISMTools-Install.ps1") Catch ex As WebException DynaLog.LogMessage("Could not download WIM Explorer Setup. Error message: " & ex.Status.ToString()) - MessageBox.Show("We couldn't download WIM Explorer Setup. Reason:" & CrLf & ex.Status.ToString()) + MessageBox.Show(LocalizationService.ForSection("Main.Messages").Format("DownloadFailed.Label", ex.Status.ToString())) Exit Sub End Try If contents <> "" Then @@ -14940,7 +9110,7 @@ Public Class MainForm WimExplorer.Start() End If Catch ex As Exception - MessageBox.Show("We couldn't prepare WIM Explorer Setup. Reason:" & CrLf & ex.Message) + MessageBox.Show(LocalizationService.ForSection("Main.Messages").Format("PrepareFailed.Label", ex.Message)) Exit Sub End Try End Sub @@ -15076,60 +9246,12 @@ Public Class MainForm RegistryControlPanel.Show() ElseIf IsImageMounted And OnlineManagement Then DynaLog.LogMessage("The active installation is being managed right now. The image is not supported.") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "This control panel is not available on active installations." - Case "ESN" - msg = "Este panel de control no está disponible en instalaciones activas." - Case "FRA" - msg = "Ce panneau de contrôle n'est pas disponible sur les installations actives." - Case "PTB", "PTG" - msg = "Este painel de controlo não está disponível em instalações activas." - Case "ITA" - msg = "Questo pannello di controllo non è disponibile nelle installazioni attive." - End Select - Case 1 - msg = "This control panel is not available on active installations." - Case 2 - msg = "Este panel de control no está disponible en instalaciones activas." - Case 3 - msg = "Ce panneau de contrôle n'est pas disponible sur les installations actives." - Case 4 - msg = "Este painel de controlo não está disponível em instalações activas." - Case 5 - msg = "Questo pannello di controllo non è disponibile nelle installazioni attive." - End Select + msg = LocalizationService.ForSection("Main.RegistryPanel")("Control.Active.Message") MsgBox(msg, vbOKOnly + vbCritical, Text) End If Else DynaLog.LogMessage("No project has been loaded.") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "You need to load a project or mode to manage registry hives." - Case "ESN" - msg = "Debe cargar un proyecto o modo para administrar subárboles del registro." - Case "FRA" - msg = "Vous devez charger un projet ou un mode pour gérer les ruches du registre." - Case "PTB", "PTG" - msg = "É necessário carregar um projeto ou modo para gerir as colmeias de registo." - Case "ITA" - msg = "Per gestire la struttura del registro è necessario caricare un progetto o una modalità." - End Select - Case 1 - msg = "You need to load a project or mode to manage registry hives." - Case 2 - msg = "Debe cargar un proyecto o modo para administrar subárboles del registro." - Case 3 - msg = "Vous devez charger un projet ou un mode pour gérer les ruches du registre." - Case 4 - msg = "É necessário carregar um projeto ou modo para gerir as colmeias de registo." - Case 5 - msg = "Per gestire la struttura del registro è necessario caricare un progetto o una modalità." - End Select + msg = LocalizationService.ForSection("Main.Registry.Actions")("Load.Project.Mode.Message") MsgBox(msg, vbOKOnly + vbExclamation, Text) End If End Sub @@ -15157,59 +9279,11 @@ Public Class MainForm End Sub Private Sub LanguagesAndOptionalFeaturesISOToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LanguagesAndOptionalFeaturesISOToolStripMenuItem.Click - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Process.Start("https://learn.microsoft.com/en-us/azure/virtual-desktop/windows-11-language-packs#prerequisites") - Case "ESN" - Process.Start("https://learn.microsoft.com/es-es/azure/virtual-desktop/windows-11-language-packs#prerequisites") - Case "FRA" - Process.Start("https://learn.microsoft.com/fr-fr/azure/virtual-desktop/windows-11-language-packs#prerequisites") - Case "PTB", "PTG" - Process.Start("https://learn.microsoft.com/pt-pt/azure/virtual-desktop/windows-11-language-packs#prerequisites") - Case "ITA" - Process.Start("https://learn.microsoft.com/it-it/azure/virtual-desktop/windows-11-language-packs#prerequisites") - End Select - Case 1 - Process.Start("https://learn.microsoft.com/en-us/azure/virtual-desktop/windows-11-language-packs#prerequisites") - Case 2 - Process.Start("https://learn.microsoft.com/es-es/azure/virtual-desktop/windows-11-language-packs#prerequisites") - Case 3 - Process.Start("https://learn.microsoft.com/fr-fr/azure/virtual-desktop/windows-11-language-packs#prerequisites") - Case 4 - Process.Start("https://learn.microsoft.com/pt-pt/azure/virtual-desktop/windows-11-language-packs#prerequisites") - Case 5 - Process.Start("https://learn.microsoft.com/it-it/azure/virtual-desktop/windows-11-language-packs#prerequisites") - End Select + Process.Start(String.Format("https://learn.microsoft.com/{0}/azure/virtual-desktop/windows-11-language-packs#prerequisites", LocalizationService.GetMicrosoftLearnCultureCode())) End Sub Private Sub LanguagesAndFODWin10ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LanguagesAndFODWin10ToolStripMenuItem.Click - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Process.Start("https://learn.microsoft.com/en-us/azure/virtual-desktop/language-packs#prerequisites") - Case "ESN" - Process.Start("https://learn.microsoft.com/es-es/azure/virtual-desktop/language-packs#prerequisites") - Case "FRA" - Process.Start("https://learn.microsoft.com/fr-fr/azure/virtual-desktop/language-packs#prerequisites") - Case "PTB", "PTG" - Process.Start("https://learn.microsoft.com/pt-pt/azure/virtual-desktop/language-packs#prerequisites") - Case "ITA" - Process.Start("https://learn.microsoft.com/it-it/azure/virtual-desktop/language-packs#prerequisites") - End Select - Case 1 - Process.Start("https://learn.microsoft.com/en-us/azure/virtual-desktop/language-packs#prerequisites") - Case 2 - Process.Start("https://learn.microsoft.com/es-es/azure/virtual-desktop/language-packs#prerequisites") - Case 3 - Process.Start("https://learn.microsoft.com/fr-fr/azure/virtual-desktop/language-packs#prerequisites") - Case 4 - Process.Start("https://learn.microsoft.com/pt-pt/azure/virtual-desktop/language-packs#prerequisites") - Case 5 - Process.Start("https://learn.microsoft.com/it-it/azure/virtual-desktop/language-packs#prerequisites") - End Select + Process.Start(String.Format("https://learn.microsoft.com/{0}/azure/virtual-desktop/language-packs#prerequisites", LocalizationService.GetMicrosoftLearnCultureCode())) End Sub Private Sub GetCurrentEdition_Click(sender As Object, e As EventArgs) Handles GetCurrentEdition.Click @@ -15218,85 +9292,13 @@ Public Class MainForm If CurrentImage.ImageEditionId <> "" Then DynaLog.LogMessage("Image edition field has been populated. Showing and checking...") Dim msg As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "The current edition is " & Quote & CurrentImage.ImageEditionId & Quote & CrLf - Case "ESN" - msg = "La edición actual es " & Quote & CurrentImage.ImageEditionId & Quote & CrLf - Case "FRA" - msg = "L'édition actuelle est " & Quote & CurrentImage.ImageEditionId & Quote & CrLf - Case "PTB", "PTG" - msg = "A edição atual é " & Quote & CurrentImage.ImageEditionId & Quote & CrLf - Case "ITA" - msg = "L'edizione attuale è " & Quote & CurrentImage.ImageEditionId & Quote & CrLf - End Select - Case 1 - msg = "The current edition is " & Quote & CurrentImage.ImageEditionId & Quote & CrLf - Case 2 - msg = "La edición actual es " & Quote & CurrentImage.ImageEditionId & Quote & CrLf - Case 3 - msg = "L'édition actuelle est " & Quote & CurrentImage.ImageEditionId & Quote & CrLf - Case 4 - msg = "A edição atual é " & Quote & CurrentImage.ImageEditionId & Quote & CrLf - Case 5 - msg = "L'edizione attuale è " & Quote & CurrentImage.ImageEditionId & Quote & CrLf - End Select + msg = LocalizationService.ForSection("Main.GetTargetEditions").Format("CurrentEdition.Message", CurrentImage.ImageEditionId) If CurrentImage.ImageEditionId.Equals("WindowsPE", StringComparison.OrdinalIgnoreCase) OrElse CurrentImage.WinPeInDisguise Then DynaLog.LogMessage("Image edition is WindowsPE. This is a Windows PE image.") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg &= CrLf & "Windows PE images cannot be upgraded to higher editions." - Case "ESN" - msg &= CrLf & "Las imágenes de Windows PE no pueden ser actualizadas a ediciones superiores." - Case "FRA" - msg &= CrLf & "Les images Windows PE ne peuvent pas être mises à niveau vers des éditions supérieures." - Case "PTB", "PTG" - msg &= CrLf & "As imagens do Windows PE não podem ser atualizadas para edições superiores." - Case "ITA" - msg &= CrLf & "Le immagini Windows PE non possono essere aggiornate a edizioni superiori." - End Select - Case 1 - msg &= CrLf & "Windows PE images cannot be upgraded to higher editions." - Case 2 - msg &= CrLf & "Las imágenes de Windows PE no pueden ser actualizadas a ediciones superiores." - Case 3 - msg &= CrLf & "Les images Windows PE ne peuvent pas être mises à niveau vers des éditions supérieures." - Case 4 - msg &= CrLf & "As imagens do Windows PE não podem ser atualizadas para edições superiores." - Case 5 - msg &= CrLf & "Le immagini Windows PE non possono essere aggiornate a edizioni superiori." - End Select + msg &= CrLf & LocalizationService.ForSection("Main.GetTargetEditions")("Windows.Message") Else DynaLog.LogMessage("Image edition is not WindowsPE. This is not a Windows PE image.") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg &= CrLf & "If you have a product key, you may be able to upgrade this Windows image to a higher edition." - Case "ESN" - msg &= CrLf & "Si cuenta con una clave de producto, podrá actualizar esta imagen de Windows a una edición superior." - Case "FRA" - msg &= CrLf & "Si vous disposez d'une clé de produit, vous pourrez peut-être mettre à niveau cette image Windows vers une édition supérieure." - Case "PTB", "PTG" - msg &= CrLf & "Se tiver uma chave de produto, poderá atualizar esta imagem do Windows para uma edição superior." - Case "ITA" - msg &= CrLf & "Se disponi di un codice prodotto, è possibile aggiornare questa immagine di Windows ad un'edizione superiore." - End Select - Case 1 - msg &= CrLf & "If you have a product key, you may be able to upgrade this Windows image to a higher edition." - Case 2 - msg &= CrLf & "Si cuenta con una clave de producto, podrá actualizar esta imagen de Windows a una edición superior." - Case 3 - msg &= CrLf & "Si vous disposez d'une clé de produit, vous pourrez peut-être mettre à niveau cette image Windows vers une édition supérieure." - Case 4 - msg &= CrLf & "Se tiver uma chave de produto, poderá atualizar esta imagem do Windows para uma edição superior." - Case 5 - msg &= CrLf & "Se disponi di un codice prodotto, è possibile aggiornare questa immagine di Windows ad un'edizione superiore." - End Select + msg &= CrLf & LocalizationService.ForSection("Main.GetTargetEditions")("ProductKey.Upgrade.Message") End If MsgBox(msg, vbOKOnly + vbInformation, Text) End If @@ -15319,62 +9321,14 @@ Public Class MainForm If targetEditions.Count > 0 Then ' This image hasn't been upgraded to its highest edition DynaLog.LogMessage("There are target editions. This image can give a little more") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "If you have a suitable product key, you can upgrade this Windows image to one of the following editions:" & CrLf & CrLf - Case "ESN" - msg = "Si cuenta con una clave de producto apropiada, puede actualizar esta imagen de Windows a una de las siguientes ediciones:" & CrLf & CrLf - Case "FRA" - msg = "Si vous disposez d'une clé de produit appropriée, vous pouvez mettre à niveau cette image Windows vers l'une des éditions suivantes :" & CrLf & CrLf - Case "PTB", "PTG" - msg = "Se tiver uma chave de produto adequada, pode atualizar esta imagem do Windows para uma das seguintes edições:" & CrLf & CrLf - Case "ITA" - msg = "Se disponi di un codice prodotto adeguato, è possibile aggiornare questa immagine di Windows ad una delle seguenti edizioni:" & CrLf & CrLf - End Select - Case 1 - msg = "If you have a suitable product key, you can upgrade this Windows image to one of the following editions:" & CrLf & CrLf - Case 2 - msg = "Si cuenta con una clave de producto apropiada, puede actualizar esta imagen de Windows a una de las siguientes ediciones:" & CrLf & CrLf - Case 3 - msg = "Si vous disposez d'une clé de produit appropriée, vous pouvez mettre à niveau cette image Windows vers l'une des éditions suivantes :" & CrLf & CrLf - Case 4 - msg = "Se tiver uma chave de produto adequada, pode atualizar esta imagem do Windows para uma das seguintes edições:" & CrLf & CrLf - Case 5 - msg = "Se disponi di un codice prodotto adeguato, è possibile aggiornare questa immagine di Windows ad una delle seguenti edizioni:" & CrLf & CrLf - End Select + msg = LocalizationService.ForSection("Main.GetTargetEditions")("Suitable.ProductKey.Message") For Each targetEdition In targetEditions msg &= "- " & targetEdition & CrLf Next Else ' This image has been upgraded to its highest edition DynaLog.LogMessage("There are no target editions. This image is already rocking the best edition") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "This image cannot be upgraded to higher editions because it is in its highest edition" - Case "ESN" - msg = "Esta imagen no puede ser actualizada a ediciones superiores porque ya tiene la edición más avanzada" - Case "FRA" - msg = "Cette image ne peut pas être mise à niveau vers des éditions supérieures car elle se trouve dans son édition la plus élevée" - Case "PTB", "PTG" - msg = "Esta imagem não pode ser actualizada para edições superiores porque está na sua edição mais elevada" - Case "ITA" - msg = "Questa immagine non può essere aggiornata ad edizioni superiori perché è già l'edizione più alta" - End Select - Case 1 - msg = "This image cannot be upgraded to higher editions because it is in its highest edition" - Case 2 - msg = "Esta imagen no puede ser actualizada a ediciones superiores porque ya tiene la edición más avanzada" - Case 3 - msg = "Cette image ne peut pas être mise à niveau vers des éditions supérieures car elle se trouve dans son édition la plus élevée" - Case 4 - msg = "Esta imagem não pode ser actualizada para edições superiores porque está na sua edição mais elevada" - Case 5 - msg = "Questa immagine non può essere aggiornata ad edizioni superiori perché è già l'edizione più alta" - End Select + msg = LocalizationService.ForSection("Main.GetTargetEditions")("Image.Cannot.Message") End If End Using Catch ex As Exception @@ -15382,31 +9336,7 @@ Public Class MainForm msgSuccess = False If CurrentImage.ImageEditionId.Equals("WindowsPE", StringComparison.OrdinalIgnoreCase) OrElse CurrentImage.WinPeInDisguise Then DynaLog.LogMessage("Image edition is WindowsPE. This is a Windows PE image.") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Windows PE images cannot be upgraded to higher editions." - Case "ESN" - msg = "Las imágenes de Windows PE no pueden ser actualizadas a ediciones superiores." - Case "FRA" - msg = "Les images Windows PE ne peuvent pas être mises à niveau vers des éditions supérieures." - Case "PTB", "PTG" - msg = "As imagens do Windows PE não podem ser actualizadas para edições superiores." - Case "ITA" - msg = "Le immagini di Windows PE non possono essere aggiornate ad edizioni superiori." - End Select - Case 1 - msg = "Windows PE images cannot be upgraded to higher editions." - Case 2 - msg = "Las imágenes de Windows PE no pueden ser actualizadas a ediciones superiores." - Case 3 - msg = "Les images Windows PE ne peuvent pas être mises à niveau vers des éditions supérieures." - Case 4 - msg = "As imagens do Windows PE não podem ser actualizadas para edições superiores." - Case 5 - msg = "Le immagini di Windows PE non possono essere aggiornate ad edizioni superiori." - End Select + msg = LocalizationService.ForSection("Main.GetTargetEditions")("Windows.Message") Else msg = ex.ToString() End If @@ -15485,33 +9415,7 @@ Public Class MainForm If Directory.Exists(Path.Combine(Application.StartupPath, "docs", "tour")) Then DynaLog.LogMessage("Tour directory exists. Starting the tour!") - Dim languageCode As String = "en" - - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - languageCode = "en" - Case "ESN" - languageCode = "es" - Case "FRA" - languageCode = "fr" - Case "PTB", "PTG" - languageCode = "pt" - Case "ITA" - languageCode = "it" - End Select - Case 1 - languageCode = "en" - Case 2 - languageCode = "es" - Case 3 - languageCode = "fr" - Case 4 - languageCode = "pt" - Case 5 - languageCode = "it" - End Select + Dim languageCode As String = LocalizationService.GetDocumentationLanguageCode() tourServer.StartServer() If tourServer.IsListenerAlive() Then @@ -15538,7 +9442,7 @@ Public Class MainForm If nonExistentFiles >= 2 Then Throw New Exception("No answer files have been detected in the mounted image.") End If - MsgBox("Answer file removed successfully.", vbOKOnly + vbInformation, "") + MsgBox(LocalizationService.ForSection("Main.Messages")("AnswerFile.Removed.Label"), vbOKOnly + vbInformation, "") Catch ex As Exception DynaLog.LogMessage("Could not remove answer files. Reason: " & ex.Message) MsgBox(ex.Message, vbOKOnly + vbExclamation, "") @@ -15561,7 +9465,7 @@ Public Class MainForm Private Sub OpenDiagnosticLogsInLogViewerToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OpenDiagnosticLogsInLogViewerToolStripMenuItem.Click If File.Exists(Path.Combine(Application.StartupPath, "tools", "DynaViewer", "DynaViewer.exe")) Then Process.Start(Path.Combine(Application.StartupPath, "tools", "DynaViewer", "DynaViewer.exe"), - Quote & Path.Combine(Application.StartupPath, "logs", "DT_DynaLog.log") & Quote) + Quote & Path.Combine(Application.StartupPath, "logs", "DT_DynaLog.log") & Quote & " " & LocalizationService.GetLanguageCommandLineArgument()) End If End Sub @@ -15576,7 +9480,7 @@ Public Class MainForm Exit Sub End If If ImgBW.IsBusy Then - MsgBox("Background processes need to finish before loading the service manager.", vbOKOnly + vbExclamation) + MsgBox(LocalizationService.ForSection("Main.Messages")("BackgroundBusy.Message"), vbOKOnly + vbExclamation) Exit Sub End If ServiceManagementForm.Show() @@ -15593,7 +9497,7 @@ Public Class MainForm Exit Sub End If If ImgBW.IsBusy Then - MsgBox("Background processes need to finish before loading the environment variable manager.", vbOKOnly + vbExclamation) + MsgBox(LocalizationService.ForSection("Main.Messages")("Background.Finish.Message"), vbOKOnly + vbExclamation) Exit Sub End If EnvVarManagementForm.Show() @@ -15605,33 +9509,7 @@ Public Class MainForm End Sub Private Sub RestartDTTourTSMI_Click(sender As Object, e As EventArgs) Handles RestartDTTourTSMI.Click - Dim languageCode As String = "en" - - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - languageCode = "en" - Case "ESN" - languageCode = "es" - Case "FRA" - languageCode = "fr" - Case "PTB", "PTG" - languageCode = "pt" - Case "ITA" - languageCode = "it" - End Select - Case 1 - languageCode = "en" - Case 2 - languageCode = "es" - Case 3 - languageCode = "fr" - Case 4 - languageCode = "pt" - Case 5 - languageCode = "it" - End Select + Dim languageCode As String = LocalizationService.GetDocumentationLanguageCode() Process.Start(String.Format("http://localhost:2022/{0}/tour-start.html", languageCode)) End Sub @@ -15720,7 +9598,7 @@ Public Class MainForm DynaLog.LogMessage("State of SecureBoot: " & SecureBootEnabled) If Not SecureBootEnabled Then - MessageBox.Show("Secure Boot is not enabled on this machine.", "Secure Boot status", MessageBoxButtons.OK, MessageBoxIcon.Information) + MessageBox.Show(LocalizationService.ForSection("Main.Messages")("Secure.Boot.Enabled.Label"), LocalizationService.ForSection("Main.Messages")("Secure.Boot.Status.Title"), MessageBoxButtons.OK, MessageBoxIcon.Information) Exit Try End If @@ -15746,13 +9624,13 @@ Public Class MainForm Select Case SecureBootStatus Case SecureBootCA23Status.NotAvailable - MessageBox.Show("Secure Boot is enabled on this machine but does not contain Windows UEFI CA 2023 in its database. Make sure your computer receives the Secure Boot updates before Microsoft Windows Production PCA 2011 certificates expire in June 2026.", "Secure Boot status", MessageBoxButtons.OK, MessageBoxIcon.Warning) + MessageBox.Show(LocalizationService.ForSection("Main.Messages")("Secure.Boot"), LocalizationService.ForSection("Main.Messages")("Secure.Boot.Status.Title"), MessageBoxButtons.OK, MessageBoxIcon.Warning) Case SecureBootCA23Status.InProgress - MessageBox.Show("An update to Secure Boot to support Windows UEFI CA 2023 is in progress.", "Secure Boot status", MessageBoxButtons.OK, MessageBoxIcon.Information) + MessageBox.Show(LocalizationService.ForSection("Main.Messages")("Update.Secure.Boot.Message"), LocalizationService.ForSection("Main.Messages")("Secure.Boot.Status.Title"), MessageBoxButtons.OK, MessageBoxIcon.Information) Case SecureBootCA23Status.Available, SecureBootCA23Status.AvailableEnforced - MessageBox.Show("Secure Boot is enabled on this machine and contains Windows UEFI CA 2023 in its database.", "Secure Boot status", MessageBoxButtons.OK, MessageBoxIcon.Information) + MessageBox.Show(LocalizationService.ForSection("Main.Messages")("Secure.Enabled"), LocalizationService.ForSection("Main.Messages")("Secure.Boot.Status.Title"), MessageBoxButtons.OK, MessageBoxIcon.Information) Case SecureBootCA23Status.Unknown - MessageBox.Show("We could not determine the status of the Windows UEFI CA 2023 update.", "Secure Boot status", MessageBoxButtons.OK, MessageBoxIcon.Information) + MessageBox.Show(LocalizationService.ForSection("Main.Messages")("Determine.Status.Label"), LocalizationService.ForSection("Main.Messages")("Secure.Boot.Status.Title"), MessageBoxButtons.OK, MessageBoxIcon.Information) End Select Catch ex As Exception @@ -15844,9 +9722,9 @@ Public Class MainForm End Sub Private Sub SSE_TSMI_Click(sender As Object, e As EventArgs) Handles SSE_TSMI.Click - Dim SSEPath As String = Path.Combine(Application.StartupPath, "tools", "StarterScriptEditor", "StarterScriptEditor.exe") + Dim SSEPath As String = Path.Combine(Application.StartupPath, "tools", "StarterScriptEditor", "StarterScript.exe") If File.Exists(SSEPath) Then - Process.Start(SSEPath, String.Format("/userdata={0}", Quote & Path.Combine(Application.StartupPath, "userdata", "starter_scripts") & Quote)) + Process.Start(SSEPath, String.Format("/userdata={0} {1}", Quote & Path.Combine(Application.StartupPath, "userdata", "starter_scripts") & Quote, LocalizationService.GetLanguageCommandLineArgument())) SSETimer.Enabled = True End If End Sub @@ -15861,7 +9739,7 @@ Public Class MainForm Private Sub ThemeDesigner_TSMI_Click(sender As Object, e As EventArgs) Handles ThemeDesigner_TSMI.Click Dim TDPath As String = Path.Combine(Application.StartupPath, "tools", "ThemeDesigner", "DT_ThemeDesigner.exe") If File.Exists(TDPath) Then - Process.Start(TDPath, String.Format("/userdata={0}", Quote & Path.Combine(Application.StartupPath, "userdata", "themes") & Quote)) + Process.Start(TDPath, String.Format("/userdata={0} {1}", Quote & Path.Combine(Application.StartupPath, "userdata", "themes") & Quote, LocalizationService.GetLanguageCommandLineArgument())) ThemeDesignerTimer.Enabled = True End If End Sub @@ -15910,19 +9788,19 @@ Public Class MainForm End Sub Private Sub RefreshComputerInfoBtn_MouseHover(sender As Object, e As EventArgs) Handles RefreshComputerInfoBtn.MouseHover - WindowHelper.DisplayToolTip(sender, "Refresh information") + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("Main.Tooltips")("RefreshInfo.Label")) End Sub Private Sub ChangeNetworkConfigBtn_MouseHover(sender As Object, e As EventArgs) Handles ChangeNetworkConfigBtn.MouseHover - WindowHelper.DisplayToolTip(sender, "Change network configuration") + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("Main.Tooltips")("Change.Network.Config.Label")) End Sub Private Sub AdminToolsBtn_MouseHover(sender As Object, e As EventArgs) Handles AdminToolsBtn.MouseHover - WindowHelper.DisplayToolTip(sender, "Other Windows administrative tools") + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("Main.Tooltips")("Other.Win.Administ.Label")) End Sub Private Sub ComputerWallpaperPB_MouseHover(sender As Object, e As EventArgs) Handles ComputerWallpaperPB.MouseHover - WindowHelper.DisplayToolTip(sender, "Click here to change your wallpaper") + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("Main.Tooltips")("Change.Wallpaper.Label")) End Sub Private Sub ComputerWallpaperPB_Click(sender As Object, e As EventArgs) Handles ComputerWallpaperPB.Click @@ -16017,10 +9895,7 @@ Public Class MainForm GetFeedNews() DynaLog.LogMessage("Items in feed: " & FeedContents.Items.Count) Dim currentOSCulture As CultureInfo = CultureInfo.CurrentCulture - Label8.Text = String.Format("News last updated: {0}", If(HumanizeDates, - String.Format("{0}, {1}", NewsLastUpdateDate.ToString(currentOSCulture.DateTimeFormat.LongDatePattern, currentOSCulture), - NewsLastUpdateDate.ToString(currentOSCulture.DateTimeFormat.LongTimePattern, currentOSCulture)), - NewsLastUpdateDate.ToString("MM/dd/yyyy HH:mm:ss"))) + Label8.Text = GetNewsLastUpdatedText() Dim sortedArticles As IOrderedEnumerable(Of SyndicationItem) = FeedContents.Items.OrderByDescending(Function(article) article.PublishDate) If FeedContents.Items.Count > 0 Then Dim ValueAddedTop As Integer = WindowHelper.ScaleLogical(8), @@ -16060,7 +9935,7 @@ Public Class MainForm End Sub Private Sub ComputerNameLabel_MouseHover(sender As Object, e As EventArgs) Handles ComputerNameLabel.MouseHover - WindowHelper.DisplayToolTip(sender, String.Format("NetBIOS name: {0}", My.Computer.Name)) + WindowHelper.DisplayToolTip(sender, String.Format(LocalizationService.ForSection("Main.Tooltips")("NetBiosname.Label"), My.Computer.Name)) End Sub Private Sub NewsFeedCloseBtn_Click(sender As Object, e As EventArgs) Handles NewsFeedCloseBtn.Click @@ -16075,6 +9950,6 @@ Public Class MainForm End Sub Private Sub RefreshFactButton_MouseHover(sender As Object, e As EventArgs) Handles RefreshFactButton.MouseHover - WindowHelper.DisplayToolTip(sender, "Show a new fact") + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("Main.Tooltips")("Show.New.Fact.Label")) End Sub End Class diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index 3967e56f8..29c7728a3 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' mediante el asterisco ('*'), como se muestra a continuación: ' - - + + diff --git a/My Project/Resources.Designer.vb b/My Project/Resources.Designer.vb index a024276e4..f8a0a8102 100644 --- a/My Project/Resources.Designer.vb +++ b/My Project/Resources.Designer.vb @@ -2267,13 +2267,12 @@ Namespace My.Resources ''' ''' Busca una cadena traducida similar a Overall changes: ''' - '''-- Bugfixes in preview releases + '''--- Bugfixes ''' - '''- Fixed an issue where removed features would appear in the wrong place - '''- Fixed a minor UI issue where the proper user principal name (UPN) would not be shown when selecting a user in the ADDS domain join wizard - '''- Fixed a minor UI issue where the NT logon path of a domain user would not be shown when launching the ADDS domain join wizard for the first time - '''- Fixed some HiDPI issues - '''- Fixed an issue where, when managing the active installation, the v [resto de la cadena truncado]";. + '''- Fixed an issue where the WDS Helper Client would re-add essential drivers if selected + '''- Fixed issues with feature enablement, capability addition and component store repair tasks if they pointed to sources in roots of volumes + '''- Fixed an issue where saving image information of an image selected in the mounted image manager would make the program save information about the online/offline installation if in either mode + '''- Fixed issues with some image tasks targeting root [resto de la cadena truncado]";. ''' Friend ReadOnly Property WhatsNew() As String Get diff --git a/My Project/Resources.resx b/My Project/Resources.resx index 6bd64cd8b..9f790ffee 100644 --- a/My Project/Resources.resx +++ b/My Project/Resources.resx @@ -991,139 +991,70 @@ A "contributor" is any person that distributes its contribution under this licen Overall changes: --- Bugfixes in preview releases +--- Bugfixes -- Fixed an issue where removed features would appear in the wrong place -- Fixed a minor UI issue where the proper user principal name (UPN) would not be shown when selecting a user in the ADDS domain join wizard -- Fixed a minor UI issue where the NT logon path of a domain user would not be shown when launching the ADDS domain join wizard for the first time +- Fixed an issue where the WDS Helper Client would re-add essential drivers if selected +- Fixed issues with feature enablement, capability addition and component store repair tasks if they pointed to sources in roots of volumes +- Fixed an issue where saving image information of an image selected in the mounted image manager would make the program save information about the online/offline installation if in either mode +- Fixed issues with some image tasks targeting rooted paths - Fixed some HiDPI issues -- Fixed an issue where, when managing the active installation, the version's revision number would sometimes not coincide with the actual revision number -- Fixed an issue where information about a Windows image would be cleared after adding or removing packages -- Fixed an issue where the program would throw an exception if it couldn't create the logs directory (#344, thanks @Low351) -- Fixed an issue where GraphoView would not display information about a selected Windows image if the WDS group it belongs to only has 1 image -- Fixed an issue where capture compression type options were not being used when performing FFU captures -- Fixed an issue where the program would throw an exception when performing multiple driver exports by class name -- Fixed an exception (#350, thanks @TackleBarry80) -- Registry hives that were unloaded externally no longer cause errors when unloading them from the image registry control panel -- Non-PowerShell-based endpoints no longer throw CORS issues when calling WDS Helper Server APIs -- Fixed an issue where App Installer download errors would not appear in the foreground -- Fixed an issue where tutorial videos would not be playable -- The WDS Helper client message for downloading unattended answer files no longer shows at all times -- Fixed an issue where the program would throw an exception when saving Windows PE configuration of an offline Windows PE installation -- Fixed an issue where the full date string was not displaying correctly when accessing image properties with Windows representations of dates turned off -- When adding a boot image to the WDS server, the service start is now requested only when it is not running -- Fixed an exception that would happen when adding certain AppX packages (#365, #366, thanks @charlezmmonroe-byte) - --- New features - -- The Sysprep Preparation Tool has seen support for `CopyProfile` and can now remove AppX packages from the reference system -- Guards have been added to prevent running the PE Helper on a PXE environment, and to warn when running the PXE Helpers on a non-PXE environment -- The autorun menu now has options to browse disc contents and copy the boot image to a WDS server -- The DISMTools Preinstallation Environment can now be configured via policies -- You can now view images and groups in a WDS server graphically -- When launching the Driver Installation Module, the Preinstallation Environment can now tell you the hardware IDs of unknown devices -- HotInstall can now export SCSI adapters to install them in the DTPE image -- If a non-sysprepped volume is selected in the image capture script, it will now warn you -- A new task has been added to copy installation images to a Windows Deployment Services (WDS) server -- From the Autorun application you can now specify the WDS image group to upload the image to -- The Autorun application and HotInstall have seen HiDPI improvements -- Partition table overrides can now be used when deploying images with the WDS Helper -- PXE Helper Servers can now be started using a different port by holding down SHIFT and performing an action in the following places: - - From the Autorun application - - From the Tools > Start PXE Helper Server for... menu in the main program -- The architecture for the WDS boot image is now picked graphically -- The default set of DISMTools Preinstallation Environment backgrounds has been overhauled -- The WDS Helper Client now detects the assigned volume letter for the image share more reliably -- ISO file creation results are now displayed in a notification -- You can now configure the keyboard layout in the Preinstallation Environment graphically -- If the Sysprep Preparation Tool was invoked before capturing the image, temporary files and boot entries are now removed if the capture succeeds. The resulting Windows image will still not contain any of those items -- The version reporter watermark in the DISMTools Preinstallation Environment can now detect when the environment has booted via a network -- The PE Helper can now include your target system's essential drivers (storage controllers and network adapters) in the DISMTools Preinstallation Environment -- The ISO creation wizard will let you specify a save location if you clicked OK without having specified one -- You can now specify scripts written in VBScript and JScript -- The "Enable Batch script file locks" starter script has been introduced -- The "Remove MAX_PATH length limit" starter script has been introduced -- The "Show and Hide System Desktop icons" starter script has been introduced -- The "Set File Explorer Launch Folder" starter script has been introduced -- The "Disable Windows Admin Center/Azure Arc banner" starter script has been introduced -- The "Disable Shutdown Event Tracker" starter script has been introduced -- The "Refresh Windows Explorer" starter script has been introduced -- The "Configure Start Menu Appearance" starter script has been introduced -- The "Disable warnings for unsigned RDP files" starter script has been introduced -- The "Configure PowerShell execution policy" starter script has been introduced -- The "Configure Power Plan Values" starter script has been introduced -- The "Invoke Windows Utility Configuration" starter script has been updated -- The "Restore classic context menu in Windows 11" starter script has been introduced -- The Starter Script Editor has seen several improvements: - - The Starter Script Editor has received dark mode support - - The Starter Script Editor now detects read-only starter scripts and removes such attribute when saving them - - Spacing in script code can now be normalized -- Organizational units and users in OUs are now sorted alphabetically in the ADDS domain join wizard -- The ADDS domain join wizard will now let you continue if you had selected an account that does not require a password -- A task has been added to copy a pre-configured answer file to an image so that it boots to Audit mode automatically -- The ADDS domain join wizard has seen a couple of improvements: - - The wizard will no longer let you continue when you specify a domain account that does not exist - - You can now test domain name resolution by invoking nslookup - - You can now pick account objects from anywhere in your domain -- When applying answer files you can now choose whether to copy them to the target image's Sysprep folder -- You can now enlarge the preview area for starter script code -- You can now configure account display names independently from account names -- Post-installation scripts can now be reordered -- Batch scripts with NT extensions are no longer supported -- Service information can now be saved to a report, whether you manage a Windows image or an installation -- Services can now be removed -- The image information saver is now run asynchronously -- When information about a package file can't be obtained, DISMTools will now continue processing the rest of the queue -- Filter assistants have been added to the feature, capability, and driver information dialogs to allow you to build queries more easily -- A new automatic image reload service is now included, to let you have all your images reloaded on system startup -- You can now export drivers by class name -- Image capture tasks will now warn you when source installations have not been prepared with Sysprep -- A new task has been added to optimize Windows images -- Support for Full Flash Utility (FFU) has been introduced. Variations of the image application, capture, split, and optimization have been introduced with FFU support -- From the project view you can now perform commit operations to FFU files using a workaround -- You can now get installed driver information from Windows 7 images -- Projects and installation management modes now load and unload much faster -- Removing provisioned AppX packages from the online installation management mode is much more reliable now -- You can now access WIM and FFU variants of the image capture and application tasks much more easily -- After extracting images from ISO files, the program will now let you select the most suitable installation image from it -- You can now view information specific to FFU files when viewing mounted image properties -- When downloading packages from App Installer files you can now copy the URLs to the main application package -- When exporting drivers by class name or when filtering installed drivers by class name, you can now choose from third-party classes provided by third-party drivers in your Windows image or installation -- You can now export drivers from Windows 7 images and installations -- Saving service changes is much faster now -- Questions asked by the image information saver are no longer asked in the background -- FFU file commit operations are now carried out when saving changes to mounted FFU files after performing image tasks such as adding packages or enabling features -- An option has been added to prevent the machine from sleeping while performing image operations -- Help documentation has seen a major visual refresh -- File associations are now set for the Starter Script Editor -- The home screen has seen a visual overhaul -- 7-Zip has been updated to version 26.01 -- CODE: setting load and save functionality has been revamped -- The Starter Script Editor and the theme designer can now be invoked from the Tools menu -- In portable installations, file associations can now be toggled for the Starter Script Editor -- The DynaLog log viewer has received support for event log filters -- Date properties can now be displayed in a Windows-native format -- Markdig has been updated to version 1.3.1 -- Scintilla.NET has been updated to version 6.1.2 -- The managed DISM API has been updated to version 6.0.0 -- Windows API Code Pack has been updated to version 8.0.15.2 - --- Removed features - -- The WDS preparation script has been removed in favor of the WDS Helper +- Fixed an issue that would cause HotInstall to throw an exception when performing disk space checks with certain directories +- When getting information about drivers, drivers that can't be processed will now be skipped +- Hardware targets for driver files no longer show up more than once per INF section +- Fixed an issue where notifications would not be displayed +- Fixed some exceptions + +--- New features + +- Unattended answer file conflict resolution has been ported to the WDS Helper Client +- You can now create multiple ISO files at the same time. The amount of concurrent ISO creation tasks can be configured up to 10 +- Tooling for BitLocker encrypted volumes has been introduced +- The Sysprep Preparation Tool has been updated with BitLocker volume detection +- A new policy has been added to configure image file scanning options in the operating system installer +- When capturing a Windows image, a description can now be added +- The "Disable Windows Platform Binary Table" starter script has been introduced +- The "Prevent companion device software installation" starter script has been introduced +- The "Configure Windows Server processor scheduling" starter script has been introduced +- The "Change Windows PowerShell Execution Policiese" starter script has been updated to validate execution policies +- The "Control Remote Desktop parameters" starter script has been introduced +- The "Empty Start Menu Pins" starter script has been introduced +- The "Set a custom wallpaper" starter script has been updated to disable Windows Spotlight +- The Starter Script Editor has seen many improvements: + - Bulk script conversion as a command-line argument, to convert starter scripts created for DISMTools 0.7.3 to the new format + - Upload capabilities to the Starter Script Library + - Rule-based Automated Inspection for script security + - Find and Replace capabilities + - Document Outline viewer + - Support for editing bigger scripts, up to 2 billion characters +- You can now unlock BitLocker encrypted volumes from the offline installation management mode +- You can now switch between offline installations more quickly +- You can now fillter AppX package information in an online system based on its registration status using the "regto:" filter +- When performing driver exports, multiple class names can now be selected +- Target exported drivers can now be organized in folders named after their class names +- Feature update detection support has been added for the Rubidium WaaS semester +- A search engine lookup link is now displayed next to a device's hardware ID in driver information reports +- Driver filters now support multiple class names +- The installer now uses Inno Setup 7.1 +- 7-Zip has been updated to version 26.02 +- The Managed DISM API has been updated to version 6.0.1 +- Markdig has been updated to version 1.3.2 Changes made since last preview: --- Bugfixes +--- Bugfixes -- Fixed accuracy issues when performing Windows UEFI CA 2023 readiness checks on systems that were deployed using updated boot loaders -- Fixed an issue where background processes would fail with "The parameter is incorrect" in some cases +- Fixed startup issues in Safe Mode --- New features +--- New features -- UnattendGen has been updated to the latest version, now requiring .NET 10 -- The news feed previewer has seen several improvements -- The Preinstallation Environment Helper now detects answer files created by Rufus, and lets you act on answer file conflicts +- UnattendGen has been updated to the latest version +- The Sysprep Preparation Tool has been updated to the latest version +- File pickers in driver and package information dialogs now support multiple selections +- Service information reports now contain sections for each service, to jump between them easily +- The "Configure Lock Screen Background" starter script has been introduced +- The "Prevent automatic BitLocker drive encryption" starter script has been introduced +- The "Disable Fast Startup" starter script has been introduced +- Feature update detection support has been added for 26H2 images ..\Resources\menus\exit_full_screen_glyph.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/Panels/BDE/LockVolumeDialog.Designer.vb b/Panels/BDE/LockVolumeDialog.Designer.vb new file mode 100644 index 000000000..93ed2cb1f --- /dev/null +++ b/Panels/BDE/LockVolumeDialog.Designer.vb @@ -0,0 +1,108 @@ + _ +Partial Class LockVolumeDialog + Inherits System.Windows.Forms.Form + + 'Form reemplaza a Dispose para limpiar la lista de componentes. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Requerido por el Diseñador de Windows Forms + Private components As System.ComponentModel.IContainer + + 'NOTA: el Diseñador de Windows Forms necesita el siguiente procedimiento + 'Se puede modificar usando el Diseñador de Windows Forms. + 'No lo modifique con el editor de código. + _ + Private Sub InitializeComponent() + Me.Label1 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.DrLetterLabel = New System.Windows.Forms.Label() + Me.Label4 = New System.Windows.Forms.Label() + Me.PersistentVolumeIdLabel = New System.Windows.Forms.Label() + Me.SuspendLayout() + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(13, 13) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(352, 13) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "Please wait while we lock this volume. This will take a couple of seconds." + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(42, 42) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(68, 13) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Drive Letter:" + ' + 'DrLetterLabel + ' + Me.DrLetterLabel.AutoSize = True + Me.DrLetterLabel.Location = New System.Drawing.Point(116, 42) + Me.DrLetterLabel.Name = "DrLetterLabel" + Me.DrLetterLabel.Size = New System.Drawing.Size(0, 13) + Me.DrLetterLabel.TabIndex = 2 + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.Location = New System.Drawing.Point(42, 64) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(110, 13) + Me.Label4.TabIndex = 2 + Me.Label4.Text = "Persistent Volume ID:" + ' + 'PersistentVolumeIdLabel + ' + Me.PersistentVolumeIdLabel.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.PersistentVolumeIdLabel.AutoEllipsis = True + Me.PersistentVolumeIdLabel.Location = New System.Drawing.Point(42, 84) + Me.PersistentVolumeIdLabel.Name = "PersistentVolumeIdLabel" + Me.PersistentVolumeIdLabel.Size = New System.Drawing.Size(381, 43) + Me.PersistentVolumeIdLabel.TabIndex = 2 + Me.PersistentVolumeIdLabel.Text = " " + Me.PersistentVolumeIdLabel.TextAlign = System.Drawing.ContentAlignment.TopCenter + ' + 'LockVolumeDialog + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.ClientSize = New System.Drawing.Size(464, 153) + Me.Controls.Add(Me.Label4) + Me.Controls.Add(Me.PersistentVolumeIdLabel) + Me.Controls.Add(Me.DrLetterLabel) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.Label1) + Me.Cursor = System.Windows.Forms.Cursors.WaitCursor + Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "LockVolumeDialog" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Locking volume..." + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents DrLetterLabel As System.Windows.Forms.Label + Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents PersistentVolumeIdLabel As System.Windows.Forms.Label + +End Class diff --git a/Panels/BDE/LockVolumeDialog.resx b/Panels/BDE/LockVolumeDialog.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Panels/BDE/LockVolumeDialog.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Panels/BDE/LockVolumeDialog.vb b/Panels/BDE/LockVolumeDialog.vb new file mode 100644 index 000000000..d36aa0280 --- /dev/null +++ b/Panels/BDE/LockVolumeDialog.vb @@ -0,0 +1,50 @@ +Imports System.Windows.Forms +Imports BDELib.BDELib +Imports BDELib.Classes + +Public Class LockVolumeDialog + + Public DriveLetter As String + + Private PersistentVolumeID As String + + Private Function GetPersistentVolumeIdFromDriveLetter() As String + Dim PersistentVolumeID As String = "" + + Dim EncryptedVolumeMOC As ManagementObjectCollection = WMIHelper.GetResultsFromManagementQuery(String.Format("SELECT PersistentVolumeID FROM Win32_EncryptableVolume WHERE DriveLetter = {0}{1}{0}", Quote, WMIHelper.GetEscapedValue(DriveLetter).TrimEnd("\")), "root\cimv2\Security\MicrosoftVolumeEncryption") + If EncryptedVolumeMOC Is Nothing Then Return PersistentVolumeID + + PersistentVolumeID = WMIHelper.GetObjectValue(EncryptedVolumeMOC(0), "PersistentVolumeID") + Return PersistentVolumeID + End Function + + Private Sub UnlockVolumeDialog_Load(sender As Object, e As EventArgs) Handles MyBase.Load + BackColor = CurrentTheme.SectionBackgroundColor + ForeColor = CurrentTheme.ForegroundColor + + Dim handle As IntPtr = WindowHelper.GetWindowHandle(Me) + WindowHelper.ToggleDarkTitleBar(handle, CurrentTheme.IsDark) + ThemeHelper.UpdateLinkLabelColors(Me, Color.DodgerBlue, CurrentTheme.AccentColors(0)) + + PersistentVolumeID = GetPersistentVolumeIdFromDriveLetter() + + DrLetterLabel.Text = DriveLetter + PersistentVolumeIdLabel.Text = PersistentVolumeID + + Visible = True + + Dim lockResult As UInteger = LockVolume(PersistentVolumeID) + Select Case lockResult + Case Constants.S_OK : ' Ignore + Case Constants.E_ACCESS_DENIED : MessageBox.Show(LocalizationService.ForSection("BDE.LockVolume.Messages")("AccessDenied.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Case Constants.E_ACCESS_DENIED : MessageBox.Show(LocalizationService.ForSection("BDE.LockVolume.Messages")("AccessDenied.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Case Constants.FVE_E_LOCKED_VOLUME : MessageBox.Show(LocalizationService.ForSection("BDE.LockVolume.Messages")("AlreadyLocked.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Case Constants.FVE_E_NOT_ENCRYPTED : MessageBox.Show(LocalizationService.ForSection("BDE.LockVolume.Messages")("NotEncrypted.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Case Constants.FVE_E_PROTECTION_DISABLED : MessageBox.Show(LocalizationService.ForSection("BDE.LockVolume.Messages")("ProtectionDisabled.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Case Constants.FVE_E_RECOVERY_KEY_REQUIRED : MessageBox.Show(LocalizationService.ForSection("BDE.LockVolume.Messages")("RecoveryKeyRequired.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Case Else : MessageBox.Show(LocalizationService.ForSection("BDE.LockVolume.Messages").Format("UnknownError.Message", lockResult), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + End Select + + Close() + End Sub +End Class diff --git a/Panels/BDE/UnlockVolumeDialog.Designer.vb b/Panels/BDE/UnlockVolumeDialog.Designer.vb new file mode 100644 index 000000000..84200d6d7 --- /dev/null +++ b/Panels/BDE/UnlockVolumeDialog.Designer.vb @@ -0,0 +1,315 @@ + _ +Partial Class UnlockVolumeDialog + Inherits System.Windows.Forms.Form + + 'Form reemplaza a Dispose para limpiar la lista de componentes. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Requerido por el Diseñador de Windows Forms + Private components As System.ComponentModel.IContainer + + 'NOTA: el Diseñador de Windows Forms necesita el siguiente procedimiento + 'Se puede modificar usando el Diseñador de Windows Forms. + 'No lo modifique con el editor de código. + _ + Private Sub InitializeComponent() + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.Label1 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.KeyProtectorIdLabel = New System.Windows.Forms.Label() + Me.RPS1 = New System.Windows.Forms.TextBox() + Me.RPS2 = New System.Windows.Forms.TextBox() + Me.RPS3 = New System.Windows.Forms.TextBox() + Me.RPS4 = New System.Windows.Forms.TextBox() + Me.RPS5 = New System.Windows.Forms.TextBox() + Me.RPS6 = New System.Windows.Forms.TextBox() + Me.RPS7 = New System.Windows.Forms.TextBox() + Me.RPS8 = New System.Windows.Forms.TextBox() + Me.Label4 = New System.Windows.Forms.Label() + Me.Label5 = New System.Windows.Forms.Label() + Me.Label6 = New System.Windows.Forms.Label() + Me.Label7 = New System.Windows.Forms.Label() + Me.Label8 = New System.Windows.Forms.Label() + Me.Label9 = New System.Windows.Forms.Label() + Me.Label10 = New System.Windows.Forms.Label() + Me.TableLayoutPanel1.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(626, 160) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.Enabled = False + Me.OK_Button.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "OK" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Cancel" + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(13, 13) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(539, 13) + Me.Label1.TabIndex = 1 + Me.Label1.Text = "Please enter the 48-digit recovery key to unlock this volume. To help identify th" & _ + "is volume, refer to its identifier." + ' + 'Label2 + ' + Me.Label2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label2.AutoEllipsis = True + Me.Label2.Location = New System.Drawing.Point(128, 48) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(192, 16) + Me.Label2.TabIndex = 2 + Me.Label2.Text = "Key Protector Identifier:" + Me.Label2.TextAlign = System.Drawing.ContentAlignment.TopRight + ' + 'KeyProtectorIdLabel + ' + Me.KeyProtectorIdLabel.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.KeyProtectorIdLabel.AutoEllipsis = True + Me.KeyProtectorIdLabel.Location = New System.Drawing.Point(326, 48) + Me.KeyProtectorIdLabel.Name = "KeyProtectorIdLabel" + Me.KeyProtectorIdLabel.Size = New System.Drawing.Size(331, 16) + Me.KeyProtectorIdLabel.TabIndex = 2 + Me.KeyProtectorIdLabel.Text = "ID" + ' + 'RPS1 + ' + Me.RPS1.Font = New System.Drawing.Font("Consolas", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.RPS1.Location = New System.Drawing.Point(24, 93) + Me.RPS1.MaxLength = 6 + Me.RPS1.Name = "RPS1" + Me.RPS1.Size = New System.Drawing.Size(72, 25) + Me.RPS1.TabIndex = 3 + ' + 'RPS2 + ' + Me.RPS2.Font = New System.Drawing.Font("Consolas", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.RPS2.Location = New System.Drawing.Point(119, 93) + Me.RPS2.MaxLength = 6 + Me.RPS2.Name = "RPS2" + Me.RPS2.Size = New System.Drawing.Size(72, 25) + Me.RPS2.TabIndex = 4 + ' + 'RPS3 + ' + Me.RPS3.Font = New System.Drawing.Font("Consolas", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.RPS3.Location = New System.Drawing.Point(214, 93) + Me.RPS3.MaxLength = 6 + Me.RPS3.Name = "RPS3" + Me.RPS3.Size = New System.Drawing.Size(72, 25) + Me.RPS3.TabIndex = 5 + ' + 'RPS4 + ' + Me.RPS4.Font = New System.Drawing.Font("Consolas", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.RPS4.Location = New System.Drawing.Point(309, 93) + Me.RPS4.MaxLength = 6 + Me.RPS4.Name = "RPS4" + Me.RPS4.Size = New System.Drawing.Size(72, 25) + Me.RPS4.TabIndex = 6 + ' + 'RPS5 + ' + Me.RPS5.Font = New System.Drawing.Font("Consolas", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.RPS5.Location = New System.Drawing.Point(404, 93) + Me.RPS5.MaxLength = 6 + Me.RPS5.Name = "RPS5" + Me.RPS5.Size = New System.Drawing.Size(72, 25) + Me.RPS5.TabIndex = 7 + ' + 'RPS6 + ' + Me.RPS6.Font = New System.Drawing.Font("Consolas", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.RPS6.Location = New System.Drawing.Point(499, 93) + Me.RPS6.MaxLength = 6 + Me.RPS6.Name = "RPS6" + Me.RPS6.Size = New System.Drawing.Size(72, 25) + Me.RPS6.TabIndex = 8 + ' + 'RPS7 + ' + Me.RPS7.Font = New System.Drawing.Font("Consolas", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.RPS7.Location = New System.Drawing.Point(594, 93) + Me.RPS7.MaxLength = 6 + Me.RPS7.Name = "RPS7" + Me.RPS7.Size = New System.Drawing.Size(72, 25) + Me.RPS7.TabIndex = 9 + ' + 'RPS8 + ' + Me.RPS8.Font = New System.Drawing.Font("Consolas", 11.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.RPS8.Location = New System.Drawing.Point(689, 93) + Me.RPS8.MaxLength = 6 + Me.RPS8.Name = "RPS8" + Me.RPS8.Size = New System.Drawing.Size(72, 25) + Me.RPS8.TabIndex = 10 + ' + 'Label4 + ' + Me.Label4.AutoSize = True + Me.Label4.Location = New System.Drawing.Point(102, 99) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(11, 13) + Me.Label4.TabIndex = 11 + Me.Label4.Text = "-" + ' + 'Label5 + ' + Me.Label5.AutoSize = True + Me.Label5.Location = New System.Drawing.Point(197, 99) + Me.Label5.Name = "Label5" + Me.Label5.Size = New System.Drawing.Size(11, 13) + Me.Label5.TabIndex = 12 + Me.Label5.Text = "-" + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Location = New System.Drawing.Point(292, 99) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(11, 13) + Me.Label6.TabIndex = 13 + Me.Label6.Text = "-" + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.Location = New System.Drawing.Point(387, 99) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(11, 13) + Me.Label7.TabIndex = 14 + Me.Label7.Text = "-" + ' + 'Label8 + ' + Me.Label8.AutoSize = True + Me.Label8.Location = New System.Drawing.Point(482, 99) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(11, 13) + Me.Label8.TabIndex = 15 + Me.Label8.Text = "-" + ' + 'Label9 + ' + Me.Label9.AutoSize = True + Me.Label9.Location = New System.Drawing.Point(577, 99) + Me.Label9.Name = "Label9" + Me.Label9.Size = New System.Drawing.Size(11, 13) + Me.Label9.TabIndex = 16 + Me.Label9.Text = "-" + ' + 'Label10 + ' + Me.Label10.AutoSize = True + Me.Label10.Location = New System.Drawing.Point(672, 99) + Me.Label10.Name = "Label10" + Me.Label10.Size = New System.Drawing.Size(11, 13) + Me.Label10.TabIndex = 17 + Me.Label10.Text = "-" + ' + 'UnlockVolumeDialog + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(784, 201) + Me.Controls.Add(Me.Label10) + Me.Controls.Add(Me.Label9) + Me.Controls.Add(Me.Label8) + Me.Controls.Add(Me.Label7) + Me.Controls.Add(Me.Label6) + Me.Controls.Add(Me.Label5) + Me.Controls.Add(Me.Label4) + Me.Controls.Add(Me.RPS8) + Me.Controls.Add(Me.RPS7) + Me.Controls.Add(Me.RPS6) + Me.Controls.Add(Me.RPS5) + Me.Controls.Add(Me.RPS4) + Me.Controls.Add(Me.RPS3) + Me.Controls.Add(Me.RPS2) + Me.Controls.Add(Me.RPS1) + Me.Controls.Add(Me.KeyProtectorIdLabel) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.Label1) + Me.Controls.Add(Me.TableLayoutPanel1) + Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "UnlockVolumeDialog" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Unlock encrypted volume" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents KeyProtectorIdLabel As System.Windows.Forms.Label + Friend WithEvents RPS1 As System.Windows.Forms.TextBox + Friend WithEvents RPS2 As System.Windows.Forms.TextBox + Friend WithEvents RPS3 As System.Windows.Forms.TextBox + Friend WithEvents RPS4 As System.Windows.Forms.TextBox + Friend WithEvents RPS5 As System.Windows.Forms.TextBox + Friend WithEvents RPS6 As System.Windows.Forms.TextBox + Friend WithEvents RPS7 As System.Windows.Forms.TextBox + Friend WithEvents RPS8 As System.Windows.Forms.TextBox + Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents Label5 As System.Windows.Forms.Label + Friend WithEvents Label6 As System.Windows.Forms.Label + Friend WithEvents Label7 As System.Windows.Forms.Label + Friend WithEvents Label8 As System.Windows.Forms.Label + Friend WithEvents Label9 As System.Windows.Forms.Label + Friend WithEvents Label10 As System.Windows.Forms.Label + +End Class diff --git a/Panels/BDE/UnlockVolumeDialog.resx b/Panels/BDE/UnlockVolumeDialog.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Panels/BDE/UnlockVolumeDialog.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Panels/BDE/UnlockVolumeDialog.vb b/Panels/BDE/UnlockVolumeDialog.vb new file mode 100644 index 000000000..001eb64fd --- /dev/null +++ b/Panels/BDE/UnlockVolumeDialog.vb @@ -0,0 +1,163 @@ +Imports System.Windows.Forms +Imports BDELib.BDELib +Imports BDELib.Classes + +Public Class UnlockVolumeDialog + + Public DriveLetter As String + + Private PersistentVolumeID As String + + Private Function GetPersistentVolumeIdFromDriveLetter() As String + Dim PersistentVolumeID As String = "" + + Dim EncryptedVolumeMOC As ManagementObjectCollection = WMIHelper.GetResultsFromManagementQuery(String.Format("SELECT PersistentVolumeID FROM Win32_EncryptableVolume WHERE DriveLetter = {0}{1}{0}", Quote, WMIHelper.GetEscapedValue(DriveLetter).TrimEnd("\")), "root\cimv2\Security\MicrosoftVolumeEncryption") + If EncryptedVolumeMOC Is Nothing Then Return PersistentVolumeID + + PersistentVolumeID = WMIHelper.GetObjectValue(EncryptedVolumeMOC(0), "PersistentVolumeID") + Return PersistentVolumeID + End Function + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + ' Form the recovery password + Dim NumericalPassword As String = String.Format("{0}-{1}-{2}-{3}-{4}-{5}-{6}-{7}", RPS1.Text, RPS2.Text, RPS3.Text, RPS4.Text, RPS5.Text, RPS6.Text, RPS7.Text, RPS8.Text) + Dim UnlockResult As UInteger = UnlockVolumeWithNumericalPassword(PersistentVolumeID, NumericalPassword) + Select Case UnlockResult + Case Constants.S_OK + MessageBox.Show(LocalizationService.ForSection("BDE.UnlockVolume.Messages")("Success.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Information) + Case Constants.FVE_E_NOT_ACTIVATED + MessageBox.Show(LocalizationService.ForSection("BDE.UnlockVolume.Messages")("NotActivated.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + Case Constants.FVE_E_PROTECTOR_NOT_FOUND + MessageBox.Show(LocalizationService.ForSection("BDE.UnlockVolume.Messages")("ProtectorNotFound.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + Case Constants.FVE_E_FAILED_AUTHENTICATION + MessageBox.Show(LocalizationService.ForSection("BDE.UnlockVolume.Messages")("AuthenticationFailed.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + Case Constants.FVE_E_INVALID_PASSWORD_FORMAT + MessageBox.Show(LocalizationService.ForSection("BDE.UnlockVolume.Messages")("InvalidPassword.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + Case Else + MessageBox.Show(LocalizationService.ForSection("BDE.UnlockVolume.Messages").Format("UnknownError.Message", UnlockResult), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Exit Sub + End Select + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + Me.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Close() + End Sub + + Private Sub UnlockVolumeDialog_Load(sender As Object, e As EventArgs) Handles MyBase.Load + BackColor = CurrentTheme.SectionBackgroundColor + ForeColor = CurrentTheme.ForegroundColor + RPS1.BackColor = BackColor + RPS1.ForeColor = ForeColor + RPS2.BackColor = BackColor + RPS2.ForeColor = ForeColor + RPS3.BackColor = BackColor + RPS3.ForeColor = ForeColor + RPS4.BackColor = BackColor + RPS4.ForeColor = ForeColor + RPS5.BackColor = BackColor + RPS5.ForeColor = ForeColor + RPS6.BackColor = BackColor + RPS6.ForeColor = ForeColor + RPS7.BackColor = BackColor + RPS7.ForeColor = ForeColor + RPS8.BackColor = BackColor + RPS8.ForeColor = ForeColor + RPS1.SelectAll() + RPS1.Focus() + + ' Reset fields + RPS1.Text = "" + RPS2.Text = "" + RPS3.Text = "" + RPS4.Text = "" + RPS5.Text = "" + RPS6.Text = "" + RPS7.Text = "" + RPS8.Text = "" + + Dim handle As IntPtr = WindowHelper.GetWindowHandle(Me) + WindowHelper.ToggleDarkTitleBar(handle, CurrentTheme.IsDark) + ThemeHelper.UpdateLinkLabelColors(Me, Color.DodgerBlue, CurrentTheme.AccentColors(0)) + + PersistentVolumeID = GetPersistentVolumeIdFromDriveLetter() + + ' Get the ID of the key protector + Dim ProtectorIds As List(Of KeyProtector) = GetKeyProtectors(PersistentVolumeID) + + ' We're only interested in the key protectors for numerical passwords + If Not ProtectorIds.Any(Function(protector) protector.ProtectorType = KeyProtectorType.NumericalPassword) Then + MessageBox.Show(LocalizationService.ForSection("BDE.UnlockVolume.Messages")("NumericalProtectorMissing.Message"), Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + Cancel_Button.PerformClick() + Exit Sub + End If + + KeyProtectorIdLabel.Text = ProtectorIds.First(Function(protector) protector.ProtectorType = KeyProtectorType.NumericalPassword).ProtectorID.Replace("{", "").Replace("}", "") + End Sub + + Private Sub RPS1_TextChanged(sender As Object, e As EventArgs) Handles RPS1.TextChanged + If RPS1.Text.Length >= 6 Then + ' Switch to the next segment + RPS2.SelectAll() + RPS2.Focus() + End If + End Sub + + Private Sub RPS2_TextChanged(sender As Object, e As EventArgs) Handles RPS2.TextChanged + If RPS2.Text.Length >= 6 Then + ' Switch to the next segment + RPS3.SelectAll() + RPS3.Focus() + End If + End Sub + + Private Sub RPS3_TextChanged(sender As Object, e As EventArgs) Handles RPS3.TextChanged + If RPS3.Text.Length >= 6 Then + ' Switch to the next segment + RPS4.SelectAll() + RPS4.Focus() + End If + End Sub + + Private Sub RPS4_TextChanged(sender As Object, e As EventArgs) Handles RPS4.TextChanged + If RPS4.Text.Length >= 6 Then + ' Switch to the next segment + RPS5.SelectAll() + RPS5.Focus() + End If + End Sub + + Private Sub RPS5_TextChanged(sender As Object, e As EventArgs) Handles RPS5.TextChanged + If RPS5.Text.Length >= 6 Then + ' Switch to the next segment + RPS6.SelectAll() + RPS6.Focus() + End If + End Sub + + Private Sub RPS6_TextChanged(sender As Object, e As EventArgs) Handles RPS6.TextChanged + If RPS6.Text.Length >= 6 Then + ' Switch to the next segment + RPS7.SelectAll() + RPS7.Focus() + End If + End Sub + + Private Sub RPS7_TextChanged(sender As Object, e As EventArgs) Handles RPS7.TextChanged + If RPS7.Text.Length >= 6 Then + ' Switch to the next segment + RPS8.SelectAll() + RPS8.Focus() + End If + End Sub + + Private Sub RPS8_TextChanged(sender As Object, e As EventArgs) Handles RPS8.TextChanged + OK_Button.Enabled = RPS1.Text <> "" AndAlso RPS2.Text <> "" AndAlso RPS3.Text <> "" AndAlso RPS4.Text <> "" AndAlso RPS5.Text <> "" AndAlso RPS6.Text <> "" AndAlso RPS7.Text <> "" AndAlso RPS8.Text <> "" + End Sub +End Class diff --git a/Panels/ConfigLists/AddListEntryDlg.vb b/Panels/ConfigLists/AddListEntryDlg.vb index e1cee0a8c..f423f4623 100644 --- a/Panels/ConfigLists/AddListEntryDlg.vb +++ b/Panels/ConfigLists/AddListEntryDlg.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Public Class AddListEntryDlg @@ -13,7 +13,7 @@ Public Class AddListEntryDlg ' Check if entry contains wildcard characters and if it begins with a \ If TextBox1.Text.Contains("*") And TextBox1.Text.StartsWith("\") Then DynaLog.LogMessage("Item starts with a backslash and has a wildcard character. This is not valid.") - MsgBox("The entry can't start with a backslash if it contains wildcard characters", vbOKOnly + vbExclamation, Text) + MsgBox(LocalizationService.ForSection("ConfigLists.AddEntry")("Start.Backslash.Message"), vbOKOnly + vbExclamation, Text) Exit Sub End If End If @@ -35,61 +35,10 @@ Public Class AddListEntryDlg End Sub Private Sub AddListEntryDlg_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label1.Text = "Entry:" - Button1.Text = "Browse..." - OK_Button.Text = "OK" - Cancel_Button.Text = "Cancel" - Case "ESN" - Label1.Text = "Entrada:" - Button1.Text = "Examinar..." - OK_Button.Text = "Aceptar" - Cancel_Button.Text = "Cancelar" - Case "FRA" - Label1.Text = "Entrée :" - Button1.Text = "Parcourir..." - OK_Button.Text = "OK" - Cancel_Button.Text = "Annuler" - Case "PTB", "PTG" - Label1.Text = "Entrada:" - Button1.Text = "Navegar..." - OK_Button.Text = "OK" - Cancel_Button.Text = "Cancelar" - Case "ITA" - Label1.Text = "Voce:" - Button1.Text = "Sfoglia..." - OK_Button.Text = "OK" - Cancel_Button.Text = "Annulla" - End Select - Case 1 - Label1.Text = "Entry:" - Button1.Text = "Browse..." - OK_Button.Text = "OK" - Cancel_Button.Text = "Cancel" - Case 2 - Label1.Text = "Entrada:" - Button1.Text = "Examinar..." - OK_Button.Text = "Aceptar" - Cancel_Button.Text = "Cancelar" - Case 3 - Label1.Text = "Entrée :" - Button1.Text = "Parcourir..." - OK_Button.Text = "OK" - Cancel_Button.Text = "Annuler" - Case 4 - Label1.Text = "Entrada:" - Button1.Text = "Navegar..." - OK_Button.Text = "OK" - Cancel_Button.Text = "Cancelar" - Case 5 - Label1.Text = "Voce:" - Button1.Text = "Sfoglia..." - OK_Button.Text = "OK" - Cancel_Button.Text = "Annulla" - End Select + Label1.Text = LocalizationService.ForSection("AddListEntry")("Entry.Label") + Button1.Text = LocalizationService.ForSection("AddListEntry")("Browse.Button") + OK_Button.Text = LocalizationService.ForSection("AddListEntry")("Ok.Button") + Cancel_Button.Text = LocalizationService.ForSection("AddListEntry")("Cancel.Button") BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor TextBox1.BackColor = BackColor diff --git a/Panels/ConfigLists/Tools/OneDriveExclusionDlg.vb b/Panels/ConfigLists/Tools/OneDriveExclusionDlg.vb index beba1cb61..3e06ab9bf 100644 --- a/Panels/ConfigLists/Tools/OneDriveExclusionDlg.vb +++ b/Panels/ConfigLists/Tools/OneDriveExclusionDlg.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports System.IO Imports Microsoft.VisualBasic.ControlChars @@ -11,31 +11,7 @@ Public Class OneDriveExclusionDlg DynaLog.LogMessage("Preparing to exclude user OneDrive/SkyDrive folders...") ExcludeFolders(TextBox1.Text) If Not successfulExclusion Then Exit Sub - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label3.Text = "User OneDrive folders have been excluded and will be added to the configuration list." - Case "ESN" - Label3.Text = "Las carpetas de OneDrive del usuario han sido excluidas y serán añadidas a la lista de configuración." - Case "FRA" - Label3.Text = "Les répertoires OneDrive de l'utilisateur ont été exclus et seront ajoutés à la liste de configuration." - Case "PTB", "PTG" - Label3.Text = "As pastas do OneDrive dos utilizadores foram excluídas e serão adicionadas à lista de configuração." - Case "ITA" - Label3.Text = "Le cartelle OneDrive dell'utente sono state escluse e saranno aggiunte all'elenco configurazione" - End Select - Case 1 - Label3.Text = "User OneDrive folders have been excluded and will be added to the configuration list." - Case 2 - Label3.Text = "Las carpetas de OneDrive del usuario han sido excluidas y serán añadidas a la lista de configuración." - Case 3 - Label3.Text = "Les répertoires OneDrive de l'utilisateur ont été exclus et seront ajoutés à la liste de configuration." - Case 4 - Label3.Text = "As pastas do OneDrive dos utilizadores foram excluídas e serão adicionadas à lista de configuração." - Case 5 - Label3.Text = "Le cartelle OneDrive dell'utente sono state escluse e saranno aggiunte all'elenco configurazione" - End Select + Label3.Text = LocalizationService.ForSection("OneDriveExclusion.Valid")("User.Folders.Label") Refresh() Me.DialogResult = System.Windows.Forms.DialogResult.OK Me.Close() @@ -57,31 +33,7 @@ Public Class OneDriveExclusionDlg If Directory.Exists(ImagePath & "\Users") Then DynaLog.LogMessage("A users folder exists in Image Path. Scanning for OneDrive/SkyDrive folder...") Try - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label3.Text = "Excluding user OneDrive folders..." - Case "ESN" - Label3.Text = "Excluyendo carpetas de OneDrive del usuario..." - Case "FRA" - Label3.Text = "Exclusion des répertoires OneDrive de l'utilisateur en cours..." - Case "PTB", "PTG" - Label3.Text = "Excluir pastas do OneDrive dos utilizadores..." - Case "ITA" - Label3.Text = "Esclusione cartelle OneDrive utente..." - End Select - Case 1 - Label3.Text = "Excluding user OneDrive folders..." - Case 2 - Label3.Text = "Excluyendo carpetas de OneDrive del usuario..." - Case 3 - Label3.Text = "Exclusion des répertoires OneDrive de l'utilisateur en cours..." - Case 4 - Label3.Text = "Excluir pastas do OneDrive dos utilizadores..." - Case 5 - Label3.Text = "Esclusione cartelle OneDrive utente..." - End Select + Label3.Text = LocalizationService.ForSection("OneDriveExclusion.Folders")("Excluding.User.Label") Refresh() ' Go through all User folders and exclude all OneDrive folders For Each UserDir In Directory.GetDirectories(ImagePath & "\Users", "*", SearchOption.TopDirectoryOnly) @@ -108,111 +60,14 @@ Public Class OneDriveExclusionDlg End Sub Private Sub OneDriveExclusionDlg_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Exclude user OneDrive folders" - Label1.Text = "This tool will help you exclude user OneDrive folders in the configuration list you're working on. Simply specify the path to which you want to apply the configuration list file, and click Exclude." & CrLf & CrLf & _ - "NOTE: once you've run this tool and excluded user OneDrive folders, you shouldn't use the configuration list on an image other than the one you specify here. If you want to use the configuration list on other images, remove the user OneDrive folders in the configuration list and re-run this tool." - Label2.Text = "Path to exclude OneDrive folders from:" - Label3.Text = "When you're ready, click Exclude." - Button1.Text = "Browse..." - OK_Button.Text = "Exclude" - Cancel_Button.Text = "Cancel" - FolderBrowserDialog1.Description = "Choose a path that contains user folders:" - Case "ESN" - Text = "Excluir carpetas de OneDrive del usuario" - Label1.Text = "Esta herramienta le ayudará a excluir carpetas de OneDrive del usuario en la lista de configuración en la que esté trabajando. Especifique la ruta a la que desea aplicar el archivo de lista de configuración y haga clic en Excluir." & CrLf & CrLf & _ - "NOTA: una vez ejecutada esta herramienta y excluidas las carpetas de OneDrive del usuario, no debería utilizar la lista de configuración en una imagen distinta a la que especifique aquí. Si desea utilizar la lista en otras imágenes, elimine las carpetas de OneDrive en la lista de configuración y vuelva a ejecutar esta herramienta." - Label2.Text = "Ruta donde excluir las carpetas de OneDrive del usuario:" - Label3.Text = "Cuando esté listo, haga clic en Excluir." - Button1.Text = "Examinar..." - OK_Button.Text = "Excluir" - Cancel_Button.Text = "Cancelar" - FolderBrowserDialog1.Description = "Escoja una ruta que contenga carpetas de usuario:" - Case "FRA" - Text = "Exclure les répertoires OneDrive de l'utilisateur" - Label1.Text = "Cet outil vous aidera à exclure les répertoires OneDrive de l'utilisateur dans la liste de configuration sur laquelle vous travaillez. Indiquez simplement le chemin d'accès auquel vous souhaitez appliquer le fichier de la liste de configuration, puis cliquez sur Exclure." & CrLf & CrLf & _ - "REMARQUE : une fois que vous avez exécuté cet outil et exclu les répertoires OneDrive de l'utilisateur, vous ne devez pas utiliser la liste de configuration sur une image autre que celle que vous avez spécifiée ici. Si vous souhaitez utiliser la liste de configuration sur d'autres images, supprimez les répertoires OneDrive de l'utilisateur dans la liste de configuration et exécutez à nouveau cet outil." - Label2.Text = "Chemin d'accès à partir duquel exclure les répertoires OneDrive :" - Label3.Text = "Lorsque vous êtes prêt, cliquez sur Exclure." - Button1.Text = "Parcourir..." - OK_Button.Text = "Exclure" - Cancel_Button.Text = "Annuler" - FolderBrowserDialog1.Description = "Choisissez un chemin qui contient des répertoires d'utilisateurs :" - Case "PTB", "PTG" - Text = "Excluir pastas do OneDrive do utilizador" - Label1.Text = "Esta ferramenta irá ajudá-lo a excluir pastas do OneDrive de utilizadores na lista de configuração em que está a trabalhar. Basta especificar o caminho ao qual pretende aplicar o ficheiro da lista de configuração e clicar em Excluir." & CrLf & CrLf & _ - "NOTA: depois de executar esta ferramenta e excluir as pastas do OneDrive dos utilizadores, não deve utilizar a lista de configuração numa imagem que não seja a que especificou aqui. Se quiser usar a lista de configuração em outras imagens, remova as pastas do OneDrive do usuário na lista de configuração e execute esta ferramenta novamente." - Label2.Text = "Caminho para excluir as pastas do OneDrive de:" - Label3.Text = "Quando estiver pronto, clique em Excluir." - Button1.Text = "Navegar..." - OK_Button.Text = "Excluir" - Cancel_Button.Text = "Cancelar" - FolderBrowserDialog1.Description = "Escolha um caminho que contenha pastas dos utilizadores:" - Case "ITA" - Text = "Escludere le cartelle OneDrive dell'utente" - Label1.Text = "Questo strumento consente di escludere le cartelle OneDrive dell'utente dall'elenco configurazione su cui si sta lavorando. È sufficiente specificare il percorso a cui vuoi applicare il file dell'elenco configurazione e seelzionare 'Escludi'." & CrLf & CrLf & _ - "NOTA: una volta eseguito questo strumento ed escluse le cartelle OneDrive dell'utente, non si dovrebbe usare l'elenco configurazione in un'immagine diversa da quella specificata qui. Se vuoi usare l'elenco configurazione in altre immagini, rimuovi le cartelle OneDrive dell'utente nell'elenco configurazione ed esegui nuovamente questo strumento." - Label2.Text = "Percorso da cui escludere le cartelle OneDrive:" - Label3.Text = "Quando si è pronti, seleziona 'Escludi'" - Button1.Text = "Sfoglia..." - OK_Button.Text = "Escludi" - Cancel_Button.Text = "Annulla" - FolderBrowserDialog1.Description = "Scegli un percorso che contenga le cartelle dell'utente:" - End Select - Case 1 - Text = "Exclude user OneDrive folders" - Label1.Text = "This tool will help you exclude user OneDrive folders in the configuration list you're working on. Simply specify the path to which you want to apply the configuration list file, and click Exclude." & CrLf & CrLf & _ - "NOTE: once you've run this tool and excluded user OneDrive folders, you shouldn't use the configuration list on an image other than the one you specify here. If you want to use the configuration list on other images, remove the user OneDrive folders in the configuration list and re-run this tool." - Label2.Text = "Path to exclude OneDrive folders from:" - Label3.Text = "When you're ready, click Exclude." - Button1.Text = "Browse..." - OK_Button.Text = "Exclude" - Cancel_Button.Text = "Cancel" - FolderBrowserDialog1.Description = "Choose a path that contains user folders:" - Case 2 - Text = "Excluir carpetas de OneDrive del usuario" - Label1.Text = "Esta herramienta le ayudará a excluir carpetas de OneDrive del usuario en la lista de configuración en la que esté trabajando. Especifique la ruta a la que desea aplicar el archivo de lista de configuración y haga clic en Excluir." & CrLf & CrLf & _ - "NOTA: una vez ejecutada esta herramienta y excluidas las carpetas de OneDrive del usuario, no debería utilizar la lista de configuración en una imagen distinta a la que especifique aquí. Si desea utilizar la lista en otras imágenes, elimine las carpetas de OneDrive en la lista de configuración y vuelva a ejecutar esta herramienta." - Label2.Text = "Ruta donde excluir las carpetas de OneDrive del usuario:" - Label3.Text = "Cuando esté listo, haga clic en Excluir." - Button1.Text = "Examinar..." - OK_Button.Text = "Excluir" - Cancel_Button.Text = "Cancelar" - FolderBrowserDialog1.Description = "Escoja una ruta que contenga carpetas de usuario:" - Case 3 - Text = "Exclure les répertoires OneDrive de l'utilisateur" - Label1.Text = "Cet outil vous aidera à exclure les répertoires OneDrive de l'utilisateur dans la liste de configuration sur laquelle vous travaillez. Indiquez simplement le chemin d'accès auquel vous souhaitez appliquer le fichier de la liste de configuration, puis cliquez sur Exclure." & CrLf & CrLf & _ - "REMARQUE : une fois que vous avez exécuté cet outil et exclu les répertoires OneDrive de l'utilisateur, vous ne devez pas utiliser la liste de configuration sur une image autre que celle que vous avez spécifiée ici. Si vous souhaitez utiliser la liste de configuration sur d'autres images, supprimez les répertoires OneDrive de l'utilisateur dans la liste de configuration et exécutez à nouveau cet outil." - Label2.Text = "Chemin d'accès à partir duquel exclure les répertoires OneDrive :" - Label3.Text = "Lorsque vous êtes prêt, cliquez sur Exclure." - Button1.Text = "Parcourir..." - OK_Button.Text = "Exclure" - Cancel_Button.Text = "Annuler" - FolderBrowserDialog1.Description = "Choisissez un chemin qui contient des répertoires d'utilisateurs :" - Case 4 - Text = "Excluir pastas do OneDrive do utilizador" - Label1.Text = "Esta ferramenta irá ajudá-lo a excluir pastas do OneDrive de utilizadores na lista de configuração em que está a trabalhar. Basta especificar o caminho ao qual pretende aplicar o ficheiro da lista de configuração e clicar em Excluir." & CrLf & CrLf & _ - "NOTA: depois de executar esta ferramenta e excluir as pastas do OneDrive dos utilizadores, não deve utilizar a lista de configuração numa imagem que não seja a que especificou aqui. Se quiser usar a lista de configuração em outras imagens, remova as pastas do OneDrive do usuário na lista de configuração e execute esta ferramenta novamente." - Label2.Text = "Caminho para excluir as pastas do OneDrive de:" - Label3.Text = "Quando estiver pronto, clique em Excluir." - Button1.Text = "Navegar..." - OK_Button.Text = "Excluir" - Cancel_Button.Text = "Cancelar" - FolderBrowserDialog1.Description = "Escolha um caminho que contenha pastas dos utilizadores:" - Case 5 - Text = "Escludere le cartelle OneDrive dell'utente" - Label1.Text = "Questo strumento consente di escludere le cartelle OneDrive dell'utente dall'elenco configurazione su cui si sta lavorando. È sufficiente specificare il percorso a cui vuoi applicare il file dell'elenco configurazione e selezionare 'Escludi'." & CrLf & CrLf & _ - "NOTA: una volta eseguito questo strumento ed escluse le cartelle OneDrive dell'utente, non si dovrebbe usare l'elenco configurazione in un'immagine diversa da quella specificata qui. Se vuoi usare l'elenco configurazione in altre immagini, rimuovi le cartelle OneDrive dell'utente nell'elenco configurazione ed esegui nuovamente questo strumento." - Label2.Text = "Percorso da cui escludere le cartelle OneDrive:" - Label3.Text = "Quando si è pronti, seleziona 'Escludi'" - Button1.Text = "Sfoglia..." - OK_Button.Text = "Escludi" - Cancel_Button.Text = "Annulla" - FolderBrowserDialog1.Description = "Scegli un percorso che contenga le cartelle dell'utente:" - End Select + Text = LocalizationService.ForSection("OneDriveExclusion")("Exclude.User.Label") + Label1.Text = LocalizationService.ForSection("OneDriveExclusion")("Tool.Help.Exclude.Message") + Label2.Text = LocalizationService.ForSection("OneDriveExclusion")("Path.Exclude.Label") + Label3.Text = LocalizationService.ForSection("OneDriveExclusion")("Re.Ready.Label") + Button1.Text = LocalizationService.ForSection("OneDriveExclusion")("Browse.Button") + OK_Button.Text = LocalizationService.ForSection("OneDriveExclusion")("Exclude.Button") + Cancel_Button.Text = LocalizationService.ForSection("OneDriveExclusion")("Cancel.Button") + FolderBrowserDialog1.Description = LocalizationService.ForSection("OneDriveExclusion")("UserFolderPath.Description") BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor TextBox1.BackColor = CurrentTheme.SectionBackgroundColor diff --git a/Panels/ConfigLists/WimScriptEditor.vb b/Panels/ConfigLists/WimScriptEditor.vb index c9cb78f2e..ae3ba98b1 100644 --- a/Panels/ConfigLists/WimScriptEditor.vb +++ b/Panels/ConfigLists/WimScriptEditor.vb @@ -1,4 +1,4 @@ -Imports System.IO +Imports System.IO Imports Microsoft.VisualBasic.ControlChars Imports ScintillaNET Imports System.Text.Encoding @@ -10,251 +10,29 @@ Public Class WimScriptEditor Dim scaled As Boolean Private Sub WimScriptEditor_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "DISM Configuration List Editor" - Label1.Text = "The Configuration List Editor allows you to exclude files and/or folders during actions that let you specify these files, like capturing an image. You can either specify the settings from the graphical interface, or you can create the configuration file manually. When you've finished, click the Save icon." - GroupBox1.Text = "Exclusion list" - GroupBox2.Text = "Exclusion exception list" - GroupBox3.Text = "Compression exclusion list" - Button1.Text = "Add..." - Button2.Text = "Edit..." - Button3.Text = "Remove" - Button5.Text = "Add..." - Button6.Text = "Edit..." - Button7.Text = "Remove" - Button9.Text = "Add..." - Button10.Text = "Edit..." - Button11.Text = "Remove" - WimScriptOFD.Title = "Specify the configuration list to load" - WimScriptSFD.Title = "Specify the location to save the configuration list to" - ToolStripButton2.ToolTipText = "New" - ToolStripButton3.ToolTipText = "Open..." - ToolStripButton4.ToolTipText = "Save..." - ToolStripButton5.ToolTipText = "Toggle word wrap" - ToolStripButton6.ToolTipText = "Help" - ToolStripDropDownButton1.Text = "Tools" - NoOneDriveToolStripMenuItem.Text = "Exclude user OneDrive folders..." - Case "ESN" - Text = "Editor de lista de configuraciones de DISM" - Label1.Text = "El Editor de Lista de configuraciones le permite excluir archivos y/o carpetas durante acciones que le permiten especificar estos archivos, como capturar una imagen. Puede especificar las configuraciones desde la interfaz gráfica, o puede crear el archivo de configuración manualmente. Cuando haya acabado, haga clic en el icono de Guardar." - GroupBox1.Text = "Lista de exclusiones" - GroupBox2.Text = "Lista de excepción de exclusiones" - GroupBox3.Text = "Lista de exclusión de compresión" - Button1.Text = "Añadir..." - Button2.Text = "Editar..." - Button3.Text = "Eliminar" - Button5.Text = "Añadir..." - Button6.Text = "Editar..." - Button7.Text = "Eliminar" - Button9.Text = "Añadir..." - Button10.Text = "Editar..." - Button11.Text = "Eliminar" - WimScriptOFD.Title = "Especifique el archivo de configuración a cargar" - WimScriptSFD.Title = "Especifique la ubicación donde guardar el archivo de configuración" - ToolStripButton2.ToolTipText = "Nuevo" - ToolStripButton3.ToolTipText = "Abrir..." - ToolStripButton4.ToolTipText = "Guardar..." - ToolStripButton5.ToolTipText = "Cambiar ajuste de línea" - ToolStripButton6.ToolTipText = "Ayuda" - ToolStripDropDownButton1.Text = "Herramientas" - NoOneDriveToolStripMenuItem.Text = "Excluir carpetas de OneDrive del usuario..." - Case "FRA" - Text = "Éditeur de liste de configuration DISM" - Label1.Text = "L'éditeur de liste de configuration vous permet d'exclure des fichiers et/ou des dossiers lors d'actions qui vous permettent de spécifier ces fichiers, comme la capture d'une image. Vous pouvez soit spécifier les paramètres à partir de l'interface graphique, soit créer le fichier de configuration manuellement. Lorsque vous avez terminé, cliquez sur l'icône Sauvegarder." - GroupBox1.Text = "Liste d'exclusion" - GroupBox2.Text = "Liste des exceptions d'exclusion" - GroupBox3.Text = "Liste d'exclusion de la compression" - Button1.Text = "Ajouter..." - Button2.Text = "Modifier..." - Button3.Text = "Supprimer" - Button5.Text = "Ajouter..." - Button6.Text = "Modifier..." - Button7.Text = "Supprimer" - Button9.Text = "Ajouter..." - Button10.Text = "Modifier..." - Button11.Text = "Supprimer" - WimScriptOFD.Title = "Spécifier la liste de configuration à charger" - WimScriptSFD.Title = "Spécifiez l'emplacement où sauvegarder la liste de configuration" - ToolStripButton2.ToolTipText = "Nouveau" - ToolStripButton3.ToolTipText = "Ouvrir..." - ToolStripButton4.ToolTipText = "Sauvegarder..." - ToolStripButton5.ToolTipText = "Basculer l'habillage des mots" - ToolStripButton6.ToolTipText = "Aide" - ToolStripDropDownButton1.Text = "Outils" - NoOneDriveToolStripMenuItem.Text = "Exclure les répertoires OneDrive de l'utilisateur..." - Case "PTB", "PTG" - Text = "Editor de Lista de Configuração DISM" - Label1.Text = "O Configuration List Editor permite-lhe excluir ficheiros e/ou pastas durante acções que lhe permitem especificar esses ficheiros, como a captura de uma imagem. Pode especificar as definições a partir da interface gráfica ou pode criar o ficheiro de configuração manualmente. Quando tiver terminado, clique no ícone Guardar." - GroupBox1.Text = "Lista de exclusão" - GroupBox2.Text = "Lista de excepções de exclusão" - GroupBox3.Text = "Lista de exclusão de compressão" - Button1.Text = "Adicionar..." - Button2.Text = "Editar..." - Button3.Text = "Remover" - Button5.Text = "Adicionar..." - Button6.Text = "Editar..." - Button7.Text = "Remover" - Button9.Text = "Adicionar..." - Button10.Text = "Editar..." - Button11.Text = "Remover" - WimScriptOFD.Title = "Especificar a lista de configuração a carregar" - WimScriptSFD.Title = "Especificar a localização para guardar a lista de configuração" - ToolStripButton2.ToolTipText = "Novo" - ToolStripButton3.ToolTipText = "Abrir..." - ToolStripButton4.ToolTipText = "Guardar..." - ToolStripButton5.ToolTipText = "Alternar quebra de linha" - ToolStripButton6.ToolTipText = "Ajuda" - ToolStripDropDownButton1.Text = "Ferramentas" - NoOneDriveToolStripMenuItem.Text = "Excluir pastas do OneDrive dos utilizadores..." - Case "ITA" - Text = "Editor elenco configurazione DISM" - Label1.Text = "L'editor elenco configurazione consente di escludere file e/o cartelle durante le azioni che consentono di specificare tali file, come l'acquisizione di un'immagine. È possibile specificare le impostazioni dall'interfaccia grafica oppure creare manualmente il file di configurazione. Al termine, seleziona l'icona Salva" - GroupBox1.Text = "Elenco esclusioni" - GroupBox2.Text = "Elenco eccezioni esclusione" - GroupBox3.Text = "Elenco esclusione compressione" - Button1.Text = "Aggiungi..." - Button2.Text = "Modifica..." - Button3.Text = "Rimuovi" - Button5.Text = "Aggiungi..." - Button6.Text = "Modifica..." - Button7.Text = "Rimuovi" - Button9.Text = "Aggiungi..." - Button10.Text = "Modifica..." - Button11.Text = "Rimuovi" - WimScriptOFD.Title = "Specifica l'elenco configurazione da caricare" - WimScriptSFD.Title = "Specifica il percorso in cui salvare l'elenco di configurazione" - ToolStripButton2.ToolTipText = "Nuovo" - ToolStripButton3.ToolTipText = "Apri..." - ToolStripButton4.ToolTipText = "Salva..." - ToolStripButton5.ToolTipText = "Attiva/disattiva a capo automatico" - ToolStripButton6.ToolTipText = "Aiuto" - ToolStripDropDownButton1.Text = "Strumenti" - NoOneDriveToolStripMenuItem.Text = "Escludi cartelle OneDrive utente..." - End Select - Case 1 - Text = "DISM Configuration List Editor" - Label1.Text = "The Configuration List Editor allows you to exclude files and/or folders during actions that let you specify these files, like capturing an image. You can either specify the settings from the graphical interface, or you can create the configuration file manually. When you've finished, click the Save icon." - GroupBox1.Text = "Exclusion list" - GroupBox2.Text = "Exclusion exception list" - GroupBox3.Text = "Compression exclusion list" - Button1.Text = "Add..." - Button2.Text = "Edit..." - Button3.Text = "Remove" - Button5.Text = "Add..." - Button6.Text = "Edit..." - Button7.Text = "Remove" - Button9.Text = "Add..." - Button10.Text = "Edit..." - Button11.Text = "Remove" - WimScriptOFD.Title = "Specify the configuration list to load" - WimScriptSFD.Title = "Specify the location to save the configuration list to" - ToolStripButton2.ToolTipText = "New" - ToolStripButton3.ToolTipText = "Open..." - ToolStripButton4.ToolTipText = "Save..." - ToolStripButton5.ToolTipText = "Toggle word wrap" - ToolStripButton6.ToolTipText = "Help" - ToolStripDropDownButton1.Text = "Tools" - NoOneDriveToolStripMenuItem.Text = "Exclude user OneDrive folders..." - Case 2 - Text = "Editor de lista de configuraciones de DISM" - Label1.Text = "El Editor de Lista de configuraciones le permite excluir archivos y/o carpetas durante acciones que le permiten especificar estos archivos, como capturar una imagen. Puede especificar las configuraciones desde la interfaz gráfica, o puede crear el archivo de configuración manualmente. Cuando haya acabado, haga clic en el icono de Guardar." - GroupBox1.Text = "Lista de exclusiones" - GroupBox2.Text = "Lista de excepción de exclusiones" - GroupBox3.Text = "Lista de exclusión de compresión" - Button1.Text = "Añadir..." - Button2.Text = "Editar..." - Button3.Text = "Eliminar" - Button5.Text = "Añadir..." - Button6.Text = "Editar..." - Button7.Text = "Eliminar" - Button9.Text = "Añadir..." - Button10.Text = "Editar..." - Button11.Text = "Eliminar" - WimScriptOFD.Title = "Especifique el archivo de configuración a cargar" - WimScriptSFD.Title = "Especifique la ubicación donde guardar el archivo de configuración" - ToolStripButton2.ToolTipText = "Nuevo" - ToolStripButton3.ToolTipText = "Abrir..." - ToolStripButton4.ToolTipText = "Guardar..." - ToolStripButton5.ToolTipText = "Cambiar ajuste de línea" - ToolStripButton6.ToolTipText = "Ayuda" - ToolStripDropDownButton1.Text = "Herramientas" - NoOneDriveToolStripMenuItem.Text = "Excluir carpetas de OneDrive del usuario..." - Case 3 - Text = "Éditeur de liste de configuration DISM" - Label1.Text = "L'éditeur de liste de configuration vous permet d'exclure des fichiers et/ou des dossiers lors d'actions qui vous permettent de spécifier ces fichiers, comme la capture d'une image. Vous pouvez soit spécifier les paramètres à partir de l'interface graphique, soit créer le fichier de configuration manuellement. Lorsque vous avez terminé, cliquez sur l'icône Sauvegarder." - GroupBox1.Text = "Liste d'exclusion" - GroupBox2.Text = "Liste des exceptions d'exclusion" - GroupBox3.Text = "Liste d'exclusion de la compression" - Button1.Text = "Ajouter..." - Button2.Text = "Modifier..." - Button3.Text = "Supprimer" - Button5.Text = "Ajouter..." - Button6.Text = "Modifier..." - Button7.Text = "Supprimer" - Button9.Text = "Ajouter..." - Button10.Text = "Modifier..." - Button11.Text = "Supprimer" - WimScriptOFD.Title = "Spécifier la liste de configuration à charger" - WimScriptSFD.Title = "Spécifiez l'emplacement où sauvegarder la liste de configuration" - ToolStripButton2.ToolTipText = "Nouveau" - ToolStripButton3.ToolTipText = "Ouvrir..." - ToolStripButton4.ToolTipText = "Sauvegarder..." - ToolStripButton5.ToolTipText = "Basculer l'habillage des mots" - ToolStripButton6.ToolTipText = "Aide" - ToolStripDropDownButton1.Text = "Outils" - NoOneDriveToolStripMenuItem.Text = "Exclure les répertoires OneDrive de l'utilisateur..." - Case 4 - Text = "Editor de Lista de Configuração DISM" - Label1.Text = "O Configuration List Editor permite-lhe excluir ficheiros e/ou pastas durante acções que lhe permitem especificar esses ficheiros, como a captura de uma imagem. Pode especificar as definições a partir da interface gráfica ou pode criar o ficheiro de configuração manualmente. Quando tiver terminado, clique no ícone Guardar." - GroupBox1.Text = "Lista de exclusão" - GroupBox2.Text = "Lista de excepções de exclusão" - GroupBox3.Text = "Lista de exclusão de compressão" - Button1.Text = "Adicionar..." - Button2.Text = "Editar..." - Button3.Text = "Remover" - Button5.Text = "Adicionar..." - Button6.Text = "Editar..." - Button7.Text = "Remover" - Button9.Text = "Adicionar..." - Button10.Text = "Editar..." - Button11.Text = "Remover" - WimScriptOFD.Title = "Especificar a lista de configuração a carregar" - WimScriptSFD.Title = "Especificar a localização para guardar a lista de configuração" - ToolStripButton2.ToolTipText = "Novo" - ToolStripButton3.ToolTipText = "Abrir..." - ToolStripButton4.ToolTipText = "Guardar..." - ToolStripButton5.ToolTipText = "Alternar quebra de linha" - ToolStripButton6.ToolTipText = "Ajuda" - ToolStripDropDownButton1.Text = "Ferramentas" - NoOneDriveToolStripMenuItem.Text = "Excluir pastas do OneDrive dos utilizadores..." - Case 5 - Text = "Editor elenco configurazione DISM" - Label1.Text = "L'Editor elenco configurazione consente di escludere file e/o cartelle durante le azioni che consentono di specificare tali file, come l'acquisizione di un'immagine. È possibile specificare le impostazioni dall'interfaccia grafica oppure creare manualmente il file di configurazione. Al termine, selezionare l'icona Salva" - GroupBox1.Text = "Elenco esclusioni" - GroupBox2.Text = "Elenco eccezioni esclusione" - GroupBox3.Text = "Elenco esclusione compressione" - Button1.Text = "Aggiungi..." - Button2.Text = "Modifica..." - Button3.Text = "Rimuovi" - Button5.Text = "Aggiungi..." - Button6.Text = "Modifica..." - Button7.Text = "Rimuovi" - Button9.Text = "Aggiungi..." - Button10.Text = "Modifica..." - Button11.Text = "Rimuovi" - WimScriptOFD.Title = "Specifica l'elenco configurazione da caricare" - WimScriptSFD.Title = "Specifica il percorso in cui salvare l'elenco configurazione" - ToolStripButton2.ToolTipText = "Nuovo" - ToolStripButton3.ToolTipText = "Apri..." - ToolStripButton4.ToolTipText = "Salva..." - ToolStripButton5.ToolTipText = "Attiva/disattiva a capo automatico" - ToolStripButton6.ToolTipText = "Aiuto" - ToolStripDropDownButton1.Text = "Strumenti" - NoOneDriveToolStripMenuItem.Text = "Escludi cartelle OneDrive utente..." - End Select + Text = LocalizationService.ForSection("WimScriptEditor")("ConfigList.Title") + Label1.Text = LocalizationService.ForSection("WimScriptEditor")("Config.List.Allows.Message") + GroupBox1.Text = LocalizationService.ForSection("WimScriptEditor")("ExclusionList.Group") + GroupBox2.Text = LocalizationService.ForSection("WimScriptEditor")("Exclusion.Exception.List") + GroupBox3.Text = LocalizationService.ForSection("WimScriptEditor")("Compression.Exclusion.List") + Button1.Text = LocalizationService.ForSection("WimScriptEditor")("Add.Button") + Button2.Text = LocalizationService.ForSection("WimScriptEditor")("Edit.Button") + Button3.Text = LocalizationService.ForSection("WimScriptEditor")("Remove.Button") + Button5.Text = LocalizationService.ForSection("WimScriptEditor")("Add.Button") + Button6.Text = LocalizationService.ForSection("WimScriptEditor")("Edit.Button") + Button7.Text = LocalizationService.ForSection("WimScriptEditor")("Remove.Button") + Button9.Text = LocalizationService.ForSection("WimScriptEditor")("Add.Button") + Button10.Text = LocalizationService.ForSection("WimScriptEditor")("Edit.Button") + Button11.Text = LocalizationService.ForSection("WimScriptEditor")("Remove.Button") + WimScriptOFD.Title = LocalizationService.ForSection("WimScriptEditor")("Config.List.Load.Title") + WimScriptSFD.Title = LocalizationService.ForSection("WimScriptEditor")("Location.Save.Config.Title") + ToolStripButton2.ToolTipText = LocalizationService.ForSection("WimScriptEditor")("New.Tooltip") + ToolStripButton3.ToolTipText = LocalizationService.ForSection("WimScriptEditor")("Open.Button") + ToolStripButton4.ToolTipText = LocalizationService.ForSection("WimScriptEditor")("Save.Button") + ToolStripButton5.ToolTipText = LocalizationService.ForSection("WimScriptEditor")("Toggle.Word.Wrap.Tooltip") + ToolStripButton6.ToolTipText = LocalizationService.ForSection("WimScriptEditor")("Help.Tooltip") + ToolStripDropDownButton1.Text = LocalizationService.ForSection("WimScriptEditor")("Tools.Label") + NoOneDriveToolStripMenuItem.Text = LocalizationService.ForSection("WimScriptEditor")("Exclude.User.One.Button") BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor ListView1.BackColor = CurrentTheme.BackgroundColor @@ -466,58 +244,10 @@ Public Class WimScriptEditor Dim titleMsg As String = "" If File.ReadAllText(ConfigListFile).ToString() = Scintilla1.Text Then DynaLog.LogMessage("This file does not have pending modifications.") - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Editor").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Else DynaLog.LogMessage("This file has pending modifications.") - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " (modified) - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " (modificado) - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " (modifié) - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " (modificado) - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " (modificato) - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " (modified) - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " (modificado) - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " (modifié) - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " (modificado) - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " (modificato) - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Editor").Format("ConfigList.ModifiedTitle", Path.GetFileName(ConfigListFile)) End If Text = titleMsg End If @@ -526,41 +256,8 @@ Public Class WimScriptEditor Private Sub ToolStripButton2_Click(sender As Object, e As EventArgs) Handles ToolStripButton2.Click Dim msg As String = "" Dim titleMsg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Do you want to save this configuration list file?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & " - DISM Configuration List Editor" - Case "ESN" - msg = "¿Desea guardar este archivo de lista de configuraciones?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & " - Editor de lista de configuraciones de DISM" - Case "FRA" - msg = "Voulez-vous sauvegarder ce fichier de liste de configuration ?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - msg = "Deseja guardar este ficheiro de lista de configuração?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & " - Editor de listas de configuração DISM" - Case "ITA" - msg = "Vuoi salvare questo file dell'elenco di configurazione?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - msg = "Do you want to save this configuration list file?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & " - DISM Configuration List Editor" - Case 2 - msg = "¿Desea guardar este archivo de lista de configuraciones?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & " - Editor de lista de configuraciones de DISM" - Case 3 - msg = "Voulez-vous sauvegarder ce fichier de liste de configuration ?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & " - Éditeur de liste de configuration DISM" - Case 4 - msg = "Deseja guardar este ficheiro de lista de configuração?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & " - Editor de listas de configuração DISM" - Case 5 - msg = "Vuoi salvare questo file dell'elenco di configurazione?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & " - Editor dell'elenco di configurazione DISM" - End Select + msg = LocalizationService.ForSection("WimScriptEditor.Actions")("Save.Config.List.Prompt") + titleMsg = LocalizationService.ForSection("WimScriptEditor.Actions").Format("ConfigList.Title", If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "")) If (ConfigListFile Is Nothing Or Not File.Exists(ConfigListFile)) And Scintilla1.Text <> "" Then DynaLog.LogMessage("Asking user whether or not to save the file...") Dim Result As MsgBoxResult = MsgBox(msg, vbYesNoCancel + vbQuestion, Text) @@ -568,61 +265,13 @@ Public Class WimScriptEditor Case MsgBoxResult.Yes If File.Exists(ConfigListFile) Then File.WriteAllText(ConfigListFile, Scintilla1.Text, ASCII) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Actions").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else If WimScriptSFD.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then File.WriteAllText(WimScriptSFD.FileName, Scintilla1.Text, ASCII) ConfigListFile = WimScriptSFD.FileName - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Actions").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else Exit Sub @@ -642,61 +291,13 @@ Public Class WimScriptEditor Case MsgBoxResult.Yes If File.Exists(ConfigListFile) Then File.WriteAllText(ConfigListFile, Scintilla1.Text, ASCII) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Actions").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else If WimScriptSFD.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then File.WriteAllText(WimScriptSFD.FileName, Scintilla1.Text, ASCII) ConfigListFile = WimScriptSFD.FileName - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Actions").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else Exit Sub @@ -713,31 +314,7 @@ Public Class WimScriptEditor End Try End If - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "New configuration list - DISM Configuration List Editor" - Case "ESN" - Text = "Nueva lista de configuraciones - Editor de lista de configuración de DISM" - Case "FRA" - Text = "Nouvelle liste de configuration - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - Text = "Nova lista de configuração - Editor de listas de configuração DISM" - Case "ITA" - Text = "Nuovo elenco di configurazione - Editor elenco di configurazione DISM" - End Select - Case 1 - Text = "New configuration list - DISM Configuration List Editor" - Case 2 - Text = "Nueva lista de configuraciones - Editor de lista de configuración de DISM" - Case 3 - Text = "Nouvelle liste de configuration - Éditeur de liste de configuration DISM" - Case 4 - Text = "Nova lista de configuração - Editor de listas de configuração DISM" - Case 5 - Text = "Nuovo elenco di configurazione - Editor elenco di configurazione DISM" - End Select + Text = LocalizationService.ForSection("WimScriptEditor")("New.Config.List.Label") ' Generate a default configuration list, as shown in the DISM configuration list documentation. ' Source: https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/dism-configuration-list-and-wimscriptini-files-winnext?view=windows-11 @@ -768,41 +345,8 @@ Public Class WimScriptEditor Private Sub ToolStripButton3_Click(sender As Object, e As EventArgs) Handles ToolStripButton3.Click Dim msg As String = "" Dim titleMsg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Do you want to save this configuration list file?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - msg = "¿Desea guardar este archivo de lista de configuraciones?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - msg = "Voulez-vous sauvegarder ce fichier de liste de configuration ?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - msg = "Deseja guardar este ficheiro de lista de configuração?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - msg = "Vuoi salvare questo file dell'elenco di configurazione?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - msg = "Do you want to save this configuration list file?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - msg = "¿Desea guardar este archivo de lista de configuraciones?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - msg = "Voulez-vous sauvegarder ce fichier de liste de configuration ?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - msg = "Deseja guardar este ficheiro de lista de configuração?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - msg = "Vuoi salvare questo file dell'elenco di configurazione?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + msg = LocalizationService.ForSection("WimScriptEditor.Actions")("Save.Config.List.Prompt") + titleMsg = LocalizationService.ForSection("WimScriptEditor.Actions").Format("ConfigList.FileTitle", If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), ""), Path.GetFileName(ConfigListFile)) If (ConfigListFile Is Nothing Or Not File.Exists(ConfigListFile)) And Scintilla1.Text <> "" Then DynaLog.LogMessage("Asking user whether or not to save the file...") Dim Result As MsgBoxResult = MsgBox(msg, vbYesNoCancel + vbQuestion, Text) @@ -811,61 +355,13 @@ Public Class WimScriptEditor If File.Exists(ConfigListFile) Then File.WriteAllText(WimScriptSFD.FileName, Scintilla1.Text, ASCII) ConfigListFile = WimScriptSFD.FileName - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Actions").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else If WimScriptSFD.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then File.WriteAllText(WimScriptSFD.FileName, Scintilla1.Text, ASCII) ConfigListFile = WimScriptSFD.FileName - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Actions").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else Exit Sub @@ -885,61 +381,13 @@ Public Class WimScriptEditor Case MsgBoxResult.Yes If File.Exists(ConfigListFile) Then File.WriteAllText(ConfigListFile, Scintilla1.Text, ASCII) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Actions").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else If WimScriptSFD.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then File.WriteAllText(WimScriptSFD.FileName, Scintilla1.Text, ASCII) ConfigListFile = WimScriptSFD.FileName - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Actions").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else Exit Sub @@ -971,31 +419,7 @@ Public Class WimScriptEditor DynaLog.LogMessage("Destination file: " & Quote & ConfigListFile & Quote) File.WriteAllText(ConfigListFile, Scintilla1.Text, ASCII) End If - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - Text = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - Text = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - Text = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - Text = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - Text = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - Text = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - Text = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - Text = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - Text = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + Text = LocalizationService.ForSection("WimScriptEditor").Format("ConfigList.FileTitle", Path.GetFileName(ConfigListFile)) End Sub Private Sub WimScriptOFD_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles WimScriptOFD.FileOk @@ -1003,31 +427,7 @@ Public Class WimScriptEditor DynaLog.LogMessage("Configuration list file: " & Quote & WimScriptOFD.FileName & Quote) Scintilla1.Text = File.ReadAllText(WimScriptOFD.FileName) ConfigListFile = WimScriptOFD.FileName - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - Text = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - Text = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - Text = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - Text = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - Text = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - Text = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - Text = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - Text = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - Text = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + Text = LocalizationService.ForSection("WimScriptEditor.OpenFile").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) End Sub Private Sub ToolStripButton6_Click(sender As Object, e As EventArgs) Handles ToolStripButton6.Click @@ -1115,57 +515,9 @@ Public Class WimScriptEditor ' Indicate whether file has seen changes, if it exists If ConfigListFile IsNot Nothing And File.Exists(ConfigListFile) Then If File.ReadAllText(ConfigListFile).ToString() = Scintilla1.Text Then - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - Text = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - Text = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - Text = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - Text = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - Text = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - Text = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - Text = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - Text = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - Text = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + Text = LocalizationService.ForSection("WimScriptEditor.Content").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Else - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = Path.GetFileName(ConfigListFile) & " (modified) - DISM Configuration List Editor" - Case "ESN" - Text = Path.GetFileName(ConfigListFile) & " (modificado) - Editor de lista de configuraciones de DISM" - Case "FRA" - Text = Path.GetFileName(ConfigListFile) & " (modifié) - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - Text = Path.GetFileName(ConfigListFile) & " (modificado) - Editor de listas de configuração DISM" - Case "ITA" - Text = Path.GetFileName(ConfigListFile) & " (modificato) - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - Text = Path.GetFileName(ConfigListFile) & " (modified) - DISM Configuration List Editor" - Case 2 - Text = Path.GetFileName(ConfigListFile) & " (modificado) - Editor de lista de configuraciones de DISM" - Case 3 - Text = Path.GetFileName(ConfigListFile) & " (modifié) - Éditeur de liste de configuration DISM" - Case 4 - Text = Path.GetFileName(ConfigListFile) & " (modificado) - Editor de listas de configuração DISM" - Case 5 - Text = Path.GetFileName(ConfigListFile) & " (modificato) - Editor dell'elenco di configurazione DISM" - End Select + Text = LocalizationService.ForSection("WimScriptEditor.Content").Format("ConfigList.ModifiedTitle", Path.GetFileName(ConfigListFile)) End If End If @@ -1175,31 +527,7 @@ Public Class WimScriptEditor Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click AddListEntryDlg.IsForExclusionList = True - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - AddListEntryDlg.Text = "Add " & GroupBox1.Text.ToLower() & " entry" - Case "ESN" - AddListEntryDlg.Text = "Añadir entrada de " & GroupBox1.Text.ToLower() - Case "FRA" - AddListEntryDlg.Text = "Ajouter une entrée à la " & GroupBox1.Text.ToLower() - Case "PTB", "PTG" - AddListEntryDlg.Text = "Adicionar entrada de " & GroupBox1.Text.ToLower() - Case "ITA" - AddListEntryDlg.Text = "Aggiungere una entrata di " & GroupBox1.Text.ToLower() - End Select - Case 1 - AddListEntryDlg.Text = "Add " & GroupBox1.Text.ToLower() & " entry" - Case 2 - AddListEntryDlg.Text = "Añadir entrada de " & GroupBox1.Text.ToLower() - Case 3 - AddListEntryDlg.Text = "Ajouter une entrée à la " & GroupBox1.Text.ToLower() - Case 4 - AddListEntryDlg.Text = "Adicionar entrada de " & GroupBox1.Text.ToLower() - Case 5 - AddListEntryDlg.Text = "Aggiungere una entrata di " & GroupBox1.Text.ToLower() - End Select + AddListEntryDlg.Text = LocalizationService.ForSection("WimScriptEditor").Format("AddList.Label", GroupBox1.Text.ToLower()) AddListEntryDlg.Left = Left + ((SplitContainer1.SplitterDistance + Scintilla1.Width) / 2) AddListEntryDlg.Top = Top + Panel2.Top + DarkToolStrip1.Height + SplitContainer1.Top + GroupBox1.Top + 8 AddListEntryDlg.ShowDialog(Me) @@ -1211,31 +539,7 @@ Public Class WimScriptEditor Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click AddListEntryDlg.IsForExclusionList = False - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - AddListEntryDlg.Text = "Add " & GroupBox2.Text.ToLower() & " entry" - Case "ESN" - AddListEntryDlg.Text = "Añadir entrada de " & GroupBox2.Text.ToLower() - Case "FRA" - AddListEntryDlg.Text = "Ajouter une entrée à la " & GroupBox2.Text.ToLower() - Case "PTB", "PTG" - AddListEntryDlg.Text = "Adicionar entrada de " & GroupBox2.Text.ToLower() - Case "ITA" - AddListEntryDlg.Text = "Aggiungere una entrata di " & GroupBox2.Text.ToLower() - End Select - Case 1 - AddListEntryDlg.Text = "Add " & GroupBox2.Text.ToLower() & " entry" - Case 2 - AddListEntryDlg.Text = "Añadir entrada de " & GroupBox2.Text.ToLower() - Case 3 - AddListEntryDlg.Text = "Ajouter une entrée à la " & GroupBox2.Text.ToLower() - Case 4 - AddListEntryDlg.Text = "Adicionar entrada de " & GroupBox2.Text.ToLower() - Case 5 - AddListEntryDlg.Text = "Aggiungere una entrata di " & GroupBox2.Text.ToLower() - End Select + AddListEntryDlg.Text = LocalizationService.ForSection("WimScriptEditor").Format("AddEntry.Label", GroupBox2.Text.ToLower()) AddListEntryDlg.Left = Left + ((SplitContainer1.SplitterDistance + Scintilla1.Width) / 2) AddListEntryDlg.Top = Top + Panel2.Top + DarkToolStrip1.Height + SplitContainer1.Top + GroupBox2.Top + 8 AddListEntryDlg.ShowDialog(Me) @@ -1247,31 +551,7 @@ Public Class WimScriptEditor Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button9.Click AddListEntryDlg.IsForExclusionList = False - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - AddListEntryDlg.Text = "Add " & GroupBox3.Text.ToLower() & " entry" - Case "ESN" - AddListEntryDlg.Text = "Añadir entrada de " & GroupBox3.Text.ToLower() - Case "FRA" - AddListEntryDlg.Text = "Ajouter une entrée à la " & GroupBox3.Text.ToLower() - Case "PTB", "PTG" - AddListEntryDlg.Text = "Adicionar entrada de " & GroupBox3.Text.ToLower() - Case "ITA" - AddListEntryDlg.Text = "Aggiungere una entrata di " & GroupBox3.Text.ToLower() - End Select - Case 1 - AddListEntryDlg.Text = "Add " & GroupBox3.Text.ToLower() & " entry" - Case 2 - AddListEntryDlg.Text = "Añadir entrada de " & GroupBox3.Text.ToLower() - Case 3 - AddListEntryDlg.Text = "Ajouter une entrée à la " & GroupBox3.Text.ToLower() - Case 4 - AddListEntryDlg.Text = "Adicionar entrada de " & GroupBox3.Text.ToLower() - Case 5 - AddListEntryDlg.Text = "Aggiungere una entrata di " & GroupBox3.Text.ToLower() - End Select + AddListEntryDlg.Text = LocalizationService.ForSection("WimScriptEditor").Format("AddEntry.Label", GroupBox3.Text.ToLower()) AddListEntryDlg.Left = Left + ((SplitContainer1.SplitterDistance + Scintilla1.Width) / 2) AddListEntryDlg.Top = Top + Panel2.Top + DarkToolStrip1.Height + SplitContainer1.Top + GroupBox3.Top + 8 AddListEntryDlg.ShowDialog(Me) @@ -1352,41 +632,8 @@ Public Class WimScriptEditor Private Sub WimScriptEditor_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing Dim msg As String = "" Dim titleMsg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Do you want to save this configuration list file?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - msg = "¿Desea guardar este archivo de lista de configuraciones?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - msg = "Voulez-vous sauvegarder ce fichier de liste de configuration ?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - msg = "Deseja guardar este ficheiro de lista de configuração?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - msg = "Vuoi salvare questo file dell'elenco di configurazione?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - msg = "Do you want to save this configuration list file?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - msg = "¿Desea guardar este archivo de lista de configuraciones?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - msg = "Voulez-vous sauvegarder ce fichier de liste de configuration ?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - msg = "Deseja guardar este ficheiro de lista de configuração?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - msg = "Vuoi salvare questo file dell'elenco di configurazione?" - titleMsg = If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), "") & Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + msg = LocalizationService.ForSection("WimScriptEditor.Close")("Save.Config.List.Prompt") + titleMsg = LocalizationService.ForSection("WimScriptEditor.Close").Format("ConfigList.FileTitle", If((ConfigListFile IsNot Nothing And File.Exists(ConfigListFile)), Path.GetFileName(ConfigListFile), ""), Path.GetFileName(ConfigListFile)) If (ConfigListFile Is Nothing Or Not File.Exists(ConfigListFile)) And Scintilla1.Text <> "" Then DynaLog.LogMessage("Asking user whether or not to save the file...") Dim Result As MsgBoxResult = MsgBox(msg, vbYesNoCancel + vbQuestion, Text) @@ -1395,61 +642,13 @@ Public Class WimScriptEditor If File.Exists(ConfigListFile) Then File.WriteAllText(WimScriptSFD.FileName, Scintilla1.Text, ASCII) ConfigListFile = WimScriptSFD.FileName - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Close").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else If WimScriptSFD.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then File.WriteAllText(WimScriptSFD.FileName, Scintilla1.Text, ASCII) ConfigListFile = WimScriptSFD.FileName - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Close").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else e.Cancel = True @@ -1469,61 +668,13 @@ Public Class WimScriptEditor Case MsgBoxResult.Yes If File.Exists(ConfigListFile) Then File.WriteAllText(ConfigListFile, Scintilla1.Text, ASCII) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Close").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else If WimScriptSFD.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then File.WriteAllText(WimScriptSFD.FileName, Scintilla1.Text, ASCII) ConfigListFile = WimScriptSFD.FileName - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case "ESN" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case "FRA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case "PTB", "PTG" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case "ITA" - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select - Case 1 - titleMsg = Path.GetFileName(ConfigListFile) & " - DISM Configuration List Editor" - Case 2 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de lista de configuraciones de DISM" - Case 3 - titleMsg = Path.GetFileName(ConfigListFile) & " - Éditeur de liste de configuration DISM" - Case 4 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor de listas de configuração DISM" - Case 5 - titleMsg = Path.GetFileName(ConfigListFile) & " - Editor dell'elenco di configurazione DISM" - End Select + titleMsg = LocalizationService.ForSection("WimScriptEditor.Close").Format("ConfigList.Title", Path.GetFileName(ConfigListFile)) Text = titleMsg Else e.Cancel = True @@ -1560,4 +711,4 @@ Public Class WimScriptEditor End If End If End Sub -End Class \ No newline at end of file +End Class diff --git a/Panels/DoWork/PleaseWaitDialog.vb b/Panels/DoWork/PleaseWaitDialog.vb index a7c8532cf..1f674342f 100644 --- a/Panels/DoWork/PleaseWaitDialog.vb +++ b/Panels/DoWork/PleaseWaitDialog.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports System.IO Imports System.Text.Encoding Imports Microsoft.VisualBasic.ControlChars @@ -29,31 +29,7 @@ Public Class PleaseWaitDialog Label2.Size = New Size(WindowHelper.ScaleLogical(343), WindowHelper.ScaleLogical(43)) Label2.Font = New Font("Segoe UI", 11.25) End Select - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label1.Text = "Please wait..." - Case "ESN" - Label1.Text = "Espere..." - Case "FRA" - Label1.Text = "Veuillez patienter..." - Case "PTB", "PTG" - Label1.Text = "Por favor, aguarde..." - Case "ITA" - Label1.Text = "Attendi..." - End Select - Case 1 - Label1.Text = "Please wait..." - Case 2 - Label1.Text = "Espere..." - Case 3 - Label1.Text = "Veuillez patienter..." - Case 4 - Label1.Text = "Por favor, aguarde..." - Case 5 - Label1.Text = "Attendi..." - End Select + Label1.Text = LocalizationService.ForSection("Wait")("Wait.Label") Visible = True Panel1.BorderStyle = BorderStyle.None Panel1.BackColor = CurrentTheme.SectionBackgroundColor @@ -92,8 +68,8 @@ Public Class PleaseWaitDialog ProjectValueLoadForm.EpochRTB3.Text = DateTimeOffset.FromUnixTimeSeconds(CInt(ProjectValueLoadForm.RichTextBox23.Text)).ToString().Replace(" +00:00", "").Trim() Catch ex As Exception DynaLog.LogMessage("Could not perform UNIX Epoch conversion. Error message: " & ex.Message) - ProjectValueLoadForm.EpochRTB2.Text = "Not available" - ProjectValueLoadForm.EpochRTB3.Text = "Not available" + ProjectValueLoadForm.EpochRTB2.Text = LocalizationService.ForSection("Wait")("NotAvailable.Label") + ProjectValueLoadForm.EpochRTB3.Text = LocalizationService.ForSection("Wait")("ProjectValue.Label") End Try If Debugger.IsAttached Then ProjectValueLoadForm.ShowDialog(MainForm) @@ -139,8 +115,8 @@ Public Class PleaseWaitDialog ProjectValueLoadForm.EpochRTB3.Text = DateTimeOffset.FromUnixTimeSeconds(CInt(ProjectValueLoadForm.RichTextBox23.Text)).ToString().Replace(" +00:00", "").Trim() Catch ex As Exception DynaLog.LogMessage("Could not perform UNIX Epoch conversion. Error message: " & ex.Message) - ProjectValueLoadForm.EpochRTB2.Text = "Not available" - ProjectValueLoadForm.EpochRTB3.Text = "Not available" + ProjectValueLoadForm.EpochRTB2.Text = LocalizationService.ForSection("Wait")("NotAvailable.Label") + ProjectValueLoadForm.EpochRTB3.Text = LocalizationService.ForSection("Wait")("ProjectValue.Label") End Try If Debugger.IsAttached Then ProjectValueLoadForm.ShowDialog(MainForm) diff --git a/Panels/DoWork/ProgressPanel.vb b/Panels/DoWork/ProgressPanel.vb index ca0bbef74..2d8cdce38 100644 --- a/Panels/DoWork/ProgressPanel.vb +++ b/Panels/DoWork/ProgressPanel.vb @@ -1,4 +1,4 @@ -' DISMTools: operation numbers +' DISMTools: operation numbers ' OperationNum Action ' 00 Create DISMTools project @@ -197,8 +197,6 @@ Public Class ProgressPanel Dim dateStr As String = "DISMTools-" - Dim Language As Integer = 0 ' Form language, taken from MainForm - Dim mntString As String = "" ' Mount directory, necessary for the DISM API Dim OnlineMgmt As Boolean ' Determine whether to perform actions to the active installation or the mounted Windows image @@ -220,6 +218,7 @@ Public Class ProgressPanel Dim LogPath As String Dim LogLevel As Integer Dim QuietOps As Boolean + Dim SkipSysRestart As Boolean Dim UseScratchDir As Boolean Dim AutoScratch As Boolean @@ -229,6 +228,7 @@ Public Class ProgressPanel Dim BckArgs As String Dim IsExpanded As Boolean + Private CancelButtonClosesDialog As Boolean ' OperationNum: 0 @@ -512,7 +512,8 @@ Public Class ProgressPanel ' OperationNum: 77 Public drvExportTarget As String ' Path the drivers will be exported to Public drvExportAllDrvs As Boolean ' Determines whether to export all drivers, or drivers based on the class name - Public drvExportSpecificClassName As String ' The class name that the drivers to export have set + Public drvExportSpecificClassNames As String() ' The class name that the drivers to export have set + Public drvExportOrganizeClassNameExports As Boolean ' Determines whether to organize exported drivers using folder named after class names Public drvExportWin7Mode As Boolean ' Run driver exports in Windows 7 mode ' OperationNum: 78 @@ -581,6 +582,11 @@ Public Class ProgressPanel Private ReferenceImage As WindowsImage + + Private Function ProgressLogText(itemKey As String) As String + Return LocalizationService.ForSection("Progress.LogText")(itemKey) + End Function + Private Sub OnAllTasksLogReported(AllTasksMessage As String) Handles Me.AllTasksLogReported allTasks.Text = AllTasksMessage End Sub @@ -620,69 +626,22 @@ Public Class ProgressPanel End Sub Private Sub Cancel_Button_Click(sender As Object, e As EventArgs) Handles Cancel_Button.Click - If Cancel_Button.Text = "Cancel" Or Cancel_Button.Text = "Cancelar" Or Cancel_Button.Text = "Annulla" Then - ProgressBW.CancelAsync() - ElseIf Cancel_Button.Text = "OK" Or Cancel_Button.Text = "Aceptar" Then + If CancelButtonClosesDialog Then Close() + Return End If + + ProgressBW.CancelAsync() End Sub Private Sub LogButton_Click(sender As Object, e As EventArgs) Handles LogButton.Click Dim collapsedHeight As Integer = WindowHelper.ScaleLogical(240) Dim expandedHeight As Integer = WindowHelper.ScaleLogical(420) If Not IsExpanded Then - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - LogButton.Text = "Hide log" - Case "ESN" - LogButton.Text = "Ocultar registro" - Case "FRA" - LogButton.Text = "Cacher le journal" - Case "PTB", "PTG" - LogButton.Text = "Ocultar registo" - Case "ITA" - LogButton.Text = "Nascondi registro" - End Select - Case 1 - LogButton.Text = "Hide log" - Case 2 - LogButton.Text = "Ocultar registro" - Case 3 - LogButton.Text = "Cacher le journal" - Case 4 - LogButton.Text = "Ocultar registo" - Case 5 - LogButton.Text = "Nascondi registro" - End Select + LogButton.Text = LocalizationService.ForSection("Progress.Log")("HideLog.Label") Height = expandedHeight Else - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - LogButton.Text = "Show log" - Case "ESN" - LogButton.Text = "Mostrar registro" - Case "FRA" - LogButton.Text = "Afficher le journal" - Case "PTB", "PTG" - LogButton.Text = "Mostrar registo" - Case "ITA" - LogButton.Text = "Visualizza registro" - End Select - Case 1 - LogButton.Text = "Show log" - Case 2 - LogButton.Text = "Mostrar registro" - Case 3 - LogButton.Text = "Afficher le journal" - Case 4 - LogButton.Text = "Mostrar registo" - Case 5 - LogButton.Text = "Visualizza registro" - End Select + LogButton.Text = LocalizationService.ForSection("Progress.Log")("ShowLog.Item") Height = collapsedHeight End If IsExpanded = Not IsExpanded @@ -748,31 +707,7 @@ Public Class ProgressPanel End If DynaLog.LogMessage("Number of tasks: " & taskCount) AllPB.Maximum = taskCount * 100 - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: 1/" & taskCount - Case "ESN" - taskCountLbl.Text = "Tareas: 1/" & taskCount - Case "FRA" - taskCountLbl.Text = "Tâches : 1/" & taskCount - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: 1/" & taskCount - Case "ITA" - taskCountLbl.Text = "Attività: 1/" & taskCount - End Select - Case 1 - taskCountLbl.Text = "Tasks: 1/" & taskCount - Case 2 - taskCountLbl.Text = "Tareas: 1/" & taskCount - Case 3 - taskCountLbl.Text = "Tâches : 1/" & taskCount - Case 4 - taskCountLbl.Text = "Tarefas: 1/" & taskCount - Case 5 - taskCountLbl.Text = "Attività: 1/" & taskCount - End Select + taskCountLbl.Text = LocalizationService.ForSection("Progress.GetTasks").Format("Tasks.Label", taskCount) CenterToParent() End Sub @@ -817,31 +752,7 @@ Public Class ProgressPanel AllPB.Value = prevValue + (AllPB.Maximum / taskList.Count) prevValue = AllPB.Value If Not currentTCont = taskList.Count Then currentTCont += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskList.Count - Case "ESN" - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskList.Count - Case "FRA" - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskList.Count - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskList.Count - Case "ITA" - taskCountLbl.Text = "Attività: " & currentTCont & "/" & taskList.Count - End Select - Case 1 - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskList.Count - Case 2 - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskList.Count - Case 3 - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskList.Count - Case 4 - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskList.Count - Case 5 - taskCountLbl.Text = "Attività: " & currentTCont & "/" & taskList.Count - End Select + taskCountLbl.Text = LocalizationService.ForSection("Progress").Format("Tasks.Label", currentTCont, taskList.Count) DynaLog.LogMessage("Determining if tasks are successful...") If IsSuccessful Then successfulTasks += 1 Else failedTasks += 1 Next @@ -1018,42 +929,9 @@ Public Class ProgressPanel DynaLog.LogMessage("Creating a project...") DynaLog.LogMessage("- Project name: " & Quote & projName & Quote) DynaLog.LogMessage("- Project path: " & Quote & projPath & Quote) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Creating project: " & Quote & projName & Quote - currentTask.Text = "Creating DISMTools project structure..." - Case "ESN" - allTasks.Text = "Creando proyecto: " & Quote & projName & Quote - currentTask.Text = "Creando estructura del proyecto de DISMTools..." - Case "FRA" - allTasks.Text = "Création d'un projet en cours : " & Quote & projName & Quote - currentTask.Text = "Création de la structure du projet DISMTools en cours..." - Case "PTB", "PTG" - allTasks.Text = "Criar projeto: " & Quote & projName & Quote - currentTask.Text = "Criar a estrutura do projeto DISMTools..." - Case "ITA" - allTasks.Text = "Creazione di progetto: " & Quote & projName & Quote - currentTask.Text = "Creazione struttura progetto DISMTools..." - End Select - Case 1 - allTasks.Text = "Creating project: " & Quote & projName & Quote - currentTask.Text = "Creating DISMTools project structure..." - Case 2 - allTasks.Text = "Creando proyecto: " & Quote & projName & Quote - currentTask.Text = "Creando estructura del proyecto de DISMTools..." - Case 3 - allTasks.Text = "Création d'un projet en cours : " & Quote & projName & Quote - currentTask.Text = "Création de la structure du projet DISMTools en cours..." - Case 4 - allTasks.Text = "Criar projeto: " & Quote & projName & Quote - currentTask.Text = "Criar a estrutura do projeto DISMTools..." - Case 5 - allTasks.Text = "Creazione di progetto: " & Quote & projName & Quote - currentTask.Text = "Creazione struttura progetto DISMTools..." - End Select - LogView.AppendText(CrLf & "Creating project structure...") + allTasks.Text = LocalizationService.ForSection("Progress.CreateProject").Format("CreatingProject.Label", projName) + currentTask.Text = LocalizationService.ForSection("Progress.CreateProject")("CreateProject.Button") + LogView.AppendText(CrLf & ProgressLogText("Creating.Project.Structure")) Try DynaLog.LogMessage("Creating main project directory...") Directory.CreateDirectory(projPath & "\" & projName) @@ -1128,15 +1006,15 @@ Public Class ProgressPanel CurrentPB.Value = 100 Thread.Sleep(125) AllPB.Value = CurrentPB.Value - LogView.AppendText(CrLf & "Project created successfully.") + LogView.AppendText(CrLf & ProgressLogText("Project.Created.Successfully")) CurrentPB.Value = CurrentPB.Maximum AllPB.Value = AllPB.Maximum IsSuccessful = True Catch ex As Exception DynaLog.LogMessage("Could not create the project. Error message: " & ex.Message) - LogView.AppendText(CrLf & "An error has occurred. Please read the details below: " & CrLf & ex.GetType().ToString() & ": " & Err.Description) + LogView.AppendText(CrLf & ProgressLogText("An.Error.Has.Occurred.Please.Read.The.Details") & CrLf & ex.GetType().ToString() & ": " & Err.Description) If IsDebugged Then - LogView.AppendText(CrLf & "Debugging information: " & ex.StackTrace) + LogView.AppendText(CrLf & ProgressLogText("Debugging.Information") & ex.StackTrace) End If IsSuccessful = False End Try @@ -1164,63 +1042,30 @@ Public Class ProgressPanel DynaLog.LogMessage("- Check for file errors? " & If(AppendixCheckIntegrity, "Yes", "No")) DynaLog.LogMessage("- Use reparse point tag fix? " & If(AppendixReparsePt, "Yes", "No")) DynaLog.LogMessage("- Capture extended attributes (EAs)? " & If(AppendixCaptureExtendedAttribs, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Appending to image..." - currentTask.Text = "Appending specified mount directory to the specified target image..." - Case "ESN" - allTasks.Text = "Anexando a la imagen..." - currentTask.Text = "Anexando el directorio de montaje especificado a la imagen de destino..." - Case "FRA" - allTasks.Text = "Annexe à l'image... " - currentTask.Text = "Annexe du répertoire de montage spécifié à l'image cible spécifiée..." - Case "PTB", "PTG" - allTasks.Text = "Anexo à imagem..." - currentTask.Text = "Anexo do diretório de montagem especificado à imagem de destino especificada..." - Case "ITA" - allTasks.Text = "Applicazione all'immagine..." - currentTask.Text = "Applicazione cartella montaggio specificata all'immagine destinazione specificata..." - End Select - Case 1 - allTasks.Text = "Appending to image..." - currentTask.Text = "Appending specified mount directory to the specified target image..." - Case 2 - allTasks.Text = "Anexando a la imagen..." - currentTask.Text = "Anexando el directorio de montaje especificado a la imagen de destino..." - Case 3 - allTasks.Text = "Annexe à l'image... " - currentTask.Text = "Annexe du répertoire de montage spécifié à l'image cible spécifiée..." - Case 4 - allTasks.Text = "Anexo à imagem..." - currentTask.Text = "Anexo do diretório de montagem especificado à imagem de destino especificada..." - Case 5 - allTasks.Text = "Applicazione all'immagine..." - currentTask.Text = "Applicazione cartella montaggio specificata all'immagine destinazione specificata..." - End Select - LogView.AppendText(CrLf & "Appending mount directory to specified target image..." & CrLf & "Options:" & CrLf & - "- Source image directory: " & AppendixSourceDir & CrLf & - "- Destination image file: " & AppendixDestinationImage & CrLf & - "- Destination image name: " & AppendixName & CrLf & - "- Destination image description: " & If(AppendixDescription = "", "(none specified)", AppendixDescription) & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.AppendImage")("AppendingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.AppendImage")("Appending.Mount.Dir.Button") + LogView.AppendText(CrLf & ProgressLogText("Appending.Mount.Directory.To.Specified.Target.Image") & CrLf & ProgressLogText("Options") & CrLf & + ProgressLogText("Source.Image.Directory") & AppendixSourceDir & CrLf & + ProgressLogText("Destination.Image.File") & AppendixDestinationImage & CrLf & + ProgressLogText("Destination.Image.Name") & AppendixName & CrLf & + ProgressLogText("Destination.Image.Description") & If(AppendixDescription = "", ProgressLogText("None.Specified"), AppendixDescription) & CrLf) If AppendixWimScriptConfig = "" Then DynaLog.LogMessage("No configuration list file has been specified.") - LogView.AppendText("- Configuration list file: not specified" & CrLf) + LogView.AppendText(ProgressLogText("Configuration.List.File.Not.Specified") & CrLf) Else DynaLog.LogMessage("A configuration list file has been specified. Checking if it exists...") - LogView.AppendText("- Configuration list file: " & Quote & AppendixWimScriptConfig & Quote & CrLf) + LogView.AppendText(ProgressLogText("Configuration.List.File") & Quote & AppendixWimScriptConfig & Quote & CrLf) If Not File.Exists(AppendixWimScriptConfig) Then DynaLog.LogMessage("The configuration list file does not exist in the file system and will be skipped.") - LogView.AppendText(" WARNING: the configuration list file does not exist in the file system. Skipping file..." & CrLf) + LogView.AppendText(ProgressLogText("WARNING.The.Configuration.List.File.Does.Not.Exist") & CrLf) End If End If - LogView.AppendText("- Append image with WIMBoot configuration? " & If(AppendixUseWimBoot, "Yes", "No") & CrLf & - "- Make image bootable? " & If(AppendixBootable, "Yes", "No") & CrLf & - "- Verify image integrity? " & If(AppendixCheckIntegrity, "Yes", "No") & CrLf & - "- Check for file errors? " & If(AppendixVerify, "Yes", "No") & CrLf & - "- Use the reparse point tag fix? " & If(AppendixReparsePt, "Yes", "No") & CrLf & - "- Capture extended attributes? " & If(AppendixCaptureExtendedAttribs, "Yes", "No")) + LogView.AppendText(ProgressLogText("Append.Image.With.WIMBOOT.Configuration") & If(AppendixUseWimBoot, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Make.Image.Bootable") & If(AppendixBootable, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Verify.Image.Integrity") & If(AppendixCheckIntegrity, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Check.For.File.Errors") & If(AppendixVerify, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Use.The.Reparse.Point.Tag.Fix") & If(AppendixReparsePt, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Capture.Extended.Attributes") & If(AppendixCaptureExtendedAttribs, ProgressLogText("Yes"), ProgressLogText("No"))) Select Case DismVersionChecker.ProductMajorPart Case 6 Select Case DismVersionChecker.ProductMinorPart @@ -1247,37 +1092,13 @@ Public Class ProgressPanel If Not AppendixReparsePt Then CommandArgs &= " /norpfix" If AppendixCaptureExtendedAttribs Then CommandArgs &= " /EA" RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.AppendImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -1286,45 +1107,12 @@ Public Class ProgressPanel DynaLog.LogMessage("- Image to apply: " & Quote & FFUApplicationSourceImg & Quote) DynaLog.LogMessage("- Application drive: " & Quote & FFUApplicationDestDrive & Quote) DynaLog.LogMessage("- SFU name pattern: " & Quote & FFUApplicationSFUPattern & Quote) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Applying image..." - currentTask.Text = "Applying specified image to the specified destination..." - Case "ESN" - allTasks.Text = "Aplicando imagen..." - currentTask.Text = "Aplicando imagen especificada al destino especificado..." - Case "FRA" - allTasks.Text = "Application de l'image en cours..." - currentTask.Text = "Application de l'image spécifiée à la destination spécifiée en cours..." - Case "PTB", "PTG" - allTasks.Text = "Aplicar imagem..." - currentTask.Text = "Aplicar a imagem especificada ao destino especificado..." - Case "ITA" - allTasks.Text = "Applicazione dell'immagine..." - currentTask.Text = "Applicazione immagine specificata alla destinazione specificata..." - End Select - Case 1 - allTasks.Text = "Applying image..." - currentTask.Text = "Applying specified image to the specified destination..." - Case 2 - allTasks.Text = "Aplicando imagen..." - currentTask.Text = "Aplicando imagen especificada al destino especificado..." - Case 3 - allTasks.Text = "Application de l'image en cours..." - currentTask.Text = "Application de l'image spécifiée à la destination spécifiée en cours..." - Case 4 - allTasks.Text = "Aplicar imagem..." - currentTask.Text = "Aplicar a imagem especificada ao destino especificado..." - Case 5 - allTasks.Text = "Applicazione dell'immagine..." - currentTask.Text = "Applicazione dell'immagine specificata alla destinazione specificata..." - End Select - LogView.AppendText(CrLf & "Applying image..." & CrLf & "Options:" & CrLf & - "- Source image file: " & ApplicationSourceImg & CrLf & - "- Index to apply: " & ApplicationIndex & CrLf & - "- Target directory: " & ApplicationDestDir & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.ApplyFfuImage")("ApplyingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ApplyFfuImage")("Applying.Image.Dest.Button") + LogView.AppendText(CrLf & ProgressLogText("Applying.Image") & CrLf & ProgressLogText("Options") & CrLf & + ProgressLogText("Source.Image.File") & ApplicationSourceImg & CrLf & + ProgressLogText("Index.To.Apply") & ApplicationIndex & CrLf & + ProgressLogText("Target.Directory") & ApplicationDestDir & CrLf) Select Case DismVersionChecker.ProductMajorPart Case 6 Select Case DismVersionChecker.ProductMinorPart @@ -1339,43 +1127,19 @@ Public Class ProgressPanel ' Detect additional options and set CommandArgs CommandArgs &= " /applydrive=" & Quote & FFUApplicationDestDrive & Quote If FFUApplicationSFUPattern = "" Then - LogView.AppendText("- Split FFU (SFU) file pattern: not specified/not using SFU file" & CrLf) + LogView.AppendText(ProgressLogText("Split.FFU.SFU.File.Pattern.Not.Specified.Not") & CrLf) Else - LogView.AppendText("- Split FFU (SFU) file pattern: " & FFUApplicationSFUPattern & CrLf) + LogView.AppendText(ProgressLogText("Split.FFU.SFU.File.Pattern") & FFUApplicationSFUPattern & CrLf) CommandArgs &= " /sfufile=" & FFUApplicationSFUPattern End If RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.ApplyFfuImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -1392,45 +1156,12 @@ Public Class ProgressPanel DynaLog.LogMessage("- Apply with WIMBoot configuration? " & If(ApplicationUseWimBoot, "Yes", "No")) DynaLog.LogMessage("- Apply in compact mode? " & If(ApplicationCompactMode, "Yes", "No")) DynaLog.LogMessage("- Apply extended attributes (EAs)? " & If(ApplicationUseExtAttr, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Applying image..." - currentTask.Text = "Applying specified image to the specified destination..." - Case "ESN" - allTasks.Text = "Aplicando imagen..." - currentTask.Text = "Aplicando imagen especificada al destino especificado..." - Case "FRA" - allTasks.Text = "Application de l'image en cours..." - currentTask.Text = "Application de l'image spécifiée à la destination spécifiée en cours..." - Case "PTB", "PTG" - allTasks.Text = "Aplicar imagem..." - currentTask.Text = "Aplicar a imagem especificada ao destino especificado..." - Case "ITA" - allTasks.Text = "Applicazione dell'immagine..." - currentTask.Text = "Applicazione immagine specificata alla destinazione specificata..." - End Select - Case 1 - allTasks.Text = "Applying image..." - currentTask.Text = "Applying specified image to the specified destination..." - Case 2 - allTasks.Text = "Aplicando imagen..." - currentTask.Text = "Aplicando imagen especificada al destino especificado..." - Case 3 - allTasks.Text = "Application de l'image en cours..." - currentTask.Text = "Application de l'image spécifiée à la destination spécifiée en cours..." - Case 4 - allTasks.Text = "Aplicar imagem..." - currentTask.Text = "Aplicar a imagem especificada ao destino especificado..." - Case 5 - allTasks.Text = "Applicazione dell'immagine..." - currentTask.Text = "Applicazione dell'immagine specificata alla destinazione specificata..." - End Select - LogView.AppendText(CrLf & "Applying image..." & CrLf & "Options:" & CrLf & - "- Source image file: " & ApplicationSourceImg & CrLf & - "- Index to apply: " & ApplicationIndex & CrLf & - "- Target directory: " & ApplicationDestDir & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.ApplyImage")("ApplyingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ApplyImage")("Applying.Image.Dest.Button") + LogView.AppendText(CrLf & ProgressLogText("Applying.Image") & CrLf & ProgressLogText("Options") & CrLf & + ProgressLogText("Source.Image.File") & ApplicationSourceImg & CrLf & + ProgressLogText("Index.To.Apply") & ApplicationIndex & CrLf & + ProgressLogText("Target.Directory") & ApplicationDestDir & CrLf) Select Case DismVersionChecker.ProductMajorPart Case 6 Select Case DismVersionChecker.ProductMinorPart @@ -1443,87 +1174,65 @@ Public Class ProgressPanel CommandArgs = "/logpath=" & Quote & Application.StartupPath & "\logs\" & GetCurrentDateAndTime(Now) & Quote & " /english /apply-image /imagefile=" & Quote & ApplicationSourceImg & Quote & " /index=" & ApplicationIndex End Select ' Detect additional options and set CommandArgs - CommandArgs &= " /applydir=" & Quote & ApplicationDestDir & Quote + Dim DestinationIsRooted As Boolean = Path.GetPathRoot(ApplicationDestDir) = ApplicationDestDir + Dim DestinationPath As String = If(DestinationIsRooted, ApplicationDestDir, Quote & ApplicationDestDir & Quote) + CommandArgs &= " /applydir=" & DestinationPath If ApplicationCheckInt Then - LogView.AppendText("- Verify image integrity? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Verify.Image.Integrity.Yes") & CrLf) CommandArgs &= " /checkintegrity" Else - LogView.AppendText("- Verify image integrity? No" & CrLf) + LogView.AppendText(ProgressLogText("Verify.Image.Integrity.No") & CrLf) End If If ApplicationVerify Then - LogView.AppendText("- Check for file errors? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Check.For.File.Errors.Yes") & CrLf) CommandArgs &= " /verify" Else - LogView.AppendText("- Check for file errors? No" & CrLf) + LogView.AppendText(ProgressLogText("Check.For.File.Errors.No") & CrLf) End If If ApplicationReparsePt Then - LogView.AppendText("- Use reparse point tag fix? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Use.Reparse.Point.Tag.Fix.Yes") & CrLf) Else - LogView.AppendText("- Use reparse point tag fix? No" & CrLf) + LogView.AppendText(ProgressLogText("Use.Reparse.Point.Tag.Fix.No") & CrLf) CommandArgs &= " /norpfix" End If If ApplicationSWMPattern = "" Then - LogView.AppendText("- Split WIM (SWM) file pattern: not specified/not using SWM file" & CrLf) + LogView.AppendText(ProgressLogText("Split.WIM.SWM.File.Pattern.Not.Specified.Not") & CrLf) Else - LogView.AppendText("- Split WIM (SWM) file pattern: " & ApplicationSWMPattern & CrLf) + LogView.AppendText(ProgressLogText("Split.WIM.SWM.File.Pattern") & ApplicationSWMPattern & CrLf) CommandArgs &= " /swmfile=" & ApplicationSWMPattern End If If ApplicationValidateForTD Then - LogView.AppendText("- Validate for Trusted Desktop? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Validate.For.Trusted.Desktop.Yes") & CrLf) CommandArgs &= " /confirmtrustedfile" Else - LogView.AppendText("- Validate for Trusted Desktop? No/Not supported" & CrLf) + LogView.AppendText(ProgressLogText("Validate.For.Trusted.Desktop.No.Not.Supported") & CrLf) End If If ApplicationUseWimBoot Then - LogView.AppendText("- Apply using WIMBoot configuration? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Apply.Using.WIMBOOT.Configuration.Yes") & CrLf) CommandArgs &= " /wimboot" Else - LogView.AppendText("- Apply using WIMBoot configuration? No" & CrLf) + LogView.AppendText(ProgressLogText("Apply.Using.WIMBOOT.Configuration.No") & CrLf) End If If ApplicationCompactMode Then - LogView.AppendText("- Use Compact mode? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Use.Compact.Mode.Yes") & CrLf) CommandArgs &= " /compact" Else - LogView.AppendText("- Use Compact mode? No" & CrLf) + LogView.AppendText(ProgressLogText("Use.Compact.Mode.No") & CrLf) End If If ApplicationUseExtAttr Then - LogView.AppendText("- Apply using extended attributes? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Apply.Using.Extended.Attributes.Yes") & CrLf) CommandArgs &= " /ea" Else - LogView.AppendText("- Apply using extended attributes? No" & CrLf) + LogView.AppendText(ProgressLogText("Apply.Using.Extended.Attributes.No") & CrLf) End If RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.ApplyImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -1533,45 +1242,12 @@ Public Class ProgressPanel DynaLog.LogMessage("- Destination image: " & Quote & FFUCaptureDestinationFfuImage & Quote) DynaLog.LogMessage("- Destination image name: " & Quote & FFUCaptureName & Quote) DynaLog.LogMessage("- Destination image description: " & Quote & FFUCaptureDescription & Quote) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Capturing image..." - currentTask.Text = "Capturing specified directory into a new image..." - Case "ESN" - allTasks.Text = "Capturando imagen..." - currentTask.Text = "Capturando directorio especificado en una nueva imagen..." - Case "FRA" - allTasks.Text = "Capture de l'image en cours..." - currentTask.Text = "Capture du répertoire spécifié dans une nouvelle image en cours..." - Case "PTB", "PTG" - allTasks.Text = "Capturar imagem..." - currentTask.Text = "Capturar o diretório especificado para uma nova imagem..." - Case "ITA" - allTasks.Text = "Cattura immagine..." - currentTask.Text = "Cattura cartella specificata in una nuova immagine..." - End Select - Case 1 - allTasks.Text = "Capturing image..." - currentTask.Text = "Capturing specified directory into a new image..." - Case 2 - allTasks.Text = "Capturando imagen..." - currentTask.Text = "Capturando directorio especificado en una nueva imagen..." - Case 3 - allTasks.Text = "Capture de l'image en cours..." - currentTask.Text = "Capture du répertoire spécifié dans une nouvelle image en cours..." - Case 4 - allTasks.Text = "Capturar imagem..." - currentTask.Text = "Capturar o diretório especificado para uma nova imagem..." - Case 5 - allTasks.Text = "Cattura immagine..." - currentTask.Text = "Cattura cartella specificata in una nuova immagine..." - End Select - LogView.AppendText(CrLf & "Capturing directory..." & CrLf & "Options:" & CrLf & - "- Source directory: " & FFUCaptureSourceDrive & CrLf & - "- Destination image: " & FFUCaptureDestinationFfuImage & CrLf & - "- Captured image name: " & FFUCaptureName & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.CaptureFfuImage")("CapturingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.CaptureFfuImage")("CaptureDir.Button") + LogView.AppendText(CrLf & ProgressLogText("Capturing.Directory") & CrLf & ProgressLogText("Options") & CrLf & + ProgressLogText("Source.Directory") & FFUCaptureSourceDrive & CrLf & + ProgressLogText("Destination.Image") & FFUCaptureDestinationFfuImage & CrLf & + ProgressLogText("Captured.Image.Name") & FFUCaptureName & CrLf) Select Case DismVersionChecker.ProductMajorPart Case 6 Select Case DismVersionChecker.ProductMinorPart @@ -1585,52 +1261,28 @@ Public Class ProgressPanel End Select ' Get additional options If FFUCaptureDescription = "" Then - LogView.AppendText("- Captured image description: none specified" & CrLf) + LogView.AppendText(ProgressLogText("Captured.Image.Description.None.Specified") & CrLf) Else DynaLog.LogMessage("A description has been provided.") - LogView.AppendText("- Captured image description: " & Quote & FFUCaptureDescription & Quote & CrLf) + LogView.AppendText(ProgressLogText("Captured.Image.Description") & Quote & FFUCaptureDescription & Quote & CrLf) CommandArgs &= " /description=" & Quote & FFUCaptureDescription & Quote End If If FFUCaptureCompressType = 0 Then - LogView.AppendText("- Compression type: none" & CrLf) + LogView.AppendText(ProgressLogText("Compression.Type.None") & CrLf) CommandArgs &= " /compress=none" ElseIf FFUCaptureCompressType = 1 Then - LogView.AppendText("- Compression type: default" & CrLf) + LogView.AppendText(ProgressLogText("Compression.Type.Default") & CrLf) CommandArgs &= " /compress=default" End If - LogView.AppendText(CrLf & "Capturing image...") + LogView.AppendText(CrLf & ProgressLogText("Capturing.Image")) RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.CaptureFfuImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -1653,45 +1305,12 @@ Public Class ProgressPanel DynaLog.LogMessage("- Use reparse point tag fix? " & If(CaptureReparsePt, "Yes", "No")) DynaLog.LogMessage("- Capture extended attributes (EAs)? " & If(CaptureExtendedAttributes, "Yes", "No")) DynaLog.LogMessage("- Capture compression level type: " & CaptureCompressType) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Capturing image..." - currentTask.Text = "Capturing specified directory into a new image..." - Case "ESN" - allTasks.Text = "Capturando imagen..." - currentTask.Text = "Capturando directorio especificado en una nueva imagen..." - Case "FRA" - allTasks.Text = "Capture de l'image en cours..." - currentTask.Text = "Capture du répertoire spécifié dans une nouvelle image en cours..." - Case "PTB", "PTG" - allTasks.Text = "Capturar imagem..." - currentTask.Text = "Capturar o diretório especificado para uma nova imagem..." - Case "ITA" - allTasks.Text = "Cattura immagine..." - currentTask.Text = "Cattura cartella specificata in una nuova immagine..." - End Select - Case 1 - allTasks.Text = "Capturing image..." - currentTask.Text = "Capturing specified directory into a new image..." - Case 2 - allTasks.Text = "Capturando imagen..." - currentTask.Text = "Capturando directorio especificado en una nueva imagen..." - Case 3 - allTasks.Text = "Capture de l'image en cours..." - currentTask.Text = "Capture du répertoire spécifié dans une nouvelle image en cours..." - Case 4 - allTasks.Text = "Capturar imagem..." - currentTask.Text = "Capturar o diretório especificado para uma nova imagem..." - Case 5 - allTasks.Text = "Cattura immagine..." - currentTask.Text = "Cattura cartella specificata in una nuova immagine..." - End Select - LogView.AppendText(CrLf & "Capturing directory..." & CrLf & "Options:" & CrLf & - "- Source directory: " & CaptureSourceDir & CrLf & - "- Destination image: " & CaptureDestinationImage & CrLf & - "- Captured image name: " & CaptureName & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.CaptureImage")("CapturingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.CaptureImage")("CaptureDir.Button") + LogView.AppendText(CrLf & ProgressLogText("Capturing.Directory") & CrLf & ProgressLogText("Options") & CrLf & + ProgressLogText("Source.Directory") & CaptureSourceDir & CrLf & + ProgressLogText("Destination.Image") & CaptureDestinationImage & CrLf & + ProgressLogText("Captured.Image.Name") & CaptureName & CrLf) Select Case DismVersionChecker.ProductMajorPart Case 6 Select Case DismVersionChecker.ProductMinorPart @@ -1705,148 +1324,91 @@ Public Class ProgressPanel End Select ' Get additional options If CaptureDescription = "" Then - LogView.AppendText("- Captured image description: none specified" & CrLf) + LogView.AppendText(ProgressLogText("Captured.Image.Description.None.Specified") & CrLf) Else DynaLog.LogMessage("A description has been provided.") - LogView.AppendText("- Captured image description: " & Quote & CaptureDescription & Quote & CrLf) + LogView.AppendText(ProgressLogText("Captured.Image.Description") & Quote & CaptureDescription & Quote & CrLf) CommandArgs &= " /description=" & Quote & CaptureDescription & Quote End If If CaptureWimScriptConfig = "" Then DynaLog.LogMessage("No configuration list file has been specified.") - LogView.AppendText("- Configuration list file: not specified" & CrLf) + LogView.AppendText(ProgressLogText("Configuration.List.File.Not.Specified") & CrLf) Else DynaLog.LogMessage("A configuration list file has been specified. Checking if it exists...") - LogView.AppendText("- Configuration list file: " & CaptureWimScriptConfig & CrLf) + LogView.AppendText(ProgressLogText("Configuration.List.File") & CaptureWimScriptConfig & CrLf) ' Possibly, the file may have been deleted after being specified. Determine whether it still exists If File.Exists(CaptureWimScriptConfig) Then CommandArgs &= " /configfile=" & Quote & CaptureWimScriptConfig & Quote Else DynaLog.LogMessage("The configuration list file does not exist in the file system and will be skipped.") - LogView.AppendText(" WARNING: the configuration list file does not exist in the file system. Skipping file..." & CrLf) + LogView.AppendText(ProgressLogText("WARNING.The.Configuration.List.File.Does.Not.Exist") & CrLf) End If End If If CaptureCompressType = 0 Then - LogView.AppendText("- Compression type: none" & CrLf) + LogView.AppendText(ProgressLogText("Compression.Type.None") & CrLf) CommandArgs &= " /compress=none" ElseIf CaptureCompressType = 1 Then - LogView.AppendText("- Compression type: fast" & CrLf) + LogView.AppendText(ProgressLogText("Compression.Type.Fast") & CrLf) CommandArgs &= " /compress=fast" ElseIf CaptureCompressType = 2 Then - LogView.AppendText("- Compression type: maximum" & CrLf) + LogView.AppendText(ProgressLogText("Compression.Type.Maximum") & CrLf) CommandArgs &= " /compress=max" End If If CaptureBootable Then - LogView.AppendText("- Mark image as bootable? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Mark.Image.As.Bootable.Yes") & CrLf) CommandArgs &= " /bootable" Else - LogView.AppendText("- Mark image as bootable? No" & CrLf) + LogView.AppendText(ProgressLogText("Mark.Image.As.Bootable.No") & CrLf) End If If CaptureCheckIntegrity Then - LogView.AppendText("- Check image integrity? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Check.Image.Integrity.Yes") & CrLf) CommandArgs &= " /checkintegrity" Else - LogView.AppendText("- Check image integrity? No" & CrLf) + LogView.AppendText(ProgressLogText("Check.Image.Integrity.No") & CrLf) End If If CaptureVerify Then - LogView.AppendText("- Verify file errors? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Verify.File.Errors.Yes") & CrLf) CommandArgs &= " /verify" Else - LogView.AppendText("- Verify file errors? No" & CrLf) + LogView.AppendText(ProgressLogText("Verify.File.Errors.No") & CrLf) End If If CaptureReparsePt Then - LogView.AppendText("- Use the Reparse Point tag fix? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Use.The.Reparse.Point.Tag.Fix.Yes") & CrLf) Else - LogView.AppendText("- Use the Reparse Point tag fix? No" & CrLf) + LogView.AppendText(ProgressLogText("Use.The.Reparse.Point.Tag.Fix.No") & CrLf) CommandArgs &= " /norpfix" End If If CaptureUseWimBoot Then - LogView.AppendText("- Append with WIMBoot configuration? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Append.With.WIMBOOT.Configuration.Yes") & CrLf) CommandArgs &= " /wimboot" Else - LogView.AppendText("- Append with WIMBoot configuration? No" & CrLf) + LogView.AppendText(ProgressLogText("Append.With.WIMBOOT.Configuration.No") & CrLf) End If If CaptureExtendedAttributes Then - LogView.AppendText("- Capture extended attributes? Yes" & CrLf) + LogView.AppendText(ProgressLogText("Capture.Extended.Attributes.Yes") & CrLf) CommandArgs &= " /ea" Else - LogView.AppendText("- Capture extended attributes? No" & CrLf) + LogView.AppendText(ProgressLogText("Capture.Extended.Attributes.No") & CrLf) End If - LogView.AppendText(CrLf & "Capturing image...") + LogView.AppendText(CrLf & ProgressLogText("Capturing.Image")) RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.CaptureImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub Private Sub CleanupMountpoints() DynaLog.LogMessage("Cleaning up mount points by deleting resources from old or corrupted images...") DynaLog.LogMessage("This does not require any additional options and invokes an API call. This will take some time depending on your system performance.") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Cleaning up mount points..." - currentTask.Text = "Deleting resources from old or corrupted images..." - Case "ESN" - allTasks.Text = "Limpiando puntos de montaje..." - currentTask.Text = "Eliminando recursos de imágenes antiguas o corruptas..." - Case "FRA" - allTasks.Text = "Nettoyage des points de montage en cours..." - currentTask.Text = "Suppression des ressources des images anciennes ou corrompues en cours..." - Case "PTB", "PTG" - allTasks.Text = "Limpeza de pontos de montagem..." - currentTask.Text = "Eliminar recursos de imagens antigas ou corrompidas..." - Case "ITA" - allTasks.Text = "Pulizia punti montaggio..." - currentTask.Text = "Eliminazione risorse da immagini vecchie o corrotte..." - End Select - Case 1 - allTasks.Text = "Cleaning up mount points..." - currentTask.Text = "Deleting resources from old or corrupted images..." - Case 2 - allTasks.Text = "Limpiando puntos de montaje..." - currentTask.Text = "Eliminando recursos de imágenes antiguas o corruptas..." - Case 3 - allTasks.Text = "Nettoyage des points de montage en cours..." - currentTask.Text = "Suppression des ressources des images anciennes ou corrompues en cours..." - Case 4 - allTasks.Text = "Limpeza de pontos de montagem..." - currentTask.Text = "Eliminar recursos de imagens antigas ou corrompidas..." - Case 5 - allTasks.Text = "Pulizia punti montaggio..." - currentTask.Text = "Eliminazione risorse da immagini vecchie o corrotte..." - End Select - LogView.AppendText(CrLf & "Cleaning up mount points..." & CrLf & CrLf & - "This can take some time, depending on the drives connected to this system.") + allTasks.Text = LocalizationService.ForSection("Progress.CleanupMounts")("Cleaning.Up.Mount.Button") + currentTask.Text = LocalizationService.ForSection("Progress.CleanupMounts")("Deleting.Corrupted.Button") + LogView.AppendText(CrLf & ProgressLogText("Cleaning.Up.Mount.Points") & CrLf & CrLf & + ProgressLogText("This.Can.Take.Some.Time.Depending.On.The")) Try DynaLog.LogMessage("Initializing API...") DismApi.Initialize(If(LogLevel = 1, DismLogLevel.LogErrors, If(LogLevel = 2, DismLogLevel.LogErrorsWarnings, If(LogLevel = 3, DismLogLevel.LogErrorsWarningsInfo, DismLogLevel.LogErrorsWarningsInfo))), If(AutoLogs, Application.StartupPath & "\logs\" & GetCurrentDateAndTime(Now), LogPath)) @@ -1865,40 +1427,16 @@ Public Class ProgressPanel End Try CurrentPB.Value = 50 AllPB.Value = CurrentPB.Value - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.CleanupMounts")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) If errCode Is Nothing Then errCode = 0 IsSuccessful = True End If If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -1940,49 +1478,16 @@ Public Class ProgressPanel Private Sub CommitImage() DynaLog.LogMessage("Saving changes to the Windows image...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Committing image..." - currentTask.Text = "Saving changes to the image..." - Case "ESN" - allTasks.Text = "Guardando imagen..." - currentTask.Text = "Guardando cambios en la imagen..." - Case "FRA" - allTasks.Text = "Sauvegarde de l'image en cours..." - currentTask.Text = "Sauvegarde des modifications apportées à l'image en cours..." - Case "PTB", "PTG" - allTasks.Text = "A confirmar a imagem..." - currentTask.Text = "Guardar alterações na imagem..." - Case "ITA" - allTasks.Text = "Modifica immagine..." - currentTask.Text = "Salvataggio modifiche nell'immagine..." - End Select - Case 1 - allTasks.Text = "Committing image..." - currentTask.Text = "Saving changes to the image..." - Case 2 - allTasks.Text = "Guardando imagen..." - currentTask.Text = "Guardando cambios en la imagen..." - Case 3 - allTasks.Text = "Sauvegarde de l'image en cours..." - currentTask.Text = "Sauvegarde des modifications apportées à l'image en cours..." - Case 4 - allTasks.Text = "A confirmar a imagem..." - currentTask.Text = "Guardar alterações na imagem..." - Case 5 - allTasks.Text = "Modifica immagine..." - currentTask.Text = "Salvataggio modifiche nell'immagine..." - End Select + allTasks.Text = LocalizationService.ForSection("Progress.CommitImage")("CommittingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.CommitImage")("Saving.Changes.Image.Button") If ReferenceImage IsNot Nothing Then If Path.GetExtension(ReferenceImage.ImageFile).Equals(".ffu", StringComparison.OrdinalIgnoreCase) Then CommitFfu() Exit Sub End If End If - LogView.AppendText(CrLf & "Saving changes..." & CrLf & "Options:" & CrLf & - "- Mount directory: " & MountDir) + LogView.AppendText(CrLf & ProgressLogText("Saving.Changes") & CrLf & ProgressLogText("Options") & CrLf & + ProgressLogText("Mount.Directory") & MountDir) Select Case DismVersionChecker.ProductMajorPart Case 6 Select Case DismVersionChecker.ProductMinorPart @@ -1996,37 +1501,13 @@ Public Class ProgressPanel End Select ' TODO: Add additional options later RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.CommitImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -2038,110 +1519,29 @@ Public Class ProgressPanel RunOps(21) AllPB.Value = AllPB.Maximum / taskCount currentTCont += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case "ESN" - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case "FRA" - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case "ITA" - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select - Case 1 - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case 2 - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case 3 - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case 4 - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case 5 - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select + taskCountLbl.Text = LocalizationService.ForSection("Progress").Format("Tasks.Label", currentTCont, taskCount) End If - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Deleting images..." - currentTask.Text = "Preparing to remove volume images..." - Case "ESN" - allTasks.Text = "Eliminando imágenes..." - currentTask.Text = "Preparando para eliminar imágenes de volumen..." - Case "FRA" - allTasks.Text = "Suppression des images en cours..." - currentTask.Text = "Préparation de la suppression des images de volume en cours..." - Case "PTB", "PTG" - allTasks.Text = "A eliminar imagens..." - currentTask.Text = "A preparar a remoção de imagens de volume..." - Case "ITA" - allTasks.Text = "Eliminazione immagini..." - currentTask.Text = "Preparazione rimozione immagini volume..." - End Select - Case 1 - allTasks.Text = "Deleting images..." - currentTask.Text = "Preparing to remove volume images..." - Case 2 - allTasks.Text = "Eliminando imágenes..." - currentTask.Text = "Preparando para eliminar imágenes de volumen..." - Case 3 - allTasks.Text = "Suppression des images en cours..." - currentTask.Text = "Préparation de la suppression des images de volume en cours..." - Case 4 - allTasks.Text = "A eliminar imagens..." - currentTask.Text = "A preparar a remoção de imagens de volume..." - Case 5 - allTasks.Text = "Eliminazione immagini..." - currentTask.Text = "Preparazione rimozione immagini volume..." - End Select + allTasks.Text = LocalizationService.ForSection("Progress.RemoveVolumes")("DeletingImages.Button") + currentTask.Text = LocalizationService.ForSection("Progress.RemoveVolumes")("Prepare.Remove.Button") DynaLog.LogMessage("Source image to remove indexes from: " & Quote & imgIndexDeletionSourceImg & Quote) - LogView.AppendText(CrLf & "Removing volume images from file..." & CrLf & - "Options:" & CrLf & - "- Source image: " & imgIndexDeletionSourceImg & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Removing.Volume.Images.From.File") & CrLf & + ProgressLogText("Options") & CrLf & + ProgressLogText("Source.Image") & imgIndexDeletionSourceImg & CrLf) If imgIndexDeletionIntCheck Then - LogView.AppendText("- Check image integrity? Yes") + LogView.AppendText(ProgressLogText("Check.Image.Integrity.Yes")) Else - LogView.AppendText("- Check image integrity? No") + LogView.AppendText(ProgressLogText("Check.Image.Integrity.No")) End If CurrentPB.Maximum = imgIndexDeletionCount ' Removing volume images LogView.AppendText(CrLf & - "Removing volume images..." & CrLf) + ProgressLogText("Removing.Volume.Images") & CrLf) For x = 0 To Array.LastIndexOf(imgIndexDeletionNames, imgIndexDeletionLastName) If x + 1 > CurrentPB.Maximum Then Exit For DynaLog.LogMessage("Volume image to remove: " & Quote & imgIndexDeletionNames(x) & Quote) DynaLog.LogMessage("Processing task...") CurrentPB.Value = x + 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Removing volume image " & Quote & imgIndexDeletionNames(x) & Quote & "..." - Case "ESN" - currentTask.Text = "Eliminando imagen de volumen " & Quote & imgIndexDeletionNames(x) & Quote & "..." - Case "FRA" - currentTask.Text = "Suppression de l'image de volume " & Quote & imgIndexDeletionNames(x) & Quote & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "Remover a imagem do volume " & Quote & imgIndexDeletionNames(x) & Quote & "..." - Case "ITA" - currentTask.Text = "Rimozione immagine volume " & Quote & imgIndexDeletionNames(x) & Quote & "..." - End Select - Case 1 - currentTask.Text = "Removing volume image " & Quote & imgIndexDeletionNames(x) & Quote & "..." - Case 2 - currentTask.Text = "Eliminando imagen de volumen " & Quote & imgIndexDeletionNames(x) & Quote & "..." - Case 3 - currentTask.Text = "Suppression de l'image de volume " & Quote & imgIndexDeletionNames(x) & Quote & " en cours..." - Case 4 - currentTask.Text = "Remover a imagem do volume " & Quote & imgIndexDeletionNames(x) & Quote & "..." - Case 5 - currentTask.Text = "Rimozione immagine volume " & Quote & imgIndexDeletionNames(x) & Quote & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.RemoveVolumes").Format("Volume.Image.Item", imgIndexDeletionNames(x)) LogView.AppendText(CrLf & "- " & imgIndexDeletionNames(x) & "...") CommandArgs = "/logpath=" & Quote & Application.StartupPath & "\logs\" & GetCurrentDateAndTime(Now) & Quote & " /english /delete-image /imagefile=" & Quote & imgIndexDeletionSourceImg & Quote & " /name=" & Quote & imgIndexDeletionNames(x) & Quote @@ -2150,9 +1550,9 @@ Public Class ProgressPanel End If RunProcess(DismProgram, CommandArgs) If Hex(DismExitCode).Length < 8 Then - LogView.AppendText(" Error level : " & DismExitCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & DismExitCode) Else - LogView.AppendText(" Error level : 0x" & Hex(DismExitCode)) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & Hex(DismExitCode)) End If Next CurrentPB.Value = CurrentPB.Maximum @@ -2175,64 +1575,31 @@ Public Class ProgressPanel DynaLog.LogMessage("- Mark the image as bootable? " & If(imgExportMarkBootable, "Yes", "No")) DynaLog.LogMessage("- Use WIMBoot configuration? " & If(imgExportUseWimBoot, "Yes", "No")) DynaLog.LogMessage("- Check image integrity? " & If(imgExportCheckIntegrity, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Exporting image..." - currentTask.Text = "Exporting specified image..." - Case "ESN" - allTasks.Text = "Exportando imagen..." - currentTask.Text = "Exportando imagen especificada..." - Case "FRA" - allTasks.Text = "Exportation de l'image en cours..." - currentTask.Text = "Exportation de l'image spécifiée en cours..." - Case "PTB" - allTasks.Text = "Exportar imagem..." - currentTask.Text = "Exportar imagem especificada..." - Case "ITA" - allTasks.Text = "Esportazione immagine..." - currentTask.Text = "Esportazione immagine specificata..." - End Select - Case 1 - allTasks.Text = "Exporting image..." - currentTask.Text = "Exporting specified image..." - Case 2 - allTasks.Text = "Exportando imagen..." - currentTask.Text = "Exportando imagen especificada..." - Case 3 - allTasks.Text = "Exportation de l'image en cours..." - currentTask.Text = "Exportation de l'image spécifiée en cours..." - Case 4 - allTasks.Text = "Exportar imagem..." - currentTask.Text = "Exportar imagem especificada..." - Case 5 - allTasks.Text = "Esportazione immagine..." - currentTask.Text = "Esportazione immagine specificata..." - End Select - LogView.AppendText(CrLf & "Exporting the specified image to a destination image..." & CrLf & "Options:" & CrLf & - "- Source image file: " & imgExportSourceImage & CrLf & - "- Source image index: " & imgExportSourceIndex & CrLf & - "- Destination image file: " & imgExportDestinationImage & CrLf & - If(imgExportDestinationUseCustomName, "- Destination image name: " & imgExportDestinationName, "")) + allTasks.Text = LocalizationService.ForSection("Progress.ExportImage")("ExportingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ExportImage")("Exporting.Image.Button") + LogView.AppendText(CrLf & ProgressLogText("Exporting.The.Specified.Image.To.A.Destination.Image") & CrLf & ProgressLogText("Options") & CrLf & + ProgressLogText("Source.Image.File") & imgExportSourceImage & CrLf & + ProgressLogText("Source.Image.Index") & imgExportSourceIndex & CrLf & + ProgressLogText("Destination.Image.File") & imgExportDestinationImage & CrLf & + If(imgExportDestinationUseCustomName, ProgressLogText("Destination.Image.Name") & imgExportDestinationName, "")) Select Case imgExportCompressType Case 0 - LogView.AppendText(CrLf & "- Compression type: no compression") + LogView.AppendText(CrLf & ProgressLogText("Compression.Type.No.Compression")) Case 1 - LogView.AppendText(CrLf & "- Compression type: fast compression") + LogView.AppendText(CrLf & ProgressLogText("Compression.Type.Fast.Compression")) Case 2 - LogView.AppendText(CrLf & "- Compression type: maximum compression") + LogView.AppendText(CrLf & ProgressLogText("Compression.Type.Maximum.Compression")) Case 3 - LogView.AppendText(CrLf & "- Compression type: ESD conversion (recovery)") + LogView.AppendText(CrLf & ProgressLogText("Compression.Type.ESD.Conversion.Recovery")) End Select - LogView.AppendText(CrLf & "- Mark the image as bootable? " & If(imgExportMarkBootable, "Yes", "No") & CrLf & - "- Append image with WIMBoot configuration? " & If(imgExportUseWimBoot, "Yes", "No") & CrLf & - "- Check image integrity before exporting the image? " & If(imgExportCheckIntegrity, "Yes", "No")) + LogView.AppendText(CrLf & ProgressLogText("Mark.The.Image.As.Bootable") & If(imgExportMarkBootable, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Append.Image.With.WIMBOOT.Configuration") & If(imgExportUseWimBoot, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Check.Image.Integrity.Before.Exporting.The.Image") & If(imgExportCheckIntegrity, ProgressLogText("Yes"), ProgressLogText("No"))) ' Show information regarding SWM files DynaLog.LogMessage("Extension of source image file: " & Path.GetExtension(imgExportSourceImage)) If Path.GetExtension(imgExportSourceImage).EndsWith("swm", StringComparison.OrdinalIgnoreCase) Then DynaLog.LogMessage("We are dealing with SWM files. Showing why we mark all of them for export...") - LogView.AppendText(CrLf & CrLf & "NOTE: the source image contains an asterisk sign (*) in the file name to merge all SWM files") + LogView.AppendText(CrLf & CrLf & ProgressLogText("NOTE.The.Source.Image.Contains.An.Asterisk.Sign")) End If ' Configure basic command arguments Select Case DismVersionChecker.ProductMajorPart @@ -2264,37 +1631,13 @@ Public Class ProgressPanel If imgExportUseWimBoot Then CommandArgs &= " /wimboot" If imgExportCheckIntegrity Then CommandArgs &= " /checkintegrity" RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.ExportImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -2319,45 +1662,12 @@ Public Class ProgressPanel DynaLog.LogMessage("- Mount with read-only permissions? " & If(isReadOnly, "Yes", "No")) DynaLog.LogMessage("- Optimize mount times? " & If(isOptimized, "Yes", "No")) DynaLog.LogMessage("- Check image integrity? " & If(isIntegrityTested, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Mounting image..." - currentTask.Text = "Mounting specified image..." - Case "ESN" - allTasks.Text = "Montando imagen..." - currentTask.Text = "Montando imagen especificada..." - Case "FRA" - allTasks.Text = "Montage de l'image en cours..." - currentTask.Text = "Montage de l'image spécifiée en cours..." - Case "PTB", "PTG" - allTasks.Text = "Montagem de imagem..." - currentTask.Text = "Montagem da imagem especificada..." - Case "ITA" - allTasks.Text = "Montaggio immagine..." - currentTask.Text = "Montaggio immagine specificata..." - End Select - Case 1 - allTasks.Text = "Mounting image..." - currentTask.Text = "Mounting specified image..." - Case 2 - allTasks.Text = "Montando imagen..." - currentTask.Text = "Montando imagen especificada..." - Case 3 - allTasks.Text = "Montage de l'image en cours..." - currentTask.Text = "Montage de l'image spécifiée en cours..." - Case 4 - allTasks.Text = "Montagem de imagem..." - currentTask.Text = "Montagem da imagem especificada..." - Case 5 - allTasks.Text = "Montaggio immagine..." - currentTask.Text = "Montaggio immagine specificata..." - End Select - LogView.AppendText(CrLf & "Mounting image..." & CrLf & "Options:" & CrLf & - "- Image file: " & SourceImg & CrLf & - "- Image index: " & ImgIndex & CrLf & - "- Mount point: " & MountDir) + allTasks.Text = LocalizationService.ForSection("Progress.MountImage")("MountingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.MountImage")("Mounting.Image.Button") + LogView.AppendText(CrLf & ProgressLogText("Mounting.Image") & CrLf & ProgressLogText("Options") & CrLf & + ProgressLogText("Image.File") & SourceImg & CrLf & + ProgressLogText("Image.Index") & ImgIndex & CrLf & + ProgressLogText("Mount.Point") & MountDir) Try If Not isReadOnly AndAlso (File.GetAttributes(SourceImg) And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then DynaLog.LogMessage("Source image contains read-only flag. Attempting to remove it...") @@ -2380,56 +1690,32 @@ Public Class ProgressPanel CommandArgs = "/logpath=" & Quote & Application.StartupPath & "\logs\" & GetCurrentDateAndTime(Now) & Quote & " /english /mount-image /imagefile=" & Quote & SourceImg & Quote & " /index=" & ImgIndex & " /mountdir=" & Quote & MountDir & Quote End Select If isReadOnly Then - LogView.AppendText(CrLf & "- Mount image with read-only permissions? Yes") + LogView.AppendText(CrLf & ProgressLogText("Mount.Image.With.Read.Only.Permissions.Yes")) CommandArgs &= " /readonly" Else - LogView.AppendText(CrLf & "- Mount image with read-only permissions? No") + LogView.AppendText(CrLf & ProgressLogText("Mount.Image.With.Read.Only.Permissions.No")) End If If isOptimized Then - LogView.AppendText(CrLf & "- Optimize mount time? Yes") + LogView.AppendText(CrLf & ProgressLogText("Optimize.Mount.Time.Yes")) CommandArgs &= " /optimize" Else - LogView.AppendText(CrLf & "- Optimize mount time? No") + LogView.AppendText(CrLf & ProgressLogText("Optimize.Mount.Time.No")) End If If isIntegrityTested Then - LogView.AppendText(CrLf & "- Check image integrity? Yes") + LogView.AppendText(CrLf & ProgressLogText("Check.Image.Integrity.Yes")) CommandArgs &= " /checkintegrity" Else - LogView.AppendText(CrLf & "- Check image integrity? No") + LogView.AppendText(CrLf & ProgressLogText("Check.Image.Integrity.No")) End If RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta del livello di errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.MountImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) End If GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -2437,11 +1723,11 @@ Public Class ProgressPanel DynaLog.LogMessage("Optimizing the Windows FFU image...") DynaLog.LogMessage("- Source image to optimize: " & Quote & FFUOptimizationSource & Quote) DynaLog.LogMessage("- Partition to optimize: " & FFUOptimizationCustomPartitionNum & If(FFUOptimizationCustomPartitionNum = 0, " (Default partition in the FFU will be optimized)", "")) - allTasks.Text = "Optimizing image..." - currentTask.Text = "Optimizing Windows image..." - LogView.AppendText(CrLf & "Optimizing Windows image..." & CrLf & - "- Source image to optimize: " & Quote & FFUOptimizationSource & Quote & CrLf & - "- Partition to optimize: " & FFUOptimizationCustomPartitionNum & If(FFUOptimizationCustomPartitionNum = 0, " (Default partition in the FFU will be optimized)", "") & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.Operation")("OptimizingImage.Label") + currentTask.Text = LocalizationService.ForSection("Progress.Operation")("Optimizing.Windows.Label") + LogView.AppendText(CrLf & ProgressLogText("Optimizing.Windows.Image") & CrLf & + ProgressLogText("Source.Image.To.Optimize") & Quote & FFUOptimizationSource & Quote & CrLf & + ProgressLogText("Partition.To.Optimize") & FFUOptimizationCustomPartitionNum & If(FFUOptimizationCustomPartitionNum = 0, ProgressLogText("Default.Partition.In.The.FFU.Will.Be.Optimized"), "") & CrLf) ' Check the DISM version, as the Windows 7-8.1 versions don't allow this action Select Case DismVersionChecker.ProductMajorPart Case 6 @@ -2453,16 +1739,16 @@ Public Class ProgressPanel If FFUOptimizationCustomPartitionNum > 0 Then CommandArgs &= " /partitionnumber=" & FFUOptimizationCustomPartitionNum RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End Sub @@ -2471,11 +1757,11 @@ Public Class ProgressPanel DynaLog.LogMessage("Optimizing the Windows image...") DynaLog.LogMessage("- Source image to optimize: " & Quote & OptimizationSource & Quote) DynaLog.LogMessage("- Optimization mode: " & OptimizationMode) - allTasks.Text = "Optimizing image..." - currentTask.Text = "Optimizing Windows image..." - LogView.AppendText(CrLf & "Optimizing Windows image..." & CrLf & - "- Source image to optimize: " & Quote & OptimizationSource & Quote & CrLf & - "- Optimization mode: " & If(OptimizationMode = 0, "Reduce online configuration time", "Prepare image for WIMBoot system") & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.Operation")("OptimizingImage.Label") + currentTask.Text = LocalizationService.ForSection("Progress.Operation")("Optimizing.Windows.Label") + LogView.AppendText(CrLf & ProgressLogText("Optimizing.Windows.Image") & CrLf & + ProgressLogText("Source.Image.To.Optimize") & Quote & OptimizationSource & Quote & CrLf & + ProgressLogText("Optimization.Mode") & If(OptimizationMode = 0, ProgressLogText("Reduce.Online.Configuration.Time"), ProgressLogText("Prepare.Image.For.WIMBOOT.System")) & CrLf) ' Check the DISM version, as the Windows 7-8.1 versions don't allow this action Select Case DismVersionChecker.ProductMajorPart Case 6 @@ -2484,16 +1770,16 @@ Public Class ProgressPanel CommandArgs &= " /image=" & Quote & OptimizationSource & Quote & " /optimize-image " & If(OptimizationMode = 0, "/boot", "/wimboot") End Select RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End Sub @@ -2502,43 +1788,10 @@ Public Class ProgressPanel DynaLog.LogMessage("Reloading the servicing session of the mounted image...") DynaLog.LogMessage("- Mount location of the image file we are interested in reloading: " & Quote & MountDir & Quote) DynaLog.LogMessage("This invokes an API call. This process will take some time depending on your system performance and how big the Windows image is.") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Remounting image..." - currentTask.Text = "Reloading servicing session for mounted image..." - Case "ESN" - allTasks.Text = "Remontando imagen..." - currentTask.Text = "Recargando sesión de servicio para la imagen montada..." - Case "FRA" - allTasks.Text = "Remontage de l'image en cours..." - currentTask.Text = "Rechargement de la session de maintenance pour l'image montée en cours..." - Case "PTB", "PTG" - allTasks.Text = "Remontando imagem..." - currentTask.Text = "Recarregar sessão de manutenção para a imagem montada..." - Case "ITA" - allTasks.Text = "Rimontaggio immagine..." - currentTask.Text = "Ricaricamento sessione assistenza per l'immagine montata..." - End Select - Case 1 - allTasks.Text = "Remounting image..." - currentTask.Text = "Reloading servicing session for mounted image..." - Case 2 - allTasks.Text = "Remontando imagen..." - currentTask.Text = "Recargando sesión de servicio para la imagen montada..." - Case 3 - allTasks.Text = "Remontage de l'image en cours..." - currentTask.Text = "Rechargement de la session de maintenance pour l'image montée en cours..." - Case 4 - allTasks.Text = "Remontando imagem..." - currentTask.Text = "Recarregar sessão de manutenção para a imagem montada..." - Case 5 - allTasks.Text = "Rimontaggio immagine..." - currentTask.Text = "Ricaricamento sessione assistenza per l'immagine montata..." - End Select - LogView.AppendText(CrLf & "Reloading servicing session..." & CrLf & - "- Mount directory: " & MountDir) + allTasks.Text = LocalizationService.ForSection("Progress.RemountImage")("RemountingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.RemountImage")("ReloadSession.Button") + LogView.AppendText(CrLf & ProgressLogText("Reloading.Servicing.Session") & CrLf & + ProgressLogText("Mount.Directory") & MountDir) Try DynaLog.LogMessage("Initializing API...") DismApi.Initialize(If(LogLevel = 1, DismLogLevel.LogErrors, If(LogLevel = 2, DismLogLevel.LogErrorsWarnings, If(LogLevel = 3, DismLogLevel.LogErrorsWarningsInfo, DismLogLevel.LogErrorsWarningsInfo))), If(AutoLogs, Application.StartupPath & "\logs\" & GetCurrentDateAndTime(Now), LogPath)) @@ -2558,40 +1811,16 @@ Public Class ProgressPanel End Try CurrentPB.Value = 50 AllPB.Value = CurrentPB.Value - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.RemountImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) If errCode Is Nothing Then errCode = 0 IsSuccessful = True End If If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -2601,47 +1830,14 @@ Public Class ProgressPanel DynaLog.LogMessage("- Maximum size of split images: " & SFUSplitFileSize & " MB") DynaLog.LogMessage("- Destination of SFU files: " & Quote & SFUSplitTargetFile & Quote) DynaLog.LogMessage("- Check image integrity? " & If(SFUSplitCheckIntegrity, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Splitting image..." - currentTask.Text = "Splitting FFU file..." - Case "ESN" - allTasks.Text = "Dividiendo imagen..." - currentTask.Text = "Dividiendo archivo FFU..." - Case "FRA" - allTasks.Text = "Division de l'image en cours..." - currentTask.Text = "Division du fichier FFU en cours..." - Case "PTB", "PTG" - allTasks.Text = "Dividir imagem..." - currentTask.Text = "Dividir ficheiro FFU..." - Case "ITA" - allTasks.Text = "Divisione immagine..." - currentTask.Text = "Divisione file FFU..." - End Select - Case 1 - allTasks.Text = "Splitting image..." - currentTask.Text = "Splitting FFU file..." - Case 2 - allTasks.Text = "Dividiendo imagen..." - currentTask.Text = "Dividiendo archivo FFU..." - Case 3 - allTasks.Text = "Division de l'image en cours..." - currentTask.Text = "Division du fichier FFU en cours..." - Case 4 - allTasks.Text = "Dividir imagem..." - currentTask.Text = "Dividir ficheiro FFU..." - Case 5 - allTasks.Text = "Divisione immagine..." - currentTask.Text = "Divisione file FFU..." - End Select - LogView.AppendText(CrLf & "Splitting FFU file into SFU files..." & CrLf & - "- Source image file to split: " & Quote & SFUSplitSourceFile & Quote & CrLf & - "- Maximum size of the split images (in MB): " & SFUSplitFileSize & " MB" & CrLf & - "- Name and path of the target SFU file: " & Quote & SFUSplitTargetFile & Quote & CrLf & - "- Check integrity before splitting this image? " & If(SFUSplitCheckIntegrity, "Yes", "No") & CrLf & CrLf & - "Do note that, if the image contains a large file that can't fit within the maximum size, a SFU file may be larger than the rest, to accommodate it." & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.SplitFfuImage")("SplittingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.SplitFfuImage")("Splitting.File.Button") + LogView.AppendText(CrLf & ProgressLogText("Splitting.FFU.File.Into.SFU.Files") & CrLf & + ProgressLogText("Source.Image.File.To.Split") & Quote & SFUSplitSourceFile & Quote & CrLf & + ProgressLogText("Maximum.Size.Of.The.Split.Images.In.MB") & SFUSplitFileSize & " MB" & CrLf & + ProgressLogText("Name.And.Path.Of.The.Target.SFU.File") & Quote & SFUSplitTargetFile & Quote & CrLf & + ProgressLogText("Check.Integrity.Before.Splitting.This.Image") & If(SFUSplitCheckIntegrity, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & CrLf & + ProgressLogText("Do.Note.That.If.The.Image.Contains.A") & CrLf) ' Check the DISM version, as the Windows 7 version doesn't allow this action Select Case DismVersionChecker.ProductMajorPart Case 6 @@ -2655,16 +1851,16 @@ Public Class ProgressPanel CommandArgs &= " /split-image /imagefile=" & Quote & SFUSplitSourceFile & Quote & " /sfufile=" & Quote & SFUSplitTargetFile & Quote & " /filesize=" & SFUSplitFileSize & If(SFUSplitCheckIntegrity, " /checkintegrity", "") End Select RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End Sub @@ -2675,47 +1871,14 @@ Public Class ProgressPanel DynaLog.LogMessage("- Maximum size of split images: " & SWMSplitFileSize & " MB") DynaLog.LogMessage("- Destination of SWM files: " & Quote & SWMSplitTargetFile & Quote) DynaLog.LogMessage("- Check image integrity? " & If(SWMSplitCheckIntegrity, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Splitting image..." - currentTask.Text = "Splitting WIM file..." - Case "ESN" - allTasks.Text = "Dividiendo imagen..." - currentTask.Text = "Dividiendo archivo WIM..." - Case "FRA" - allTasks.Text = "Division de l'image en cours..." - currentTask.Text = "Division du fichier WIM en cours..." - Case "PTB", "PTG" - allTasks.Text = "Dividir imagem..." - currentTask.Text = "Dividir ficheiro WIM..." - Case "ITA" - allTasks.Text = "Divisione immagine..." - currentTask.Text = "Divisione file WIM..." - End Select - Case 1 - allTasks.Text = "Splitting image..." - currentTask.Text = "Splitting WIM file..." - Case 2 - allTasks.Text = "Dividiendo imagen..." - currentTask.Text = "Dividiendo archivo WIM..." - Case 3 - allTasks.Text = "Division de l'image en cours..." - currentTask.Text = "Division du fichier WIM en cours..." - Case 4 - allTasks.Text = "Dividir imagem..." - currentTask.Text = "Dividir ficheiro WIM..." - Case 5 - allTasks.Text = "Divisione immagine..." - currentTask.Text = "Divisione file WIM..." - End Select - LogView.AppendText(CrLf & "Splitting WIM file into SWM files..." & CrLf & - "- Source image file to split: " & Quote & SWMSplitSourceFile & Quote & CrLf & - "- Maximum size of the split images (in MB): " & SWMSplitFileSize & " MB" & CrLf & - "- Name and path of the target SWM file: " & Quote & SWMSplitTargetFile & Quote & CrLf & - "- Check integrity before splitting this image? " & If(SWMSplitCheckIntegrity, "Yes", "No") & CrLf & CrLf & - "Do note that, if the image contains a large file that can't fit within the maximum size, a SWM file may be larger than the rest, to accommodate it." & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.SplitImage")("SplittingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.SplitImage")("Splitting.WIM.File.Button") + LogView.AppendText(CrLf & ProgressLogText("Splitting.WIM.File.Into.SWM.Files") & CrLf & + ProgressLogText("Source.Image.File.To.Split") & Quote & SWMSplitSourceFile & Quote & CrLf & + ProgressLogText("Maximum.Size.Of.The.Split.Images.In.MB") & SWMSplitFileSize & " MB" & CrLf & + ProgressLogText("Name.And.Path.Of.The.Target.SWM.File") & Quote & SWMSplitTargetFile & Quote & CrLf & + ProgressLogText("Check.Integrity.Before.Splitting.This.Image") & If(SWMSplitCheckIntegrity, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & CrLf & + ProgressLogText("Do.Note.That.If.The.Image.Contains.A.2") & CrLf) ' Check the DISM version, as the Windows 7 version doesn't allow this action Select Case DismVersionChecker.ProductMajorPart Case 6 @@ -2729,16 +1892,16 @@ Public Class ProgressPanel CommandArgs &= " /split-image /imagefile=" & Quote & SWMSplitSourceFile & Quote & " /swmfile=" & Quote & SWMSplitTargetFile & Quote & " /filesize=" & SWMSplitFileSize & If(SWMSplitCheckIntegrity, " /checkintegrity", "") End Select RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End Sub @@ -2750,48 +1913,15 @@ Public Class ProgressPanel DynaLog.LogMessage("- Unmount operation (may not reflect actual operation): " & UMountOp) DynaLog.LogMessage(" - Check image integrity before committing changes? " & If(CheckImgIntegrity, "Yes", "No")) DynaLog.LogMessage(" - Append changes to new index? " & If(SaveToNewIndex, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Unmounting image..." - currentTask.Text = "Unmounting image file..." - Case "ESN" - allTasks.Text = "Desmontando imagen..." - currentTask.Text = "Desmontando archivo de imagen..." - Case "FRA" - allTasks.Text = "Démontage de l'image en cours..." - currentTask.Text = "Démontage du fichier d'image en cours..." - Case "PTB", "PTG" - allTasks.Text = "Desmontar imagem..." - currentTask.Text = "Desmontar ficheiro de imagem..." - Case "ITA" - allTasks.Text = "Smontaggio immagine..." - currentTask.Text = "Smontaggio file immagine..." - End Select - Case 1 - allTasks.Text = "Unmounting image..." - currentTask.Text = "Unmounting image file..." - Case 2 - allTasks.Text = "Desmontando imagen..." - currentTask.Text = "Desmontando archivo de imagen..." - Case 3 - allTasks.Text = "Démontage de l'image en cours..." - currentTask.Text = "Démontage du fichier d'image en cours..." - Case 4 - allTasks.Text = "Desmontar imagem..." - currentTask.Text = "Desmontar ficheiro de imagem..." - Case 5 - allTasks.Text = "Smontaggio immagine..." - currentTask.Text = "Smontaggio file immagine..." - End Select + allTasks.Text = LocalizationService.ForSection("Progress.UnmountImage")("UnmountingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.UnmountImage")("Unmounting.ImageFile.Button") If Not UMountLocalDir Then DynaLog.LogMessage("The image that was mounted in the project mount directory will not be unmounted. Using mountdir " & Quote & RandomMountDir & Quote & "...") MountDir = RandomMountDir End If - LogView.AppendText(CrLf & "Unmounting image file from mount point..." & CrLf & - "- Mount directory: " & MountDir & CrLf & - "- Image index: " & UMountImgIndex) + LogView.AppendText(CrLf & ProgressLogText("Unmounting.Image.File.From.Mount.Point") & CrLf & + ProgressLogText("Mount.Directory") & MountDir & CrLf & + ProgressLogText("Image.Index") & UMountImgIndex) Try Select Case DismVersionChecker.ProductMajorPart Case 6 @@ -2817,61 +1947,37 @@ Public Class ProgressPanel End If End Select If UMountOp = 0 Then - LogView.AppendText(CrLf & "- Unmount operation: Commit") + LogView.AppendText(CrLf & ProgressLogText("Unmount.Operation.Commit")) CommandArgs &= " /commit" ElseIf UMountOp = 1 Then - LogView.AppendText(CrLf & "- Unmount operation: Discard") + LogView.AppendText(CrLf & ProgressLogText("Unmount.Operation.Discard")) CommandArgs &= " /discard" End If If UMountOp = 0 Then If CheckImgIntegrity Then - LogView.AppendText(CrLf & "- Check image integrity? Yes") + LogView.AppendText(CrLf & ProgressLogText("Check.Image.Integrity.Yes")) CommandArgs &= " /checkintegrity" Else - LogView.AppendText(CrLf & "- Check image integrity? No") + LogView.AppendText(CrLf & ProgressLogText("Check.Image.Integrity.No")) End If If SaveToNewIndex Then - LogView.AppendText(CrLf & "- Append changes to new index? Yes") + LogView.AppendText(CrLf & ProgressLogText("Append.Changes.To.New.Index.Yes")) CommandArgs &= " /append" Else - LogView.AppendText(CrLf & "- Append changes to new index? No") + LogView.AppendText(CrLf & ProgressLogText("Append.Changes.To.New.Index.No")) End If End If RunProcess(DismProgram, CommandArgs) Catch ex As Exception ' Let's try this before setting things up here End Try - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.UnmountImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -2882,11 +1988,11 @@ Public Class ProgressPanel Private Sub ShowPackageInformation(pkgInfo As DismPackageInfo) LogView.AppendText(CrLf & CrLf & - "- Package name: " & pkgInfo.PackageName & CrLf & - "- Package description: " & pkgInfo.Description & CrLf & - "- Package release type: " & Casters.CastDismReleaseType(pkgInfo.ReleaseType) & CrLf & - "- Package is applicable to this image? " & If(pkgInfo.Applicable, "Yes", "No") & CrLf & - "- Package is already installed? " & If(pkgInfo.PackageState = DismPackageFeatureState.Installed Or pkgInfo.PackageState = DismPackageFeatureState.InstallPending, "Yes", "No") & CrLf) + ProgressLogText("Package.Name") & pkgInfo.PackageName & CrLf & + ProgressLogText("Package.Description") & pkgInfo.Description & CrLf & + ProgressLogText("Package.Release.Type") & Casters.CastDismReleaseType(pkgInfo.ReleaseType) & CrLf & + ProgressLogText("Package.Is.Applicable.To.This.Image") & If(pkgInfo.Applicable, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Package.Is.Already.Installed") & If(pkgInfo.PackageState = DismPackageFeatureState.Installed Or pkgInfo.PackageState = DismPackageFeatureState.InstallPending, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf) End Sub Private Sub CountPackagesToAdd() @@ -2902,10 +2008,10 @@ Public Class ProgressPanel pkgCount += 1 Next DynaLog.LogMessage("Package count: " & pkgCount) - LogView.AppendText(CrLf & "Total number of packages: " & pkgCount) + LogView.AppendText(CrLf & ProgressLogText("Total.Number.Of.Packages") & pkgCount) Catch ex As Exception DynaLog.LogMessage("Could not get packages in all subdirectories. Error message: " & ex.Message) - LogView.AppendText(CrLf & "Exception " & ex.GetType().ToString() & " has occurred while enumerating packages. Enumerating packages in the top folder...") + LogView.AppendText(CrLf & ProgressLogText("Exception") & ex.GetType().ToString() & ProgressLogText("Has.Occurred.While.Enumerating.Packages.Enumerating.Packages.In")) DynaLog.LogMessage("Getting CAB files...") For Each CabPkg In My.Computer.FileSystem.GetFiles(pkgSource, FileIO.SearchOption.SearchTopLevelOnly, "*.cab") pkgCount += 1 @@ -2915,14 +2021,14 @@ Public Class ProgressPanel pkgCount += 1 Next DynaLog.LogMessage("Package count: " & pkgCount) - LogView.AppendText(CrLf & "Total number of packages: " & pkgCount) + LogView.AppendText(CrLf & ProgressLogText("Total.Number.Of.Packages") & pkgCount) End Try ElseIf pkgAdditionOp = 1 Then DynaLog.LogMessage("Addition operation is selective addition. A package count has already been obtained from the queue.") - LogView.AppendText(CrLf & "Total number of packages: " & pkgCount) + LogView.AppendText(CrLf & ProgressLogText("Total.Number.Of.Packages") & pkgCount) ElseIf pkgAdditionOp = 2 Then DynaLog.LogMessage("Addition operation is Update Manifest addition. Only 1 package will be added.") - LogView.AppendText(CrLf & "Total number of packages: 1") + LogView.AppendText(CrLf & ProgressLogText("Total.Number.Of.Packages.1")) End If End Sub @@ -2935,34 +2041,10 @@ Public Class ProgressPanel CommandArgs &= " /preventpending" End If RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.Packages.AddRecursive")("Gathering.Error.Level.Button") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) End Sub Private Sub AddPackages(targetImage As String) @@ -2974,99 +2056,42 @@ Public Class ProgressPanel DynaLog.LogMessage("- Save changes to the Windows image after finishing? " & If(pkgAdditionCommit, "Yes", "No")) ' Reset internal integers pkgCurrentNum = 0 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Adding packages..." - currentTask.Text = "Preparing to add packages..." - Case "ESN" - allTasks.Text = "Añadiendo paquetes..." - currentTask.Text = "Preparándonos para añadir paquetes..." - Case "FRA" - allTasks.Text = "Ajout des paquets en cours..." - currentTask.Text = "Préparation de l'ajout des paquets en cours..." - Case "PTB", "PTG" - allTasks.Text = "A adicionar pacotes..." - currentTask.Text = "A preparar a adição de pacotes..." - Case "ITA" - allTasks.Text = "Aggiunta pacchetti..." - currentTask.Text = "Preparazione aggiunta pacchetti..." - End Select - Case 1 - allTasks.Text = "Adding packages..." - currentTask.Text = "Preparing to add packages..." - Case 2 - allTasks.Text = "Añadiendo paquetes..." - currentTask.Text = "Preparándonos para añadir paquetes..." - Case 3 - allTasks.Text = "Ajout des paquets en cours..." - currentTask.Text = "Préparation de l'ajout des paquets en cours..." - Case 4 - allTasks.Text = "A adicionar pacotes..." - currentTask.Text = "A preparar a adição de pacotes..." - Case 5 - allTasks.Text = "Aggiunta pacchetti..." - currentTask.Text = "Preparazione aggiunta pacchetti..." - End Select - LogView.AppendText(CrLf & "Adding packages to mounted image..." & CrLf & - "- Package source: " & pkgSource & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.AddPackages")("AddingPackages.Button") + currentTask.Text = LocalizationService.ForSection("Progress.AddPackages")("Preparing.Packages.Button") + LogView.AppendText(CrLf & ProgressLogText("Adding.Packages.To.Mounted.Image") & CrLf & + ProgressLogText("Package.Source") & pkgSource & CrLf) If pkgAdditionOp = 0 Then - LogView.AppendText("- Addition operation: recursive") + LogView.AppendText(ProgressLogText("Addition.Operation.Recursive")) ElseIf pkgAdditionOp = 1 Then - LogView.AppendText("- Addition operation: selective") + LogView.AppendText(ProgressLogText("Addition.Operation.Selective")) End If If pkgIgnoreApplicabilityChecks Then - LogView.AppendText(CrLf & "- Ignore applicability checks? Yes") + LogView.AppendText(CrLf & ProgressLogText("Ignore.Applicability.Checks.Yes")) Else - LogView.AppendText(CrLf & "- Ignore applicability checks? No") + LogView.AppendText(CrLf & ProgressLogText("Ignore.Applicability.Checks.No")) End If If pkgPreventIfPendingOnline Then - LogView.AppendText(CrLf & "- Prevent package addition if online actions need to be performed? Yes" & CrLf & - "NOTE: if the mounted image requires that online actions be performed, all packages might fail installation; but the operation might still be successful") + LogView.AppendText(CrLf & ProgressLogText("Prevent.Package.Addition.If.Online.Actions.Need.To") & CrLf & + ProgressLogText("NOTE.If.The.Mounted.Image.Requires.That.Online")) Else - LogView.AppendText(CrLf & "- Prevent package addition if online actions need to be performed? No") + LogView.AppendText(CrLf & ProgressLogText("Prevent.Package.Addition.If.Online.Actions.Need.To.2")) End If If pkgAdditionCommit Then - LogView.AppendText(CrLf & "- Commit image after operations are done? Yes") + LogView.AppendText(CrLf & ProgressLogText("Commit.Image.After.Operations.Are.Done.Yes")) Else - LogView.AppendText(CrLf & "- Commit image after operations are done? No") + LogView.AppendText(CrLf & ProgressLogText("Commit.Image.After.Operations.Are.Done.No")) End If ' Perform package enumeration - LogView.AppendText(CrLf & "Enumerating packages to add. Please wait...") + LogView.AppendText(CrLf & ProgressLogText("Enumerating.Packages.To.Add.Please.Wait")) CountPackagesToAdd() Thread.Sleep(2000) ' Sleep to prevent thrashing ' Begin package addition - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Adding " & pkgCount & " packages..." - Case "ESN" - currentTask.Text = "Añadiendo " & pkgCount & " paquetes..." - Case "FRA" - currentTask.Text = "Ajout de " & pkgCount & " paquets en cours..." - Case "PTB", "PTG" - currentTask.Text = "Adicionando " & pkgCount & " pacotes..." - Case "ITA" - currentTask.Text = "Aggiunta di " & pkgCount & " pacchetti..." - End Select - Case 1 - currentTask.Text = "Adding " & pkgCount & " packages..." - Case 2 - currentTask.Text = "Añadiendo " & pkgCount & " paquetes..." - Case 3 - currentTask.Text = "Ajout de " & pkgCount & " paquets en cours..." - Case 4 - currentTask.Text = "Adicionando " & pkgCount & " pacotes..." - Case 5 - currentTask.Text = "Aggiunta di " & pkgCount & " pacchetti..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.AddPackages").Format("AddingPackages.Item", pkgCount) CurrentPB.Style = ProgressBarStyle.Blocks LogView.AppendText(CrLf & CrLf & - "Processing " & pkgCount & " packages..." & CrLf) + ProgressLogText("Processing") & pkgCount & ProgressLogText("Packages") & CrLf) If pkgAdditionOp = 0 Then DynaLog.LogMessage("Addition operation is recursive addition. DISM will scan the package source for packages to add.") AddPackagesRecursively(targetImage) @@ -3081,31 +2106,7 @@ Public Class ProgressPanel DynaLog.LogMessage("Preparing to save changes...") AllPB.Value = AllPB.Maximum / taskCount currentTCont += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case "ESN" - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case "FRA" - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case "ITA" - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select - Case 1 - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case 2 - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case 3 - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case 4 - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case 5 - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select + taskCountLbl.Text = LocalizationService.ForSection("Progress").Format("Tasks.Label", currentTCont, taskCount) RunOps(8) Else AllPB.Value = 100 @@ -3119,7 +2120,7 @@ Public Class ProgressPanel End If If PackageErrorCodes.Contains("BC2") Then DynaLog.LogMessage("A system restart is needed to fully apply some packages.") - LogView.AppendText(CrLf & "Some packages require a system restart to be fully processed. Save your work, close your programs, and restart when ready") + LogView.AppendText(CrLf & ProgressLogText("Some.Packages.Require.A.System.Restart.To.Be")) End If End Sub @@ -3128,34 +2129,10 @@ Public Class ProgressPanel For x = 0 To Array.LastIndexOf(pkgs, pkgLastCheckedPackageName) If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Adding package " & (x + 1) & " of " & pkgCount & "..." - Case "ESN" - currentTask.Text = "Añadiendo paquete " & (x + 1) & " de " & pkgCount & "..." - Case "FRA" - currentTask.Text = "Ajout du paquet " & (x + 1) & " de " & pkgCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "A adicionar o pacote " & (x + 1) & " de " & pkgCount & "..." - Case "ITA" - currentTask.Text = "Aggiunta del pacchetto " & (x + 1) & " di " & pkgCount & "..." - End Select - Case 1 - currentTask.Text = "Adding package " & (x + 1) & " of " & pkgCount & "..." - Case 2 - currentTask.Text = "Añadiendo paquete " & (x + 1) & " de " & pkgCount & "..." - Case 3 - currentTask.Text = "Ajout du paquet " & (x + 1) & " de " & pkgCount & " en cours..." - Case 4 - currentTask.Text = "A adicionar o pacote " & (x + 1) & " de " & pkgCount & "..." - Case 5 - currentTask.Text = "Aggiunta del pacchetto " & (x + 1) & " di " & pkgCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.AddPackages").Format("AddingPackage.Item", x + 1, pkgCount) CurrentPB.Value = x + 1 LogView.AppendText(CrLf & - "Package " & (x + 1) & " of " & pkgCount) ' You don't want to see "Package 0 of 407", right? + ProgressLogText("Package") & (x + 1) & ProgressLogText("Of.Word") & pkgCount) ' You don't want to see "Package 0 of 407", right? ' Get package information with the DISM API DynaLog.LogMessage("Getting information about package file " & Quote & Path.GetFileName(pkgs(x)) & Quote & "...") @@ -3177,14 +2154,14 @@ Public Class ProgressPanel DynaLog.LogMessage("The package can be added to the Windows image. Determining installation state of package...") If pkgInfo.PackageState = DismPackageFeatureState.Installed Or pkgInfo.PackageState = DismPackageFeatureState.InstallPending Then DynaLog.LogMessage("The package has already been added at some point.") - LogView.AppendText(CrLf & "Package is already added. Skipping installation of this package...") + LogView.AppendText(CrLf & ProgressLogText("Package.Is.Already.Added.Skipping.Installation.Of.This")) pkgFailedAdditions += 1 End If Else DynaLog.LogMessage("The package cannot be added to the Windows image as it is not applicable.") If Not pkgIgnoreApplicabilityChecks Then DynaLog.LogMessage("Applicability checks are not ignored.") - LogView.AppendText(CrLf & "Package is not applicable to this image. Skipping installation of this package...") + LogView.AppendText(CrLf & ProgressLogText("Package.Is.Not.Applicable.To.This.Image.Skipping")) If PackageErrorCodes.Count <= 0 Then PackageErrorCodes.Add("0x800F8023") Else @@ -3195,7 +2172,7 @@ Public Class ProgressPanel End If End Using Else - LogView.AppendText(CrLf & "The package about to be added is a MSU file. Continuing...") + LogView.AppendText(CrLf & ProgressLogText("The.Package.About.To.Be.Added.Is.A")) ' Force these values to continue package addition pkgIsApplicable = True pkgIsInstalled = False @@ -3221,7 +2198,7 @@ Public Class ProgressPanel End Try If Not pkgIsApplicable Or pkgIsInstalled Then Continue For DynaLog.LogMessage("The package is applicable and has not been installed yet. Adding it...") - LogView.AppendText(CrLf & "Processing package...") + LogView.AppendText(CrLf & ProgressLogText("Processing.Package")) CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /norestart /add-package /packagepath=" & Quote & pkgs(x) & Quote If pkgIgnoreApplicabilityChecks Then CommandArgs &= " /ignorecheck" @@ -3230,9 +2207,9 @@ Public Class ProgressPanel CommandArgs &= " /preventpending" End If RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) GetPkgErrorLevel() - LogView.AppendText(" Error level: " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.3") & errCode) If PackageErrorCodes.Count <= 0 Then PackageErrorCodes.Add(errCode) Else @@ -3240,9 +2217,9 @@ Public Class ProgressPanel End If Next CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected packages..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.Packages") & CrLf) For x = 0 To PackageErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Package no. " & (x + 1) & ": " & PackageErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Package.No") & (x + 1) & ": " & PackageErrorCodes(x)) Next End Sub @@ -3250,34 +2227,10 @@ Public Class ProgressPanel DynaLog.LogMessage("Addition operation is Update Manifest addition.") CurrentPB.Maximum = pkgCount CommandArgs = BckArgs - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Adding package 1 of " & pkgCount & "..." - Case "ESN" - currentTask.Text = "Añadiendo paquete 1 de " & pkgCount & "..." - Case "FRA" - currentTask.Text = "Ajout du paquet 1 de " & pkgCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "A adicionar o pacote 1 de " & pkgCount & "..." - Case "ITA" - currentTask.Text = "Aggiunta del pacchetto 1 di " & pkgCount & "..." - End Select - Case 1 - currentTask.Text = "Adding package 1 of " & pkgCount & "..." - Case 2 - currentTask.Text = "Añadiendo paquete 1 de " & pkgCount & "..." - Case 3 - currentTask.Text = "Ajout du paquet 1 de " & pkgCount & " en cours..." - Case 4 - currentTask.Text = "A adicionar o pacote 1 de " & pkgCount & "..." - Case 5 - currentTask.Text = "Aggiunta del pacchetto 1 di " & pkgCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.AddPackages").Format("AddingPackage.Item", 1, pkgCount) CurrentPB.Value = 1 - LogView.AppendText(CrLf & "The package about to be added is a Microsoft Update Manifest (MUM) file.") - LogView.AppendText(CrLf & "Processing package...") + LogView.AppendText(CrLf & ProgressLogText("The.Package.About.To.Be.Added.Is.A.2")) + LogView.AppendText(CrLf & ProgressLogText("Processing.Package")) CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /norestart /add-package /packagepath=" & Quote & pkgs(0) & Quote If pkgIgnoreApplicabilityChecks Then CommandArgs &= " /ignorecheck" @@ -3286,18 +2239,18 @@ Public Class ProgressPanel CommandArgs &= " /preventpending" End If RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) GetPkgErrorLevel() - LogView.AppendText(" Error level: " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.3") & errCode) If PackageErrorCodes.Count <= 0 Then PackageErrorCodes.Add(errCode) Else PackageErrorCodes.Add(errCode) End If CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected packages..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.Packages") & CrLf) For x = 0 To PackageErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Package no. " & (x + 1) & ": " & PackageErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Package.No") & (x + 1) & ": " & PackageErrorCodes(x)) Next End Sub @@ -3305,72 +2258,15 @@ Public Class ProgressPanel DynaLog.LogMessage("Preparing to remove packages...") DynaLog.LogMessage("- Package removal operation: " & pkgRemovalOp) DynaLog.LogMessage("- Amount of packages to remove: " & pkgRemovalCount) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Removing packages..." - currentTask.Text = "Preparing to remove packages..." - Case "ESN" - allTasks.Text = "Eliminando paquetes..." - currentTask.Text = "Preparándonos para eliminar paquetes..." - Case "FRA" - allTasks.Text = "Suppression des paquets en cours..." - currentTask.Text = "Préparation de la suppression des paquets en cours..." - Case "PTB", "PTG" - allTasks.Text = "A remover pacotes..." - currentTask.Text = "A preparar a remoção de pacotes..." - Case "ITA" - allTasks.Text = "Rimozione pacchetti..." - currentTask.Text = "Preparazione rimozione pacchetti..." - End Select - Case 1 - allTasks.Text = "Removing packages..." - currentTask.Text = "Preparing to remove packages..." - Case 2 - allTasks.Text = "Eliminando paquetes..." - currentTask.Text = "Preparándonos para eliminar paquetes..." - Case 3 - allTasks.Text = "Suppression des paquets en cours..." - currentTask.Text = "Préparation de la suppression des paquets en cours..." - Case 4 - allTasks.Text = "A remover pacotes..." - currentTask.Text = "A preparar a remoção de pacotes..." - Case 5 - allTasks.Text = "Rimozione pacchetti..." - currentTask.Text = "Preparazione rimozione pacchetti..." - End Select - LogView.AppendText(CrLf & "Removing packages from mounted image..." & CrLf & - "Enumerating packages to remove. Please wait...") + allTasks.Text = LocalizationService.ForSection("Progress.RemovePackages")("RemovingPackages.Button") + currentTask.Text = LocalizationService.ForSection("Progress.RemovePackages")("PrepareRemove.Button") + LogView.AppendText(CrLf & ProgressLogText("Removing.Packages.From.Mounted.Image") & CrLf & + ProgressLogText("Enumerating.Packages.To.Remove.Please.Wait")) Thread.Sleep(1000) - LogView.AppendText(CrLf & "Amount of packages to remove: " & pkgRemovalCount) + LogView.AppendText(CrLf & ProgressLogText("Amount.Of.Packages.To.Remove") & pkgRemovalCount) ' Begin package removal - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Removing packages..." - Case "ESN" - currentTask.Text = "Eliminando paquetes..." - Case "FRA" - currentTask.Text = "Suppression des paquets en cours..." - Case "PTB", "PTG" - currentTask.Text = "A remover pacotes..." - Case "ITA" - currentTask.Text = "Rimozione pacchetti..." - End Select - Case 1 - currentTask.Text = "Removing packages..." - Case 2 - currentTask.Text = "Eliminando paquetes..." - Case 3 - currentTask.Text = "Suppression des paquets en cours..." - Case 4 - currentTask.Text = "A remover pacotes..." - Case 5 - currentTask.Text = "Rimozione pacchetti..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.RemovePackages")("RemovingPackages.Item") CurrentPB.Maximum = pkgRemovalCount If pkgRemovalOp = 0 Then DynaLog.LogMessage("Packages that are installed will be removed from the Windows image.") @@ -3382,9 +2278,9 @@ Public Class ProgressPanel End If Directory.Delete(Application.StartupPath & "\tempinfo", True) CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected packages..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.Packages") & CrLf) For x = 0 To PackageErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Package no. " & (x + 1) & ": " & PackageErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Package.No") & (x + 1) & ": " & PackageErrorCodes(x)) Next Thread.Sleep(2000) AllPB.Value = 100 @@ -3395,7 +2291,7 @@ Public Class ProgressPanel End If If PackageErrorCodes.Contains("BC2") Then DynaLog.LogMessage("A system restart is needed to fully remove some packages.") - LogView.AppendText(CrLf & "Some packages require a system restart to be fully processed. Save your work, close your programs, and restart when ready") + LogView.AppendText(CrLf & ProgressLogText("Some.Packages.Require.A.System.Restart.To.Be")) End If End Sub @@ -3403,33 +2299,9 @@ Public Class ProgressPanel For x = 0 To Array.LastIndexOf(pkgRemovalFiles, pkgRemovalLastFile) If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Removing package " & (x + 1) & " of " & pkgRemovalCount & "..." - Case "ESN" - currentTask.Text = "Eliminando paquete " & (x + 1) & " de " & pkgRemovalCount & "..." - Case "FRA" - currentTask.Text = "Suppression du paquet " & (x + 1) & " de " & pkgRemovalCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "A remover o pacote " & (x + 1) & " de " & pkgRemovalCount & "..." - Case "ITA" - currentTask.Text = "Rimozione del pacchetto " & (x + 1) & " di " & pkgRemovalCount & "..." - End Select - Case 1 - currentTask.Text = "Removing package " & (x + 1) & " of " & pkgRemovalCount & "..." - Case 2 - currentTask.Text = "Eliminando paquete " & (x + 1) & " de " & pkgRemovalCount & "..." - Case 3 - currentTask.Text = "Suppression du paquet " & (x + 1) & " de " & pkgRemovalCount & " en cours..." - Case 4 - currentTask.Text = "A remover o pacote " & (x + 1) & " de " & pkgRemovalCount & "..." - Case 5 - currentTask.Text = "Rimozione del pacchetto " & (x + 1) & " di " & pkgRemovalCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.RemovePackages").Format("RemovingPackage.Item", x + 1, pkgRemovalCount) LogView.AppendText(CrLf & - "Package " & (x + 1) & " of " & pkgRemovalCount) + ProgressLogText("Package") & (x + 1) & ProgressLogText("Of.Word") & pkgRemovalCount) CurrentPB.Value = x + 1 Directory.CreateDirectory(Application.StartupPath & "\tempinfo") DynaLog.LogMessage("Getting information about package file " & Quote & Path.GetFileName(pkgRemovalFiles(x)) & Quote & "...") @@ -3442,13 +2314,13 @@ Public Class ProgressPanel DynaLog.LogMessage("Getting package information...") Dim pkgInfo As DismPackageInfo = DismApi.GetPackageInfoByPath(imgSession, pkgRemovalFiles(x)) LogView.AppendText(CrLf & CrLf & - "- Package name: " & pkgInfo.PackageName & CrLf) + ProgressLogText("Package.Name") & pkgInfo.PackageName & CrLf) If pkgInfo.PackageState = DismPackageFeatureState.Installed Then - LogView.AppendText("- Package state: installed" & CrLf) + LogView.AppendText(ProgressLogText("Package.State.Installed") & CrLf) ElseIf pkgInfo.PackageState = DismPackageFeatureState.UninstallPending Then - LogView.AppendText("- Package state: an uninstall is pending" & CrLf) + LogView.AppendText(ProgressLogText("Package.State.An.Uninstall.Is.Pending") & CrLf) ElseIf pkgInfo.PackageState = DismPackageFeatureState.InstallPending Then - LogView.AppendText("- Package state: an install is pending" & CrLf) + LogView.AppendText(ProgressLogText("Package.State.An.Install.Is.Pending") & CrLf) End If If pkgInfo.PackageState = DismPackageFeatureState.Installed Or pkgInfo.PackageState = DismPackageFeatureState.InstallPending Then DynaLog.LogMessage("This package is either installed or about to be installed, and can be removed.") @@ -3481,10 +2353,10 @@ Public Class ProgressPanel If Not pkgIsRemovable Then Continue For If pkgIsReadyForRemoval Then DynaLog.LogMessage("The package can be removed.") - LogView.AppendText(CrLf & "Processing package removal...") + LogView.AppendText(CrLf & ProgressLogText("Processing.Package.Removal")) CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /norestart /remove-package /packagepath=" & pkgRemovalFiles(x) RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) errCode = Hex(Decimal.ToInt32(DismExitCode)) If DismExitCode = 0 Then pkgSuccessfulRemovals += 1 @@ -3492,9 +2364,9 @@ Public Class ProgressPanel pkgFailedRemovals += 1 End If If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.2") & errCode) End If If PackageErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -3511,7 +2383,7 @@ Public Class ProgressPanel End If Else DynaLog.LogMessage("The package cannot be removed.") - LogView.AppendText(CrLf & "This package can't be removed. Skipping removal of this package...") + LogView.AppendText(CrLf & ProgressLogText("This.Package.Can.T.Be.Removed.Skipping.Removal")) pkgFailedRemovals += 1 Continue For End If @@ -3522,33 +2394,9 @@ Public Class ProgressPanel For x = 0 To Array.LastIndexOf(pkgRemovalNames, pkgRemovalLastName) If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Removing package " & (x + 1) & " of " & pkgRemovalCount & "..." - Case "ESN" - currentTask.Text = "Eliminando paquete " & (x + 1) & " de " & pkgRemovalCount & "..." - Case "FRA" - currentTask.Text = "Suppression du paquet " & (x + 1) & " de " & pkgRemovalCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "A remover o pacote " & (x + 1) & " de " & pkgRemovalCount & "..." - Case "ITA" - currentTask.Text = "Rimozione del pacchetto " & (x + 1) & " di " & pkgRemovalCount & "..." - End Select - Case 1 - currentTask.Text = "Removing package " & (x + 1) & " of " & pkgRemovalCount & "..." - Case 2 - currentTask.Text = "Eliminando paquete " & (x + 1) & " de " & pkgRemovalCount & "..." - Case 3 - currentTask.Text = "Suppression du paquet " & (x + 1) & " de " & pkgRemovalCount & " en cours..." - Case 4 - currentTask.Text = "A remover o pacote " & (x + 1) & " de " & pkgRemovalCount & "..." - Case 5 - currentTask.Text = "Rimozione del pacchetto " & (x + 1) & " di " & pkgRemovalCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.RemovePackages").Format("RemovingPackage.Item", x + 1, pkgRemovalCount) LogView.AppendText(CrLf & - "Package " & (x + 1) & " of " & pkgRemovalCount) + ProgressLogText("Package") & (x + 1) & ProgressLogText("Of.Word") & pkgRemovalCount) CurrentPB.Value = x + 1 Directory.CreateDirectory(Application.StartupPath & "\tempinfo") @@ -3562,8 +2410,8 @@ Public Class ProgressPanel DynaLog.LogMessage("Getting package information...") Dim pkgInfo As DismPackageInfo = DismApi.GetPackageInfoByName(imgSession, pkgRemovalNames(x)) LogView.AppendText(CrLf & CrLf & - "- Package name: " & pkgInfo.PackageName & CrLf & - "- Package state: " & Casters.CastDismPackageState(pkgInfo.PackageState)) + ProgressLogText("Package.Name") & pkgInfo.PackageName & CrLf & + ProgressLogText("Package.State") & Casters.CastDismPackageState(pkgInfo.PackageState)) If pkgInfo.PackageState = DismPackageFeatureState.Installed Or pkgInfo.PackageState = DismPackageFeatureState.InstallPending Then DynaLog.LogMessage("This package is either installed or about to be installed, and can be removed.") pkgIsReadyForRemoval = True @@ -3595,10 +2443,10 @@ Public Class ProgressPanel If Not pkgIsRemovable Then Continue For If pkgIsReadyForRemoval Then DynaLog.LogMessage("The package can be removed.") - LogView.AppendText(CrLf & "Processing package removal...") + LogView.AppendText(CrLf & ProgressLogText("Processing.Package.Removal")) CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /norestart /remove-package /packagename=" & pkgRemovalNames(x) RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) errCode = Hex(Decimal.ToInt32(DismExitCode)) If DismExitCode = 0 Then pkgSuccessfulRemovals += 1 @@ -3606,9 +2454,9 @@ Public Class ProgressPanel pkgFailedRemovals += 1 End If If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.2") & errCode) End If If PackageErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -3625,7 +2473,7 @@ Public Class ProgressPanel End If Else DynaLog.LogMessage("The package cannot be removed.") - LogView.AppendText(CrLf & "This package can't be removed. Skipping removal of this package...") + LogView.AppendText(CrLf & ProgressLogText("This.Package.Can.T.Be.Removed.Skipping.Removal")) pkgFailedRemovals += 1 Continue For End If @@ -3641,145 +2489,64 @@ Public Class ProgressPanel DynaLog.LogMessage("- Will all parent features be enabled? " & If(featParentIsEnabled, "Yes", "No")) DynaLog.LogMessage("- Contact Windows Update for feature enablement (only for active installations)? " & If(featContactWindowsUpdate, "Yes", "No")) DynaLog.LogMessage("- Save changes to the Windows image after finishing? " & If(featEnablementCommit, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Enabling features..." - currentTask.Text = "Preparing to enable features..." - Case "ESN" - allTasks.Text = "Habilitando características..." - currentTask.Text = "Preparándonos para habilitar características..." - Case "FRA" - allTasks.Text = "Activation des caractéristiques en cours..." - currentTask.Text = "Préparation de l'activation des caractéristiques en cours..." - Case "PTB", "PTG" - allTasks.Text = "Ativar características..." - currentTask.Text = "A preparar a ativação de características..." - Case "ITA" - allTasks.Text = "Abilitazione funzionalità..." - currentTask.Text = "Preparazione abilitazione funzionalità..." - End Select - Case 1 - allTasks.Text = "Enabling features..." - currentTask.Text = "Preparing to enable features..." - Case 2 - allTasks.Text = "Habilitando características..." - currentTask.Text = "Preparándonos para habilitar características..." - Case 3 - allTasks.Text = "Activation des caractéristiques en cours..." - currentTask.Text = "Préparation de l'activation des caractéristiques en cours..." - Case 4 - allTasks.Text = "Ativar características..." - currentTask.Text = "A preparar a ativação de características..." - Case 5 - allTasks.Text = "Abilitazione funzionalità..." - currentTask.Text = "Preparazione abilitazione funzionalità..." - End Select - LogView.AppendText(CrLf & "Enabling features..." & CrLf & - "Options:" & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.EnableFeatures")("EnablingFeatures.Button") + currentTask.Text = LocalizationService.ForSection("Progress.EnableFeatures")("PrepareEnable.Button") + LogView.AppendText(CrLf & ProgressLogText("Enabling.Features") & CrLf & + ProgressLogText("Options") & CrLf) If featisParentPkgNameUsed Then - LogView.AppendText("- Use parent package to enable features? Yes") + LogView.AppendText(ProgressLogText("Use.Parent.Package.To.Enable.Features.Yes")) Else - LogView.AppendText("- Use parent package to enable features? No") + LogView.AppendText(ProgressLogText("Use.Parent.Package.To.Enable.Features.No")) End If If featParentPkgName = "" Then - LogView.AppendText(CrLf & "- Parent package name: not specified") + LogView.AppendText(CrLf & ProgressLogText("Parent.Package.Name.Not.Specified")) Else - LogView.AppendText(CrLf & "- Parent package name: " & Quote & featParentPkgName & Quote) + LogView.AppendText(CrLf & ProgressLogText("Parent.Package.Name") & Quote & featParentPkgName & Quote) End If If featisSourceSpecified Then - LogView.AppendText(CrLf & "- Use feature source? Yes") + LogView.AppendText(CrLf & ProgressLogText("Use.Feature.Source.Yes")) Else - LogView.AppendText(CrLf & "- Use feature source? No") + LogView.AppendText(CrLf & ProgressLogText("Use.Feature.Source.No")) End If If featSource = "" Then - LogView.AppendText(CrLf & "- Feature source: not specified") + LogView.AppendText(CrLf & ProgressLogText("Feature.Source.Not.Specified")) Else - LogView.AppendText(CrLf & "- Feature source: " & Quote & featSource & Quote) + LogView.AppendText(CrLf & ProgressLogText("Feature.Source") & Quote & featSource & Quote) End If If featParentIsEnabled Then - LogView.AppendText(CrLf & "- Enable all parent features? Yes") + LogView.AppendText(CrLf & ProgressLogText("Enable.All.Parent.Features.Yes")) Else - LogView.AppendText(CrLf & "- Enable all parent features? No") + LogView.AppendText(CrLf & ProgressLogText("Enable.All.Parent.Features.No")) End If DynaLog.LogMessage("Boot mode of the host system: " & SystemInformation.BootMode) If featContactWindowsUpdate And OnlineMgmt And SystemInformation.BootMode <> BootMode.FailSafe Then DynaLog.LogMessage("Host system is booted to normal mode or Safe Mode with networking.") - LogView.AppendText(CrLf & "- Contact Windows Update? Yes") + LogView.AppendText(CrLf & ProgressLogText("Contact.Windows.Update.Yes")) ElseIf featContactWindowsUpdate And OnlineMgmt And SystemInformation.BootMode = BootMode.FailSafe Then DynaLog.LogMessage("Host system is booted to Safe Mode.") - LogView.AppendText(CrLf & "- Contact Windows Update? No, the system is in Safe Mode") + LogView.AppendText(CrLf & ProgressLogText("Contact.Windows.Update.No.The.System.Is.In")) ElseIf featContactWindowsUpdate And Not OnlineMgmt Then DynaLog.LogMessage("The active installation is not being managed.") - LogView.AppendText(CrLf & "- Contact Windows Update? No, this is not an online installation") + LogView.AppendText(CrLf & ProgressLogText("Contact.Windows.Update.No.This.Is.Not.An")) Else - LogView.AppendText(CrLf & "- Contact Windows Update? No") + LogView.AppendText(CrLf & ProgressLogText("Contact.Windows.Update.No")) End If If featEnablementCommit Then - LogView.AppendText(CrLf & "- Commit image after enabling features? Yes") + LogView.AppendText(CrLf & ProgressLogText("Commit.Image.After.Enabling.Features.Yes")) Else - LogView.AppendText(CrLf & "- Commit image after enabling features? No") + LogView.AppendText(CrLf & ProgressLogText("Commit.Image.After.Enabling.Features.No")) End If - LogView.AppendText(CrLf & CrLf & "Enumerating features to enable...") + LogView.AppendText(CrLf & CrLf & ProgressLogText("Enumerating.Features.To.Enable")) Thread.Sleep(500) - LogView.AppendText(CrLf & "Total number of features to enable: " & featEnablementCount) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Enabling features..." - Case "ESN" - currentTask.Text = "Habilitando características..." - Case "FRA" - currentTask.Text = "Activation des caractéristiques en cours..." - Case "PTB", "PTG" - currentTask.Text = "Ativar características..." - Case "ITA" - currentTask.Text = "Abilitazione funzionalità..." - End Select - Case 1 - currentTask.Text = "Enabling features..." - Case 2 - currentTask.Text = "Habilitando características..." - Case 3 - currentTask.Text = "Activation des caractéristiques en cours..." - Case 4 - currentTask.Text = "Ativar características..." - Case 5 - currentTask.Text = "Abilitazione funzionalità..." - End Select + LogView.AppendText(CrLf & ProgressLogText("Total.Number.Of.Features.To.Enable") & featEnablementCount) + currentTask.Text = LocalizationService.ForSection("Progress.EnableFeatures")("EnablingFeatures.Item") CurrentPB.Maximum = featEnablementCount For x = 0 To Array.LastIndexOf(featEnablementNames, featEnablementLastName) If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Enabling feature " & (x + 1) & " of " & featEnablementCount & "..." - Case "ESN" - currentTask.Text = "Habilitando característica " & (x + 1) & " de " & featEnablementCount & "..." - Case "FRA" - currentTask.Text = "Activation de la caractéristique " & (x + 1) & " de " & featEnablementCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "Ativar a caraterística " & (x + 1) & " de " & featEnablementCount & "..." - Case "ITA" - currentTask.Text = "Abilitazione funzionalità " & (x + 1) & " di " & featEnablementCount & "..." - End Select - Case 1 - currentTask.Text = "Enabling feature " & (x + 1) & " of " & featEnablementCount & "..." - Case 2 - currentTask.Text = "Habilitando característica " & (x + 1) & " de " & featEnablementCount & "..." - Case 3 - currentTask.Text = "Activation de la caractéristique " & (x + 1) & " de " & featEnablementCount & " en cours..." - Case 4 - currentTask.Text = "Ativar a caraterística " & (x + 1) & " de " & featEnablementCount & "..." - Case 5 - currentTask.Text = "Abilitazione funzionalità " & (x + 1) & " di " & featEnablementCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.EnableFeatures").Format("EnablingFeature.Item", x + 1, featEnablementCount) LogView.AppendText(CrLf & - "Feature " & (x + 1) & " of " & featEnablementCount) + ProgressLogText("Feature") & (x + 1) & ProgressLogText("Of.Word") & featEnablementCount) CurrentPB.Value = x + 1 DynaLog.LogMessage("Getting information about feature " & Quote & featEnablementNames(x).Replace("ListViewItem: ", "").Trim().Replace("{", "").Trim().Replace("}", "").Trim() & Quote & "...") Try @@ -3790,8 +2557,8 @@ Public Class ProgressPanel DynaLog.LogMessage("Getting feature information...") Dim featInfo As DismFeatureInfo = DismApi.GetFeatureInfo(imgSession, featEnablementNames(x).Replace("ListViewItem: ", "").Trim().Replace("{", "").Trim().Replace("}", "").Trim()) LogView.AppendText(CrLf & CrLf & - "- Feature name: " & featInfo.FeatureName & CrLf & - "- Feature description: " & featInfo.Description & CrLf) + ProgressLogText("Feature.Name") & featInfo.FeatureName & CrLf & + ProgressLogText("Feature.Description") & featInfo.Description & CrLf) End Using Finally Try @@ -3806,7 +2573,11 @@ Public Class ProgressPanel CommandArgs &= " /packagename=" & featParentPkgName End If If featisSourceSpecified And featSource <> "" Then - CommandArgs &= " /source=" & Quote & featSource & Quote + ' Like image captures, feature enablements will fail if the source is in the root + ' of a volume and is quoted. + Dim SourceIsRooted As Boolean = Path.GetPathRoot(featSource) = featSource + Dim SourcePath As String = If(SourceIsRooted, featSource, Quote & featSource & Quote) + CommandArgs &= " /source=" & SourcePath End If If featParentIsEnabled Then CommandArgs &= " /all" @@ -3815,12 +2586,12 @@ Public Class ProgressPanel CommandArgs &= " /limitaccess" End If RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) GetFeatErrorLevel() If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If FeatureErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -3837,40 +2608,16 @@ Public Class ProgressPanel End If Next CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected features..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.Features") & CrLf) For x = 0 To FeatureErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Feature no. " & (x + 1) & ": " & FeatureErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Feature.No") & (x + 1) & ": " & FeatureErrorCodes(x)) Next Thread.Sleep(2000) If featEnablementCommit Then DynaLog.LogMessage("Preparing to save changes...") AllPB.Value = AllPB.Maximum / taskCount currentTCont += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case "ESN" - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case "FRA" - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case "ITA" - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select - Case 1 - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case 2 - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case 3 - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case 4 - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case 5 - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select + taskCountLbl.Text = LocalizationService.ForSection("Progress").Format("Tasks.Label", currentTCont, taskCount) RunOps(8) Else AllPB.Value = 100 @@ -3882,7 +2629,7 @@ Public Class ProgressPanel End If If FeatureErrorCodes.Contains("BC2") Then DynaLog.LogMessage("A system restart is needed to fully apply some features.") - LogView.AppendText(CrLf & "Some features require a system restart to be fully processed. Save your work, close your programs, and restart when ready") + LogView.AppendText(CrLf & ProgressLogText("Some.Features.Require.A.System.Restart.To.Be")) End If End Sub @@ -3891,117 +2638,36 @@ Public Class ProgressPanel DynaLog.LogMessage("- Will a parent package name be used? " & If(featDisablementParentPkgUsed, "Yes", "No")) DynaLog.LogMessage("- Parent package name: " & Quote & featDisablementParentPkg & Quote) DynaLog.LogMessage("- Remove feature manifest? " & If(featDisablementRemoveManifest, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Disabling features..." - currentTask.Text = "Preparing to disable features..." - Case "ESN" - allTasks.Text = "Deshabilitando características..." - currentTask.Text = "Preparándonos para deshabilitar características..." - Case "FRA" - allTasks.Text = "Désactivation des caractéristiques en cours..." - currentTask.Text = "Préparation de la désactivation des caractéristiques en cours..." - Case "PTB", "PTG" - allTasks.Text = "Desativar características..." - currentTask.Text = "A preparar a desativação de características..." - Case "ITA" - allTasks.Text = "Disabilitazione funzionalità..." - currentTask.Text = "Preparazione disabilitazione funzionalità..." - End Select - Case 1 - allTasks.Text = "Disabling features..." - currentTask.Text = "Preparing to disable features..." - Case 2 - allTasks.Text = "Deshabilitando características..." - currentTask.Text = "Preparándonos para deshabilitar características..." - Case 3 - allTasks.Text = "Désactivation des caractéristiques en cours..." - currentTask.Text = "Préparation de la désactivation des caractéristiques en cours..." - Case 4 - allTasks.Text = "Desativar características..." - currentTask.Text = "A preparar a desativação de características..." - Case 5 - allTasks.Text = "Disabilitazione funzionalità..." - currentTask.Text = "Preparazione disabilitazione funzionalità..." - End Select - LogView.AppendText(CrLf & "Disabling features..." & CrLf & - "Options:" & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.DisableFeatures")("Disabling.Button") + currentTask.Text = LocalizationService.ForSection("Progress.DisableFeatures")("PrepareDisable.Button") + LogView.AppendText(CrLf & ProgressLogText("Disabling.Features") & CrLf & + ProgressLogText("Options") & CrLf) If featDisablementParentPkgUsed Then - LogView.AppendText("- Use parent package to disable features? Yes") + LogView.AppendText(ProgressLogText("Use.Parent.Package.To.Disable.Features.Yes")) Else - LogView.AppendText("- Use parent package to disable features? No") + LogView.AppendText(ProgressLogText("Use.Parent.Package.To.Disable.Features.No")) End If If featDisablementParentPkg = "" Then - LogView.AppendText(CrLf & "- Parent package name: not specified") + LogView.AppendText(CrLf & ProgressLogText("Parent.Package.Name.Not.Specified")) Else - LogView.AppendText(CrLf & "- Parent package name: " & Quote & featDisablementParentPkg & Quote) + LogView.AppendText(CrLf & ProgressLogText("Parent.Package.Name") & Quote & featDisablementParentPkg & Quote) End If If featDisablementRemoveManifest Then - LogView.AppendText(CrLf & "- Remove feature manifest? Yes") + LogView.AppendText(CrLf & ProgressLogText("Remove.Feature.Manifest.Yes")) Else - LogView.AppendText(CrLf & "- Remove feature manifest? No") + LogView.AppendText(CrLf & ProgressLogText("Remove.Feature.Manifest.No")) End If - LogView.AppendText(CrLf & CrLf & "Enumerating features to disable...") + LogView.AppendText(CrLf & CrLf & ProgressLogText("Enumerating.Features.To.Disable")) Thread.Sleep(500) - LogView.AppendText(CrLf & "Total number of features to disable: " & featDisablementCount) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Disabling features..." - Case "ESN" - currentTask.Text = "Deshabilitando características..." - Case "FRA" - currentTask.Text = "Désactivation des caractéristiques en cours..." - Case "PTB", "PTG" - currentTask.Text = "Desativar características..." - Case "ITA" - currentTask.Text = "Disabilitazione funzionalità..." - End Select - Case 1 - currentTask.Text = "Disabling features..." - Case 2 - currentTask.Text = "Deshabilitando características..." - Case 3 - currentTask.Text = "Désactivation des caractéristiques en cours..." - Case 4 - currentTask.Text = "Desativar características..." - Case 5 - currentTask.Text = "Disabilitazione funzionalità..." - End Select + LogView.AppendText(CrLf & ProgressLogText("Total.Number.Of.Features.To.Disable") & featDisablementCount) + currentTask.Text = LocalizationService.ForSection("Progress.DisableFeatures")("Disabling.Item") CurrentPB.Maximum = featDisablementCount For x = 0 To Array.LastIndexOf(featDisablementNames, featDisablementLastName) If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Disabling feature " & (x + 1) & " of " & featDisablementCount & "..." - Case "ESN" - currentTask.Text = "Deshabilitando característica " & (x + 1) & " de " & featDisablementCount & "..." - Case "FRA" - currentTask.Text = "Désactivation de la caractéristique " & (x + 1) & " de " & featDisablementCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "Desativar a caraterística " & (x + 1) & " de " & featDisablementCount & "..." - Case "ITA" - currentTask.Text = "Disabilitazione funzionalità " & (x + 1) & " di " & featDisablementCount & "..." - End Select - Case 1 - currentTask.Text = "Disabling feature " & (x + 1) & " of " & featDisablementCount & "..." - Case 2 - currentTask.Text = "Deshabilitando característica " & (x + 1) & " de " & featDisablementCount & "..." - Case 3 - currentTask.Text = "Désactivation de la caractéristique " & (x + 1) & " de " & featDisablementCount & " en cours..." - Case 4 - currentTask.Text = "Desativar a caraterística " & (x + 1) & " de " & featDisablementCount & "..." - Case 5 - currentTask.Text = "Disabilitazione funzionalità " & (x + 1) & " di " & featDisablementCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.DisableFeatures").Format("DisablingFeature.Item", x + 1, featDisablementCount) LogView.AppendText(CrLf & - "Feature " & (x + 1) & " of " & featDisablementCount) + ProgressLogText("Feature") & (x + 1) & ProgressLogText("Of.Word") & featDisablementCount) CurrentPB.Value = x + 1 DynaLog.LogMessage("Getting information about feature " & Quote & featDisablementNames(x).Replace("ListViewItem: ", "").Trim().Replace("{", "").Trim().Replace("}", "").Trim() & Quote & "...") Try @@ -4012,8 +2678,8 @@ Public Class ProgressPanel DynaLog.LogMessage("Getting feature information...") Dim featInfo As DismFeatureInfo = DismApi.GetFeatureInfo(imgSession, featDisablementNames(x).Replace("ListViewItem: ", "").Trim().Replace("{", "").Trim().Replace("}", "").Trim()) LogView.AppendText(CrLf & CrLf & - "- Feature name: " & featInfo.FeatureName & CrLf & - "- Feature description: " & featInfo.Description & CrLf) + ProgressLogText("Feature.Name") & featInfo.FeatureName & CrLf & + ProgressLogText("Feature.Description") & featInfo.Description & CrLf) End Using Finally @@ -4032,7 +2698,7 @@ Public Class ProgressPanel CommandArgs &= " /remove" End If RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) errCode = Hex(Decimal.ToInt32(DismExitCode)) If DismExitCode = 0 Then featSuccessfulDisablements += 1 @@ -4040,9 +2706,9 @@ Public Class ProgressPanel featFailedDisablements += 1 End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If FeatureErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -4059,9 +2725,9 @@ Public Class ProgressPanel End If Next CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected features..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.Features") & CrLf) For x = 0 To FeatureErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Feature no. " & (x + 1) & ": " & FeatureErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Feature.No") & (x + 1) & ": " & FeatureErrorCodes(x)) Next Thread.Sleep(2000) If featSuccessfulDisablements > 0 Then @@ -4071,227 +2737,59 @@ Public Class ProgressPanel End If If FeatureErrorCodes.Contains("BC2") Then DynaLog.LogMessage("A system restart is needed to fully apply some features.") - LogView.AppendText(CrLf & "Some features require a system restart to be fully processed. Save your work, close your programs, and restart when ready") + LogView.AppendText(CrLf & ProgressLogText("Some.Features.Require.A.System.Restart.To.Be")) End If End Sub Private Sub CleanupImage(targetImage As String) DynaLog.LogMessage("Preparing to clean up the image...") DynaLog.LogMessage("Cleanup task: " & CleanupTask) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Cleaning up the image..." - Case "ESN" - allTasks.Text = "Limpiando la imagen..." - Case "FRA" - allTasks.Text = "Nettoyage de l'image en cours..." - Case "PTB", "PTG" - allTasks.Text = "Limpar a imagem..." - Case "ITA" - allTasks.Text = "Pulizia immagine..." - End Select - Case 1 - allTasks.Text = "Cleaning up the image..." - Case 2 - allTasks.Text = "Limpiando la imagen..." - Case 3 - allTasks.Text = "Nettoyage de l'image en cours..." - Case 4 - allTasks.Text = "Limpar a imagem..." - Case 5 - allTasks.Text = "Pulizia immagine..." - End Select + allTasks.Text = LocalizationService.ForSection("Progress.CleanupImage")("Cleaning.Up.Image.Button") CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /cleanup-image" Select Case CleanupTask Case 0 DynaLog.LogMessage("Reverting pending servicing actions to a last known good state...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Reverting pending servicing actions..." - Case "ESN" - currentTask.Text = "Revirtiendo acciones de servicio pendientes..." - Case "FRA" - currentTask.Text = "Annulation des actions de maintenance en cours..." - Case "PTB", "PTG" - currentTask.Text = "Reverter acções de manutenção pendentes..." - Case "ITA" - currentTask.Text = "Ripristino azioni assistenza in sospeso..." - End Select - Case 1 - currentTask.Text = "Reverting pending servicing actions..." - Case 2 - currentTask.Text = "Revirtiendo acciones de servicio pendientes..." - Case 3 - currentTask.Text = "Annulation des actions de maintenance en cours..." - Case 4 - currentTask.Text = "Reverter acções de manutenção pendentes..." - Case 5 - currentTask.Text = "Ripristino azioni assistenza in sospeso..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.CleanupImage")("RevertPending.Button") LogView.AppendText(CrLf & - "Reverting pending servicing actions...") + ProgressLogText("Reverting.Pending.Servicing.Actions")) CommandArgs &= " /revertpendingactions" Case 1 DynaLog.LogMessage("Cleaning up Service Pack backup files...") DynaLog.LogMessage("- Hide Service Packs from Installed Updates list? " & If(CleanupHideSP, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Cleaning up Service Pack backup files..." - Case "ESN" - currentTask.Text = "Limpiando archivos de copia de seguridad del Service Pack..." - Case "FRA" - currentTask.Text = "Nettoyage des fichiers de sauvegarde du Service Pack en cours..." - Case "PTB", "PTG" - currentTask.Text = "Limpeza dos ficheiros de cópia de segurança do Service Pack..." - Case "ITA" - currentTask.Text = "Pulizia file backup Service Pack..." - End Select - Case 1 - currentTask.Text = "Cleaning up Service Pack backup files..." - Case 2 - currentTask.Text = "Limpiando archivos de copia de seguridad del Service Pack..." - Case 3 - currentTask.Text = "Nettoyage des fichiers de sauvegarde du Service Pack en cours..." - Case 4 - currentTask.Text = "Limpeza dos ficheiros de cópia de segurança do Service Pack..." - Case 5 - currentTask.Text = "Pulizia file backup Service Pack..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.CleanupImage")("Cleaning.Up.ServicePack.Item") LogView.AppendText(CrLf & - "Cleaning up Service Pack backup files..." & CrLf & - "Options:" & CrLf & - "- Hide Service Packs from the Installed Updates list? " & If(CleanupHideSP, "Yes", "No")) + ProgressLogText("Cleaning.Up.Service.Pack.Backup.Files") & CrLf & + ProgressLogText("Options") & CrLf & + ProgressLogText("Hide.Service.Packs.From.The.Installed.Updates.List") & If(CleanupHideSP, ProgressLogText("Yes"), ProgressLogText("No"))) CommandArgs &= " /spsuperseded" & If(CleanupHideSP, " /hidesp", "") Case 2 DynaLog.LogMessage("Cleaning up component store...") DynaLog.LogMessage("- Reset superseded component base? " & If(ResetCompBase, "Yes", "No")) DynaLog.LogMessage("- Defer long operations? " & If(DeferCleanupOps, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Cleaning up the component store..." - Case "ESN" - currentTask.Text = "Limpiando el almacén de componentes..." - Case "FRA" - currentTask.Text = "Nettoyage du stock de composants en cours..." - Case "PTB", "PTG" - currentTask.Text = "Limpar o armazenamento de componentes..." - Case "ITA" - currentTask.Text = "Pulizia archivio componenti..." - End Select - Case 1 - currentTask.Text = "Cleaning up the component store..." - Case 2 - currentTask.Text = "Limpiando el almacén de componentes..." - Case 3 - currentTask.Text = "Nettoyage du stock de composants en cours..." - Case 4 - currentTask.Text = "Limpar o armazenamento de componentes..." - Case 5 - currentTask.Text = "Pulizia archivio componenti..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.CleanupImage")("Cleaning.Up.Component.Item") LogView.AppendText(CrLf & - "Cleaning up the component store..." & CrLf & - "Options:" & CrLf & - "- Perform superseded component base reset? " & If(ResetCompBase, "Yes", "No") & CrLf & - "- Defer long-running operations? " & If(DeferCleanupOps, "Yes", "No")) + ProgressLogText("Cleaning.Up.The.Component.Store") & CrLf & + ProgressLogText("Options") & CrLf & + ProgressLogText("Perform.Superseded.Component.Base.Reset") & If(ResetCompBase, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Defer.Long.Running.Operations") & If(DeferCleanupOps, ProgressLogText("Yes"), ProgressLogText("No"))) CommandArgs &= " /startcomponentcleanup" & If(ResetCompBase, " /resetbase", "") & If(ResetCompBase And DeferCleanupOps, " /defer", "") Case 3 DynaLog.LogMessage("Analyzing component store...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Analyzing the component store..." - Case "ESN" - currentTask.Text = "Analizando el almacén de componentes..." - Case "FRA" - currentTask.Text = "Analyse du stock de composants en cours..." - Case "PTB", "PTG" - currentTask.Text = "Analisando o armazenamento de componentes..." - Case "ITA" - currentTask.Text = "Analisi archivio componenti..." - End Select - Case 1 - currentTask.Text = "Analyzing the component store..." - Case 2 - currentTask.Text = "Analizando el almacén de componentes..." - Case 3 - currentTask.Text = "Analyse du stock de composants en cours..." - Case 4 - currentTask.Text = "Analisando o armazenamento de componentes..." - Case 5 - currentTask.Text = "Analisi archivio componenti..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.CleanupImage")("Analyzing.Component.Item") LogView.AppendText(CrLf & - "Analyzing the component store...") + ProgressLogText("Analyzing.The.Component.Store")) CommandArgs &= " /analyzecomponentstore" Case 4 DynaLog.LogMessage("Checking component store health...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Checking the component store health..." - Case "ESN" - currentTask.Text = "Comprobando la salud del almacén de componentes..." - Case "FRA" - currentTask.Text = "Vérification de l'état de santé du stock de composants en cours..." - Case "PTB", "PTG" - currentTask.Text = "Verificar a integridade do armazenamento de componentes..." - Case "ITA" - currentTask.Text = "Controllo stato di salute archivio componenti..." - End Select - Case 1 - currentTask.Text = "Checking the component store health..." - Case 2 - currentTask.Text = "Comprobando la salud del almacén de componentes..." - Case 3 - currentTask.Text = "Vérification de l'état de santé du stock de composants en cours..." - Case 4 - currentTask.Text = "Verificar a integridade do armazenamento de componentes..." - Case 5 - currentTask.Text = "Controllo stato di salute archivio componenti..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.CleanupImage")("Checking.Comp.Store.Item") LogView.AppendText(CrLf & - "Checking the component store health...") + ProgressLogText("Checking.The.Component.Store.Health")) CommandArgs &= " /checkhealth" Case 5 DynaLog.LogMessage("Scanning component store...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Scanning the component store..." - Case "ESN" - currentTask.Text = "Escaneando el almacén de componentes..." - Case "FRA" - currentTask.Text = "Analyse du stock de composants en cours..." - Case "PTB", "PTG" - currentTask.Text = "A analisar o armazenamento de componentes..." - Case "ITA" - currentTask.Text = "Scansione archivio componenti..." - End Select - Case 1 - currentTask.Text = "Scanning the component store..." - Case 2 - currentTask.Text = "Escaneando el almacén de componentes..." - Case 3 - currentTask.Text = "Analyse du stock de composants en cours..." - Case 4 - currentTask.Text = "A analisar o armazenamento de componentes..." - Case 5 - currentTask.Text = "Scansione archivio componenti..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.CleanupImage")("Scanning.Component.Item") LogView.AppendText(CrLf & - "Scanning the component store...") + ProgressLogText("Scanning.The.Component.Store")) CommandArgs &= " /scanhealth" Case 6 DynaLog.LogMessage("Repairing component store...") @@ -4299,71 +2797,27 @@ Public Class ProgressPanel DynaLog.LogMessage("- Limit Windows Update access (only for active installations)? " & If(LimitWUAccess, "Yes", "No")) DynaLog.LogMessage("Boot mode of host system: " & SystemInformation.BootMode) ' The most known thing about DISM : dism /online /cleanup-image /restorehealth - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Repairing the component store..." - Case "ESN" - currentTask.Text = "Reparando el almacén de componentes..." - Case "FRA" - currentTask.Text = "Réparation du stock de composants en cours..." - Case "PTB", "PTG" - currentTask.Text = "Reparar o armazenamento de componentes..." - Case "ITA" - currentTask.Text = "Riparazione archivio componenti..." - End Select - Case 1 - currentTask.Text = "Repairing the component store..." - Case 2 - currentTask.Text = "Reparando el almacén de componentes..." - Case 3 - currentTask.Text = "Réparation du stock de composants en cours..." - Case 4 - currentTask.Text = "Reparar o armazenamento de componentes..." - Case 5 - currentTask.Text = "Riparazione archivio componenti..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.CleanupImage")("Repairing.Component.Item") LogView.AppendText(CrLf & - "Repairing the component store..." & CrLf & - "Options:" & CrLf & - "- Use different source? " & If(UseCompRepairSource, "Yes (" & Quote & ComponentRepairSource & Quote & ")", "No") & CrLf & - "- Limit Windows Update access? " & If(LimitWUAccess And OnlineMgmt, "Yes", If(LimitWUAccess And Not OnlineMgmt, "No, this is not an online installation", "No")) & - If(Not LimitWUAccess And OnlineMgmt And SystemInformation.BootMode = BootMode.FailSafe, ", the system is in Safe Mode", "")) - CommandArgs &= " /restorehealth" & If(UseCompRepairSource And File.Exists(ComponentRepairSource), " /source=" & Quote & ComponentRepairSource & Quote, "") & If(LimitWUAccess And OnlineMgmt, " /limitaccess", "") + ProgressLogText("Repairing.The.Component.Store") & CrLf & + ProgressLogText("Options") & CrLf & + ProgressLogText("Use.Different.Source") & If(UseCompRepairSource, ProgressLogText("Yes.2") & Quote & ComponentRepairSource & Quote & ")", ProgressLogText("No")) & CrLf & + ProgressLogText("Limit.Windows.Update.Access") & If(LimitWUAccess And OnlineMgmt, ProgressLogText("Yes"), If(LimitWUAccess And Not OnlineMgmt, ProgressLogText("No.This.Is.Not.An.Online.Installation"), ProgressLogText("No"))) & + If(Not LimitWUAccess And OnlineMgmt And SystemInformation.BootMode = BootMode.FailSafe, ProgressLogText("The.System.Is.In.Safe.Mode"), "")) + ' Like image captures, cleanup/comp store restore will fail if the source is in the root + ' of a volume and is quoted. + Dim SourceIsRooted As Boolean = Path.GetPathRoot(ComponentRepairSource) = ComponentRepairSource + Dim SourcePath As String = If(SourceIsRooted, ComponentRepairSource, Quote & ComponentRepairSource & Quote) + CommandArgs &= " /restorehealth" & If(UseCompRepairSource And Directory.Exists(ComponentRepairSource), " /source=" & SourcePath, "") & If(LimitWUAccess And OnlineMgmt, " /limitaccess", "") End Select RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.CleanupImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -4376,88 +2830,31 @@ Public Class ProgressPanel DynaLog.LogMessage("- Provisioning package: " & Quote & ppkgAdditionPackagePath & Quote) DynaLog.LogMessage("- Catalog path: " & Quote & ppkgAdditionCatalogPath & Quote) DynaLog.LogMessage("- Commit image after finishing? " & If(ppkgAdditionCommit, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Adding provisioning package..." - currentTask.Text = "Adding provisioning package to the image..." - Case "ESN" - allTasks.Text = "Añadiendo paquete de aprovisionamiento..." - currentTask.Text = "Añadiendo paquete de aprovisionamiento a la imagen..." - Case "FRA" - allTasks.Text = "Ajout d'un paquet de provisionnement en cours..." - currentTask.Text = "Ajout d'un paquet de provisionnement à l'image en cours..." - Case "PTB", "PTG" - allTasks.Text = "Adicionando pacote de provisionamento..." - currentTask.Text = "Adicionar pacote de aprovisionamento à imagem..." - Case "ITA" - allTasks.Text = "Aggiunta pacchetto approvvigionamento..." - currentTask.Text = "Aggiunta pacchetto approvvigionamento all'immagine..." - End Select - Case 1 - allTasks.Text = "Adding provisioning package..." - currentTask.Text = "Adding provisioning package to the image..." - Case 2 - allTasks.Text = "Añadiendo paquete de aprovisionamiento..." - currentTask.Text = "Añadiendo paquete de aprovisionamiento a la imagen..." - Case 3 - allTasks.Text = "Ajout d'un paquet de provisionnement en cours..." - currentTask.Text = "Ajout d'un paquet de provisionnement à l'image en cours..." - Case 4 - allTasks.Text = "Adicionando pacote de provisionamento..." - currentTask.Text = "Adicionar pacote de aprovisionamento à imagem..." - Case 5 - allTasks.Text = "Aggiunta pacchetto approvvigionamento..." - currentTask.Text = "Aggiunta pacchetto approvvigionamento all'immagine..." - End Select - LogView.AppendText("Adding provisioning package to the image..." & CrLf & - "Options:" & CrLf & CrLf & - "- Provisioning package: " & Quote & ppkgAdditionPackagePath & Quote & CrLf & - "- Catalog file: " & If(ppkgAdditionCatalogPath = "", "none specified", Quote & ppkgAdditionCatalogPath & Quote) & CrLf & - "- Commit image after adding provisioning package? " & If(ppkgAdditionCommit, "Yes", "No")) + allTasks.Text = LocalizationService.ForSection("Progress.ProvPackage.Add")("AddingPackage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ProvPackage.Add")("Image.Button") + LogView.AppendText(ProgressLogText("Adding.Provisioning.Package.To.The.Image") & CrLf & + ProgressLogText("Options") & CrLf & CrLf & + ProgressLogText("Provisioning.Package") & Quote & ppkgAdditionPackagePath & Quote & CrLf & + ProgressLogText("Catalog.File") & If(ppkgAdditionCatalogPath = "", ProgressLogText("None.Specified.2"), Quote & ppkgAdditionCatalogPath & Quote) & CrLf & + ProgressLogText("Commit.Image.After.Adding.Provisioning.Package") & If(ppkgAdditionCommit, ProgressLogText("Yes"), ProgressLogText("No"))) CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /add-provisioningpackage /packagepath=" & Quote & ppkgAdditionPackagePath & Quote & If(ppkgAdditionCatalogPath <> "" And File.Exists(ppkgAdditionCatalogPath), " /catalogpath=" & Quote & ppkgAdditionCatalogPath & Quote, "") RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If ppkgAdditionCommit Then DynaLog.LogMessage("Preparing to save changes...") AllPB.Value = AllPB.Maximum / taskCount currentTCont += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case "ESN" - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case "FRA" - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case "ITA" - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select - Case 1 - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case 2 - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case 3 - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case 4 - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case 5 - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select + taskCountLbl.Text = LocalizationService.ForSection("Progress").Format("Tasks.Label", currentTCont, taskCount) RunOps(8) Else AllPB.Value = 100 @@ -4471,149 +2868,68 @@ Public Class ProgressPanel Private Sub AddProvisionedAppxPackages(targetImage As String) DynaLog.LogMessage("Preparing to add provisioned AppX packages...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Adding AppX packages..." - currentTask.Text = "Preparing to add provisioned AppX packages..." - Case "ESN" - allTasks.Text = "Añadiendo paquetes aprovisionados AppX..." - currentTask.Text = "Preparándonos para añadir paquetes aprovisionados AppX..." - Case "FRA" - allTasks.Text = "Ajout de paquets AppX en cours..." - currentTask.Text = "Préparation de l'ajout de paquets AppX provisionnés en cours..." - Case "PTB", "PTG" - allTasks.Text = "A adicionar pacotes AppX..." - currentTask.Text = "A preparar a adição de pacotes AppX provisionados..." - Case "ITA" - allTasks.Text = "Aggiunta pacchetti AppX..." - currentTask.Text = "Preparazione aggiunta pacchetti AppX approvvigionati..." - End Select - Case 1 - allTasks.Text = "Adding AppX packages..." - currentTask.Text = "Preparing to add provisioned AppX packages..." - Case 2 - allTasks.Text = "Añadiendo paquetes aprovisionados AppX..." - currentTask.Text = "Preparándonos para añadir paquetes aprovisionados AppX..." - Case 3 - allTasks.Text = "Ajout de paquets AppX en cours..." - currentTask.Text = "Préparation de l'ajout de paquets AppX provisionnés en cours..." - Case 4 - allTasks.Text = "A adicionar pacotes AppX..." - currentTask.Text = "A preparar a adição de pacotes AppX provisionados..." - Case 5 - allTasks.Text = "Aggiunta pacchetti AppX..." - currentTask.Text = "Preparazione aggiunta pacchetti AppX approvvigionati..." - End Select - LogView.AppendText(CrLf & "Adding provisioned AppX packages..." & CrLf & - "Options:" & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.ProvAppx.Add")("AddingPackages.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ProvAppx.Add")("Preparing.Button") + LogView.AppendText(CrLf & ProgressLogText("Adding.Provisioned.APPX.Packages") & CrLf & + ProgressLogText("Options") & CrLf) If appxAdditionUseLicenseFile Then - LogView.AppendText("- Use a license file for AppX packages? Yes" & CrLf & - "- License file: " & appxAdditionLicenseFile & CrLf) + LogView.AppendText(ProgressLogText("Use.A.License.File.For.APPX.Packages.Yes") & CrLf & + ProgressLogText("License.File") & appxAdditionLicenseFile & CrLf) Else - LogView.AppendText("- Use a license file for AppX packages? No" & CrLf & - "- License file: not using" & CrLf) + LogView.AppendText(ProgressLogText("Use.A.License.File.For.APPX.Packages.No") & CrLf & + ProgressLogText("License.File.Not.Using") & CrLf) End If If appxAdditionUseCustomDataFile Then - LogView.AppendText("- Use a custom data file for AppX packages? Yes" & CrLf & - "- Custom data file: " & appxAdditionCustomDataFile & CrLf) + LogView.AppendText(ProgressLogText("Use.A.Custom.Data.File.For.APPX.Packages") & CrLf & + ProgressLogText("Custom.Data.File") & appxAdditionCustomDataFile & CrLf) Else - LogView.AppendText("- Use a custom data file for AppX packages? No" & CrLf & - "- Custom data file: not using" & CrLf) + LogView.AppendText(ProgressLogText("Use.A.Custom.Data.File.For.APPX.Packages.2") & CrLf & + ProgressLogText("Custom.Data.File.Not.Using") & CrLf) End If If appxAdditionUseAllRegions Then - LogView.AppendText("- Use all regions for AppX packages? Yes" & CrLf & - "- Package regions: all" & CrLf) + LogView.AppendText(ProgressLogText("Use.All.Regions.For.APPX.Packages.Yes") & CrLf & + ProgressLogText("Package.Regions.All") & CrLf) Else - LogView.AppendText("- Use all regions for AppX packages? No" & CrLf & - "- Package regions: " & Quote & appxAdditionRegions & Quote & CrLf) + LogView.AppendText(ProgressLogText("Use.All.Regions.For.APPX.Packages.No") & CrLf & + ProgressLogText("Package.Regions") & Quote & appxAdditionRegions & Quote & CrLf) End If If appxAdditionCommit Then - LogView.AppendText("- Commit image after adding AppX packages? Yes") + LogView.AppendText(ProgressLogText("Commit.Image.After.Adding.APPX.Packages.Yes")) Else - LogView.AppendText("- Commit image after adding AppX packages? No") + LogView.AppendText(ProgressLogText("Commit.Image.After.Adding.APPX.Packages.No")) End If - LogView.AppendText(CrLf & CrLf & "Enumerating AppX packages to add...") + LogView.AppendText(CrLf & CrLf & ProgressLogText("Enumerating.APPX.Packages.To.Add")) Thread.Sleep(500) - LogView.AppendText(CrLf & "Total number of packages to add: " & appxAdditionCount) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Adding AppX packages..." - Case "ESN" - currentTask.Text = "Añadiendo paquetes AppX..." - Case "FRA" - currentTask.Text = "Ajout de paquets AppX en cours..." - Case "PTB", "PTG" - currentTask.Text = "A adicionar pacotes AppX..." - Case "ITA" - currentTask.Text = "Aggiunta pacchetti AppX..." - End Select - Case 1 - currentTask.Text = "Adding AppX packages..." - Case 2 - currentTask.Text = "Añadiendo paquetes AppX..." - Case 3 - currentTask.Text = "Ajout de paquets AppX en cours..." - Case 4 - currentTask.Text = "A adicionar pacotes AppX..." - Case 5 - currentTask.Text = "Aggiunta pacchetti AppX..." - End Select + LogView.AppendText(CrLf & ProgressLogText("Total.Number.Of.Packages.To.Add") & appxAdditionCount) + currentTask.Text = LocalizationService.ForSection("Progress.ProvAppx.Add")("AddingPackages.Item") CurrentPB.Maximum = appxAdditionCount For x = 0 To Array.LastIndexOf(appxAdditionPackages, appxAdditionLastPackage) If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Adding package " & (x + 1) & " of " & appxAdditionCount & "..." - Case "ESN" - currentTask.Text = "Añadiendo paquete " & (x + 1) & " de " & appxAdditionCount & "..." - Case "FRA" - currentTask.Text = "Ajout du paquet " & (x + 1) & " de " & appxAdditionCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "A adicionar pacote " & (x + 1) & " de " & appxAdditionCount & "..." - Case "ITA" - currentTask.Text = "Aggiunta pacchetto " & (x + 1) & " di " & appxAdditionCount & "..." - End Select - Case 1 - currentTask.Text = "Adding package " & (x + 1) & " of " & appxAdditionCount & "..." - Case 2 - currentTask.Text = "Añadiendo paquete " & (x + 1) & " de " & appxAdditionCount & "..." - Case 3 - currentTask.Text = "Ajout du paquet " & (x + 1) & " de " & appxAdditionCount & " en cours..." - Case 4 - currentTask.Text = "A adicionar pacote " & (x + 1) & " de " & appxAdditionCount & "..." - Case 5 - currentTask.Text = "Aggiunta pacchetto " & (x + 1) & " di " & appxAdditionCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.ProvAppx.Add").Format("AddingPackage.Item", x + 1, appxAdditionCount) LogView.AppendText(CrLf & - "Package " & (x + 1) & " of " & appxAdditionCount) + ProgressLogText("Package") & (x + 1) & ProgressLogText("Of.Word") & appxAdditionCount) CurrentPB.Value = x + 1 DynaLog.LogMessage("Information about the AppX package:") DynaLog.LogMessage(appxAdditionPackageList(x).ToString()) LogView.AppendText(CrLf & - "- AppX package file: " & appxAdditionPackageList(x).PackageFile & CrLf & - "- Application name: " & appxAdditionPackageList(x).PackageName & CrLf & - "- Application publisher: " & appxAdditionPackageList(x).PackagePublisher & CrLf & - "- Application version: " & appxAdditionPackageList(x).PackageVersion & CrLf) + ProgressLogText("APPX.Package.File") & appxAdditionPackageList(x).PackageFile & CrLf & + ProgressLogText("Application.Name") & appxAdditionPackageList(x).PackageName & CrLf & + ProgressLogText("Application.Publisher") & appxAdditionPackageList(x).PackagePublisher & CrLf & + ProgressLogText("Application.Version") & appxAdditionPackageList(x).PackageVersion & CrLf) ' Detect if it is an encrypted application DynaLog.LogMessage("Extension of AppX package: " & Path.GetExtension(appxAdditionPackageList(x).PackageFile)) If Path.GetExtension(appxAdditionPackageList(x).PackageFile).Replace(".", "").Trim().StartsWith("e", StringComparison.OrdinalIgnoreCase) AndAlso OnlineMgmt Then DynaLog.LogMessage("The application is encrypted and the active installation is being managed. Adding package using PowerShell...") ' Run PowerShell command. Support will be improved - LogView.AppendText(CrLf & "The application about to be added is an encrypted file. Since the program is managing the active installation, a PowerShell command will be run." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("The.Application.About.To.Be.Added.Is.An") & CrLf) Dim AppxAuxProc As New Process() AppxAuxProc.StartInfo.FileName = Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\system32\WindowsPowerShell\v1.0\powershell.exe" CommandArgs = "-Command Add-AppxPackage -Path '" & appxAdditionPackageList(x).PackageFile & "'" AppxAuxProc.StartInfo.Arguments = CommandArgs AppxAuxProc.Start() AppxAuxProc.WaitForExit() - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(AppxAuxProc.ExitCode).Length < 8 Then errCode = AppxAuxProc.ExitCode Else @@ -4625,9 +2941,9 @@ Public Class ProgressPanel appxFailedAdditions += 1 End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If PackageErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -4646,7 +2962,7 @@ Public Class ProgressPanel ElseIf Path.GetExtension(appxAdditionPackageList(x).PackageFile).Replace(".", "").Trim().StartsWith("e", StringComparison.OrdinalIgnoreCase) AndAlso Not OnlineMgmt Then DynaLog.LogMessage("The application is encrypted but the active installation is not being managed.") ' Continue loop without installing application - LogView.AppendText(CrLf & "The application about to be added is an encrypted file. Encrypted packages can only be added to active installations. Skipping this package..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("The.Application.About.To.Be.Added.Is.An.2") & CrLf) Continue For Else DynaLog.LogMessage("The application is not encrypted. Continuing addition...") @@ -4663,30 +2979,30 @@ Public Class ProgressPanel DynaLog.LogMessage("Either no license file has been specified or it does not exist in the file system.") If appxAdditionPackageList(x).PackageLicenseFile <> "" Then LogView.AppendText(CrLf & - "Warning: the license file does not exist. Continuing without one..." & CrLf & - " Do note that, if this app requires a license file, it may fail addition." & CrLf & - " Also, this may compromise the image.") + ProgressLogText("Warning.The.License.File.Does.Not.Exist.Continuing") & CrLf & + ProgressLogText("Do.Note.That.If.This.App.Requires.A") & CrLf & + ProgressLogText("Also.This.May.Compromise.The.Image")) End If CommandArgs &= " /skiplicense" End If ' Inform user that a package will be installed with dependencies DynaLog.LogMessage("Count of dependencies: " & appxAdditionPackageList(x).PackageSpecifiedDependencies.Count) If appxAdditionPackageList(x).PackageSpecifiedDependencies.Count > 0 Then - LogView.AppendText("- The following dependency packages will be installed alongside this application:" & CrLf) + LogView.AppendText(ProgressLogText("The.Following.Dependency.Packages.Will.Be.Installed.Alongside") & CrLf) End If ' Add dependencies For Each Dependency As AppxDependency In appxAdditionPackageList(x).PackageSpecifiedDependencies DynaLog.LogMessage("Verifying if dependency " & Quote & Path.GetFileName(Dependency.DependencyFile) & Quote & " exists...") If File.Exists(Dependency.DependencyFile) Then DynaLog.LogMessage("The dependency exists in the file system.") - LogView.AppendText(" - Dependency: " & Quote & Path.GetFileName(Dependency.DependencyFile) & Quote & CrLf) + LogView.AppendText(ProgressLogText("Dependency") & Quote & Path.GetFileName(Dependency.DependencyFile) & Quote & CrLf) CommandArgs &= " /dependencypackagepath=" & Quote & Dependency.DependencyFile & Quote Else DynaLog.LogMessage("The dependency does not exist in the file system.") LogView.AppendText(CrLf & - "Warning: the dependency" & CrLf & + ProgressLogText("Warning.The.Dependency") & CrLf & Quote & Dependency.DependencyFile & Quote & CrLf & - "does not exist in the file system. Skipping dependency...") + ProgressLogText("Does.Not.Exist.In.The.File.System.Skipping")) Continue For End If Next @@ -4696,7 +3012,7 @@ Public Class ProgressPanel ElseIf appxAdditionPackageList(x).PackageCustomDataFile <> "" And Not File.Exists(appxAdditionPackageList(x).PackageCustomDataFile) Then DynaLog.LogMessage("A custom data file has been specified but it does not exist in the file system.") LogView.AppendText(CrLf & - "Warning: the custom data file does not exist. Continuing without one...") + ProgressLogText("Warning.The.Custom.Data.File.Does.Not.Exist")) End If If (FileVersionInfo.GetVersionInfo(DismProgram).ProductMajorPart = 10 And FileVersionInfo.GetVersionInfo(DismProgram).ProductBuildPart >= 17134) And (ImgVersion.Major = 10 And ImgVersion.Build >= 17134) Then @@ -4725,7 +3041,7 @@ Public Class ProgressPanel End If RunProcess(DismProgram, CommandArgs) End If - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else @@ -4737,9 +3053,9 @@ Public Class ProgressPanel appxFailedAdditions += 1 End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If PackageErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -4756,40 +3072,16 @@ Public Class ProgressPanel End If Next CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected AppX packages..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.APPX.Packages") & CrLf) For x = 0 To PackageErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Package no. " & (x + 1) & ": " & PackageErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Package.No") & (x + 1) & ": " & PackageErrorCodes(x)) Next Thread.Sleep(2000) If appxAdditionCommit Then DynaLog.LogMessage("Preparing to save changes...") AllPB.Value = AllPB.Maximum / taskCount currentTCont += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case "ESN" - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case "FRA" - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case "ITA" - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select - Case 1 - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case 2 - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case 3 - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case 4 - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case 5 - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select + taskCountLbl.Text = LocalizationService.ForSection("Progress").Format("Tasks.Label", currentTCont, taskCount) RunOps(8) Else AllPB.Value = 100 @@ -4808,19 +3100,19 @@ Public Class ProgressPanel DynaLog.LogMessage(".pckgdep files for AppX package " & Quote & removalStoreApp & Quote & " = 0. This app is not registered to a user") ' Application is not registered to any user LogView.AppendText(CrLf & - "- Application is registered to a user? No") + ProgressLogText("Application.Is.Registered.To.A.User.No")) Else DynaLog.LogMessage(".pckgdep files for AppX package " & Quote & removalStoreApp & Quote & " > 0. This app is registered to users") ' Application is registered to a user LogView.AppendText(CrLf & - "- Application is registered to a user? Yes" & CrLf & - " The removal of this application may require you to use PowerShell to completely remove it") + ProgressLogText("Application.Is.Registered.To.A.User.Yes") & CrLf & + ProgressLogText("The.Removal.Of.This.Application.May.Require.You")) End If Else DynaLog.LogMessage(".pckgdep files for AppX package " & Quote & removalStoreApp & Quote & " = 0. This app is not registered to a user") ' Application is not registered to any user LogView.AppendText(CrLf & - "- Application is registered to a user? No") + ProgressLogText("Application.Is.Registered.To.A.User.No")) End If End Sub @@ -4828,80 +3120,23 @@ Public Class ProgressPanel Dim extAppxHelperPath As String = Path.Combine(Application.StartupPath, "bin", "extps1", "online_appx_removal.ps1") If File.Exists(extAppxHelperPath) Then DynaLog.LogMessage("AppX removal helper exists. Proceeding with the removal of those bastards!") - LogView.AppendText(CrLf & "A PowerShell helper will be used to remove AppX packages. Please wait...") + LogView.AppendText(CrLf & ProgressLogText("A.PowerShell.Helper.Will.Be.Used.To.Remove")) RunProcess(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Windows), "system32", "WindowsPowerShell", "v1.0", "powershell.exe"), String.Format("-executionpolicy Bypass -noprofile -nologo -file {0}{1}{0} -appxFullNames {0}{2}{0}", Quote, extAppxHelperPath, String.Join(";", PackageNames.Where(Function(PackageName) Not String.IsNullOrEmpty(PackageName))))) - LogView.AppendText(CrLf & "Log off for the deprovisioning of applications to be fully carried out.") + LogView.AppendText(CrLf & ProgressLogText("Log.Off.For.The.Deprovisioning.Of.Applications.To")) End If End Sub Private Sub RemoveProvisionedAppxPackages(targetImage As String) DynaLog.LogMessage("Preparing to remove AppX packages...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Removing AppX packages..." - currentTask.Text = "Preparing to remove provisioned AppX packages..." - Case "ESN" - allTasks.Text = "Eliminando paquetes AppX..." - currentTask.Text = "Preparándonos para eliminar paquetes aprovisionados AppX..." - Case "FRA" - allTasks.Text = "Suppression des paquets AppX en cours..." - currentTask.Text = "Préparation de la suppression des paquets AppX en cours..." - Case "PTB", "PTG" - allTasks.Text = "Removendo pacotes AppX..." - currentTask.Text = "A preparar a remoção de pacotes AppX provisionados..." - Case "ITA" - allTasks.Text = "Rimozione pacchetti AppX..." - currentTask.Text = "Preparazione rimozione pacchetti AppX approvvigionati..." - End Select - Case 1 - allTasks.Text = "Removing AppX packages..." - currentTask.Text = "Preparing to remove provisioned AppX packages..." - Case 2 - allTasks.Text = "Eliminando paquetes AppX..." - currentTask.Text = "Preparándonos para eliminar paquetes aprovisionados AppX..." - Case 3 - allTasks.Text = "Suppression des paquets AppX en cours..." - currentTask.Text = "Préparation de la suppression des paquets AppX en cours..." - Case 4 - allTasks.Text = "Removendo pacotes AppX..." - currentTask.Text = "A preparar a remoção de pacotes AppX provisionados..." - Case 5 - allTasks.Text = "Rimozione pacchetti AppX..." - currentTask.Text = "Preparazione rimozione pacchetti AppX approvvigionati..." - End Select - LogView.AppendText(CrLf & "Removing provisioned AppX packages..." & CrLf & CrLf & - "Enumerating AppX packages to remove...") + allTasks.Text = LocalizationService.ForSection("Progress.ProvAppx.Remove")("RemovingPackages.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ProvAppx.Remove")("Preparing.Button") + LogView.AppendText(CrLf & ProgressLogText("Removing.Provisioned.APPX.Packages") & CrLf & CrLf & + ProgressLogText("Enumerating.APPX.Packages.To.Remove")) Thread.Sleep(500) - LogView.AppendText(CrLf & "Total number of packages to remove: " & appxRemovalCount) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Removing AppX packages..." - Case "ESN" - currentTask.Text = "Eliminando paquetes AppX..." - Case "FRA" - currentTask.Text = "Suppression des paquets AppX en cours..." - Case "PTB", "PTG" - currentTask.Text = "Removendo pacotes AppX..." - Case "ITA" - currentTask.Text = "Rimozione pacchetti AppX..." - End Select - Case 1 - currentTask.Text = "Removing AppX packages..." - Case 2 - currentTask.Text = "Eliminando paquetes AppX..." - Case 3 - currentTask.Text = "Suppression des paquets AppX en cours..." - Case 4 - currentTask.Text = "Removendo pacotes AppX..." - Case 5 - currentTask.Text = "Rimozione pacchetti AppX..." - End Select + LogView.AppendText(CrLf & ProgressLogText("Total.Number.Of.Packages.To.Remove") & appxRemovalCount) + currentTask.Text = LocalizationService.ForSection("Progress.ProvAppx.Remove")("RemovingPackages.Item") CurrentPB.Maximum = appxRemovalCount If OnlineMgmt Then RemoveOnlineAppxPackages(appxRemovalPackages) @@ -4914,46 +3149,22 @@ Public Class ProgressPanel If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs Dim removalStoreApp As String = appxRemovalPackages(x) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Removing package " & (x + 1) & " of " & appxRemovalCount & "..." - Case "ESN" - currentTask.Text = "Eliminando paquete " & (x + 1) & " de " & appxRemovalCount & "..." - Case "FRA" - currentTask.Text = "Suppression du paquet " & (x + 1) & " de " & appxRemovalCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "A remover o pacote " & (x + 1) & " de " & appxRemovalCount & "..." - Case "ITA" - currentTask.Text = "Rimozione pacchetto " & (x + 1) & " di " & appxRemovalCount & "..." - End Select - Case 1 - currentTask.Text = "Removing package " & (x + 1) & " of " & appxRemovalCount & "..." - Case 2 - currentTask.Text = "Eliminando paquete " & (x + 1) & " de " & appxRemovalCount & "..." - Case 3 - currentTask.Text = "Suppression du paquet " & (x + 1) & " de " & appxRemovalCount & " en cours..." - Case 4 - currentTask.Text = "A remover o pacote " & (x + 1) & " de " & appxRemovalCount & "..." - Case 5 - currentTask.Text = "Rimozione pacchetto " & (x + 1) & " di " & appxRemovalCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.ProvAppx.Remove").Format("RemovingPackage.Item", x + 1, appxRemovalCount) LogView.AppendText(CrLf & - "Package " & (x + 1) & " of " & appxRemovalCount) + ProgressLogText("Package") & (x + 1) & ProgressLogText("Of.Word") & appxRemovalCount) CurrentPB.Value = x + 1 ' Display package name and DisplayName LogView.AppendText(CrLf & - "- Package name: " & appxRemovalPackages(x) & CrLf & - "- Display name: " & appxRemovalPkgNames(x)) + ProgressLogText("Package.Name") & appxRemovalPackages(x) & CrLf & + ProgressLogText("Display.Name") & appxRemovalPkgNames(x)) ' Display whether an application is registered to a user CheckAppRegistrationStatus(removalStoreApp) ' Initialize command. Its syntax is simple, so don't spend too much time determining options LogView.AppendText(CrLf & CrLf & - "Processing package...") + ProgressLogText("Processing.Package")) CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /remove-provisionedappxpackage /packagename=" & appxRemovalPackages(x) RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else @@ -4965,9 +3176,9 @@ Public Class ProgressPanel appxFailedRemovals += 1 End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If PackageErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -4984,9 +3195,9 @@ Public Class ProgressPanel End If Next CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected AppX packages..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.APPX.Packages") & CrLf) For x = 0 To PackageErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Package no. " & (x + 1) & ": " & PackageErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Package.No") & (x + 1) & ": " & PackageErrorCodes(x)) Next Thread.Sleep(2000) AllPB.Value = 100 @@ -5006,41 +3217,8 @@ Public Class ProgressPanel Private Sub SetKeyboardLayeredDriver(targetImage As String) DynaLog.LogMessage("Preparing to set keyboard layered driver...") DynaLog.LogMessage("Type of new keyboard layered driver: " & KeyboardLayeredDriverType) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Setting layered driver..." - currentTask.Text = "Setting keyboard layered driver..." - Case "ESN" - allTasks.Text = "Estableciendo controlador superpuesto..." - currentTask.Text = "Estableciendo controlador de teclado superpuesto..." - Case "FRA" - allTasks.Text = "Configuration du pilote en couches en cours..." - currentTask.Text = "Configuration du pilote en couches pour le clavier en cours..." - Case "PTB", "PTG" - allTasks.Text = "Configuração do controlador em camadas..." - currentTask.Text = "Configuração do controlador de teclado em camadas..." - Case "ITA" - allTasks.Text = "Impostazione driver stratificato..." - currentTask.Text = "Impostazione driver stratificato tastiera..." - End Select - Case 1 - allTasks.Text = "Setting layered driver..." - currentTask.Text = "Setting keyboard layered driver..." - Case 2 - allTasks.Text = "Estableciendo controlador superpuesto..." - currentTask.Text = "Estableciendo controlador de teclado superpuesto..." - Case 3 - allTasks.Text = "Configuration du pilote en couches en cours..." - currentTask.Text = "Configuration du pilote en couches pour le clavier en cours..." - Case 4 - allTasks.Text = "Configuração do controlador em camadas..." - currentTask.Text = "Configuração do controlador de teclado em camadas..." - Case 5 - allTasks.Text = "Impostazione driver stratificato..." - currentTask.Text = "Impostazione driver stratificato la tastiera..." - End Select + allTasks.Text = LocalizationService.ForSection("Progress.LayeredDriver")("SettingDriver.Button") + currentTask.Text = LocalizationService.ForSection("Progress.LayeredDriver")("Setting.Keyboard.Button") currentLay = New KeyboardDrivers(currentKeybLayeredDriverType).LayeredDriver newKeybLay = New KeyboardDrivers(KeyboardLayeredDriverType).LayeredDriver Dim currentLayout As String = "" @@ -5077,21 +3255,21 @@ Public Class ProgressPanel Case KeyboardDrivers.LayeredKeyboardDriver.J_106109Key newLayout = "Japanese Keyboard (106/109 Key)" End Select - LogView.AppendText(CrLf & "Setting the keyboard layered driver..." & CrLf & - "- Current keyboard layered driver: " & currentLayout & CrLf & - "- New keyboard layered driver: " & newLayout & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Setting.The.Keyboard.Layered.Driver") & CrLf & + ProgressLogText("Current.Keyboard.Layered.Driver") & currentLayout & CrLf & + ProgressLogText("New.Keyboard.Layered.Driver") & newLayout & CrLf) CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /set-layereddriver:" & KeyboardLayeredDriverType RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End Sub @@ -5106,113 +3284,32 @@ Public Class ProgressPanel DynaLog.LogMessage("- Capability source: " & Quote & capAdditionSource & Quote) DynaLog.LogMessage("- Limit Windows Update access (only for active installations)? " & If(capAdditionLimitWUAccess, "Yes", "No")) DynaLog.LogMessage("- Save changes to the Windows image after finishing? " & If(capAdditionCommit, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Adding capabilities..." - currentTask.Text = "Preparing to add capabilities..." - Case "ESN" - allTasks.Text = "Añadiendo funcionalidades..." - currentTask.Text = "Preparándonos para añadir funcionalidades..." - Case "FRA" - allTasks.Text = "Ajout des capacités en cours..." - currentTask.Text = "Préparation de l'ajout des capacités en cours..." - Case "PTB", "PTG" - allTasks.Text = "A adicionar capacidades..." - currentTask.Text = "A preparar para adicionar capacidades..." - Case "ITA" - allTasks.Text = "Aggiunta capacità..." - currentTask.Text = "Preparazione aggiunta capacità..." - End Select - Case 1 - allTasks.Text = "Adding capabilities..." - currentTask.Text = "Preparing to add capabilities..." - Case 2 - allTasks.Text = "Añadiendo funcionalidades..." - currentTask.Text = "Preparándonos para añadir funcionalidades..." - Case 3 - allTasks.Text = "Ajout des capacités en cours..." - currentTask.Text = "Préparation de l'ajout des capacités en cours..." - Case 4 - allTasks.Text = "A adicionar capacidades..." - currentTask.Text = "A preparar para adicionar capacidades..." - Case 5 - allTasks.Text = "Aggiunta capacità..." - currentTask.Text = "Preparazione aggiunta capacità..." - End Select + allTasks.Text = LocalizationService.ForSection("Progress.AddCapabilities")("Add.Capabilities.Button") + currentTask.Text = LocalizationService.ForSection("Progress.AddCapabilities")("PrepareAdd.Button") DynaLog.LogMessage("Boot mode of the host system: " & SystemInformation.BootMode) - LogView.AppendText(CrLf & "Adding capabilities to mounted image..." & CrLf & - "Options:" & CrLf & - "- Use a source for capability addition? " & If(capAdditionUseSource, "Yes", "No") & CrLf & - "- Capability source: " & If(capAdditionUseSource, Quote & capAdditionSource & Quote, "No source has been provided") & CrLf & - "- Limit access to Windows Update? " & If(capAdditionLimitWUAccess And OnlineMgmt, "Yes", If(capAdditionLimitWUAccess And Not OnlineMgmt, "No, this is not an online installation", "No")) & If(Not capAdditionLimitWUAccess And OnlineMgmt And SystemInformation.BootMode = BootMode.FailSafe, ", the system is in Safe Mode", "") & CrLf & - "- Commit image after adding capabilities? " & If(capAdditionCommit, "Yes", "No") & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Adding.Capabilities.To.Mounted.Image") & CrLf & + ProgressLogText("Options") & CrLf & + ProgressLogText("Use.A.Source.For.Capability.Addition") & If(capAdditionUseSource, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Capability.Source") & If(capAdditionUseSource, Quote & capAdditionSource & Quote, ProgressLogText("No.Source.Has.Been.Provided")) & CrLf & + ProgressLogText("Limit.Access.To.Windows.Update") & If(capAdditionLimitWUAccess And OnlineMgmt, ProgressLogText("Yes"), If(capAdditionLimitWUAccess And Not OnlineMgmt, ProgressLogText("No.This.Is.Not.An.Online.Installation"), ProgressLogText("No"))) & If(Not capAdditionLimitWUAccess And OnlineMgmt And SystemInformation.BootMode = BootMode.FailSafe, ProgressLogText("The.System.Is.In.Safe.Mode"), "") & CrLf & + ProgressLogText("Commit.Image.After.Adding.Capabilities") & If(capAdditionCommit, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf) If capAdditionUseSource And Not Directory.Exists(capAdditionSource) Then DynaLog.LogMessage("A source is expected to be used but it does not exist in the file system.") LogView.AppendText(CrLf & - "Warning: the specified source does not exist in the file system, and it will be skipped") + ProgressLogText("Warning.The.Specified.Source.Does.Not.Exist.In")) End If - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Adding capabilities..." - Case "ESN" - currentTask.Text = "Añadiendo funcionalidades..." - Case "FRA" - currentTask.Text = "Ajout des capacités en cours..." - Case "PTB", "PTG" - currentTask.Text = "A adicionar capacidades..." - Case "ITA" - currentTask.Text = "Aggiunta capacità..." - End Select - Case 1 - currentTask.Text = "Adding capabilities..." - Case 2 - currentTask.Text = "Añadiendo funcionalidades..." - Case 3 - currentTask.Text = "Ajout des capacités en cours..." - Case 4 - currentTask.Text = "A adicionar capacidades..." - Case 5 - currentTask.Text = "Aggiunta capacità..." - End Select - LogView.AppendText(CrLf & "Enumerating capabilities to add. Please wait..." & CrLf & - "Total number of capabilities: " & capAdditionCount) + currentTask.Text = LocalizationService.ForSection("Progress.AddCapabilities")("Add.Capabilities.Item") + LogView.AppendText(CrLf & ProgressLogText("Enumerating.Capabilities.To.Add.Please.Wait") & CrLf & + ProgressLogText("Total.Number.Of.Capabilities") & capAdditionCount) CurrentPB.Maximum = capAdditionCount For x = 0 To Array.LastIndexOf(capAdditionIds, capAdditionLastId) If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Adding capability " & (x + 1) & " of " & capAdditionCount & "..." - Case "ESN" - currentTask.Text = "Añadiendo funcionalidad " & (x + 1) & " de " & capAdditionCount & "..." - Case "FRA" - currentTask.Text = "Ajout de la capacité " & (x + 1) & " de " & capAdditionCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "Adicionar capacidade " & (x + 1) & " de " & capAdditionCount & "..." - Case "ITA" - currentTask.Text = "Aggiunta capacità " & (x + 1) & " di " & capAdditionCount & "..." - End Select - Case 1 - currentTask.Text = "Adding capability " & (x + 1) & " of " & capAdditionCount & "..." - Case 2 - currentTask.Text = "Añadiendo funcionalidad " & (x + 1) & " de " & capAdditionCount & "..." - Case 3 - currentTask.Text = "Ajout de la capacité " & (x + 1) & " de " & capAdditionCount & " en cours..." - Case 4 - currentTask.Text = "Adicionar capacidade " & (x + 1) & " de " & capAdditionCount & "..." - Case 5 - currentTask.Text = "Aggiunta capacità " & (x + 1) & " di " & capAdditionCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.AddCapabilities").Format("AddingCapability.Item", x + 1, capAdditionCount) CurrentPB.Value = x + 1 DynaLog.LogMessage("Getting information about capability " & Quote & capAdditionIds(x) & Quote & "...") LogView.AppendText(CrLf & - "Capability " & (x + 1) & " of " & capAdditionCount) + ProgressLogText("Capability") & (x + 1) & ProgressLogText("Of.Word") & capAdditionCount) ' Get capability information ' Try opening the session. If API is not initialized, initialize it Try @@ -5224,9 +3321,9 @@ Public Class ProgressPanel ' Get capability information Dim capInfo As DismCapabilityInfo = DismApi.GetCapabilityInfo(imgSession, capAdditionIds(x)) LogView.AppendText(CrLf & CrLf & - "- Capability identity: " & capInfo.Name & CrLf & - "- Capability name: " & capInfo.DisplayName & CrLf & - "- Capability description: " & capInfo.Description & CrLf) + ProgressLogText("Capability.Identity") & capInfo.Name & CrLf & + ProgressLogText("Capability.Name") & capInfo.DisplayName & CrLf & + ProgressLogText("Capability.Description") & capInfo.Description & CrLf) End Using Finally Try @@ -5238,11 +3335,15 @@ Public Class ProgressPanel End Try CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /norestart /add-capability /capabilityname=" & capAdditionIds(x) If capAdditionUseSource And Directory.Exists(capAdditionSource) Then - CommandArgs &= " /source=" & Quote & capAdditionSource & Quote + ' Like image captures, capability additions will fail if the source is in the root + ' of a volume and is quoted. + Dim SourceIsRooted As Boolean = Path.GetPathRoot(capAdditionSource) = capAdditionSource + Dim SourcePath As String = If(SourceIsRooted, capAdditionSource, Quote & capAdditionSource & Quote) + CommandArgs &= " /source=" & SourcePath End If If capAdditionLimitWUAccess And OnlineMgmt Then CommandArgs &= " /limitaccess" RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) errCode = Hex(Decimal.ToInt32(DismExitCode)) If DismExitCode = 0 Then capSuccessfulAdditions += 1 @@ -5250,9 +3351,9 @@ Public Class ProgressPanel capFailedAdditions += 1 End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If FeatureErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -5269,40 +3370,16 @@ Public Class ProgressPanel End If Next CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected capabilities..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.Capabilities") & CrLf) For x = 0 To FeatureErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Capability no. " & (x + 1) & ": " & FeatureErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Capability.No") & (x + 1) & ": " & FeatureErrorCodes(x)) Next Thread.Sleep(2000) If capAdditionCommit Then DynaLog.LogMessage("Preparing to save changes...") AllPB.Value = AllPB.Maximum / taskCount currentTCont += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case "ESN" - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case "FRA" - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case "ITA" - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select - Case 1 - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case 2 - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case 3 - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case 4 - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case 5 - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select + taskCountLbl.Text = LocalizationService.ForSection("Progress").Format("Tasks.Label", currentTCont, taskCount) RunOps(8) End If If capSuccessfulAdditions > 0 Then @@ -5312,108 +3389,27 @@ Public Class ProgressPanel End If If FeatureErrorCodes.Contains("BC2") Then DynaLog.LogMessage("A system restart is needed to fully apply some capabilities.") - LogView.AppendText(CrLf & "Some capabilities require a system restart to be fully processed. Save your work, close your programs, and restart when ready") + LogView.AppendText(CrLf & ProgressLogText("Some.Capabilities.Require.A.System.Restart.To.Be")) End If End Sub Private Sub RemoveCapabilities(targetImage As String) DynaLog.LogMessage("Preparing to remove capabilities...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Removing capabilities..." - currentTask.Text = "Preparing to remove capabilities..." - Case "ESN" - allTasks.Text = "Eliminando funcionalidades..." - currentTask.Text = "Preparándonos para eliminar funcionalidades..." - Case "FRA" - allTasks.Text = "Suppression des capacités en cours..." - currentTask.Text = "Préparation de la suppression des capacités en cours..." - Case "PTB", "PTG" - allTasks.Text = "A remover capacidades..." - currentTask.Text = "A preparar a remoção de capacidades..." - Case "ITA" - allTasks.Text = "Rimozione capacità..." - currentTask.Text = "Preparazione rimozione capacità..." - End Select - Case 1 - allTasks.Text = "Removing capabilities..." - currentTask.Text = "Preparing to remove capabilities..." - Case 2 - allTasks.Text = "Eliminando funcionalidades..." - currentTask.Text = "Preparándonos para eliminar funcionalidades..." - Case 3 - allTasks.Text = "Suppression des capacités en cours..." - currentTask.Text = "Préparation de la suppression des capacités en cours..." - Case 4 - allTasks.Text = "A remover capacidades..." - currentTask.Text = "A preparar a remoção de capacidades..." - Case 5 - allTasks.Text = "Rimozione capacità..." - currentTask.Text = "Preparazione rimozione capacità..." - End Select - LogView.AppendText(CrLf & "Removing capabilities from mounted image..." & CrLf) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Removing capabilities..." - Case "ESN" - currentTask.Text = "Eliminando funcionalidades..." - Case "FRA" - currentTask.Text = "Suppression des capacités en cours..." - Case "PTB", "PTG" - currentTask.Text = "A remover capacidades..." - Case "ITA" - currentTask.Text = "Rimozione capacità..." - End Select - Case 1 - currentTask.Text = "Removing capabilities..." - Case 2 - currentTask.Text = "Eliminando funcionalidades..." - Case 3 - currentTask.Text = "Suppression des capacités en cours..." - Case 4 - currentTask.Text = "A remover capacidades..." - Case 5 - currentTask.Text = "Rimozione capacità..." - End Select - LogView.AppendText(CrLf & "Enumerating capabilities to remove. Please wait..." & CrLf & - "Total number of capabilities: " & capRemovalCount) + allTasks.Text = LocalizationService.ForSection("Progress.RemoveCapabilities")("Remove.Capabilities.Button") + currentTask.Text = LocalizationService.ForSection("Progress.RemoveCaps")("Preparing.Button") + LogView.AppendText(CrLf & ProgressLogText("Removing.Capabilities.From.Mounted.Image") & CrLf) + currentTask.Text = LocalizationService.ForSection("Progress.RemoveCapabilities")("Remove.Capabilities.Item") + LogView.AppendText(CrLf & ProgressLogText("Enumerating.Capabilities.To.Remove.Please.Wait") & CrLf & + ProgressLogText("Total.Number.Of.Capabilities") & capRemovalCount) CurrentPB.Maximum = capRemovalCount For x = 0 To Array.LastIndexOf(capRemovalIds, capRemovalLastId) If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Removing capability " & (x + 1) & " of " & capRemovalCount & "..." - Case "ESN" - currentTask.Text = "Eliminando funcionalidad " & (x + 1) & " de " & capRemovalCount & "..." - Case "FRA" - currentTask.Text = "Suppression de la capacité " & (x + 1) & " de " & capRemovalCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "Remover a capacidade " & (x + 1) & " de " & capRemovalCount & "..." - Case "ITA" - currentTask.Text = "Rimozione capacità " & (x + 1) & " di " & capRemovalCount & "..." - End Select - Case 1 - currentTask.Text = "Removing capability " & (x + 1) & " of " & capRemovalCount & "..." - Case 2 - currentTask.Text = "Eliminando funcionalidad " & (x + 1) & " de " & capRemovalCount & "..." - Case 3 - currentTask.Text = "Suppression de la capacité " & (x + 1) & " de " & capRemovalCount & " en cours..." - Case 4 - currentTask.Text = "Remover a capacidade " & (x + 1) & " de " & capRemovalCount & "..." - Case 5 - currentTask.Text = "Rimozione capacità " & (x + 1) & " di " & capRemovalCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.RemoveCapabilities").Format("Capability.Item", x + 1, capRemovalCount) DynaLog.LogMessage("Getting information about capability " & Quote & capRemovalIds(x) & Quote & "...") CurrentPB.Value = x + 1 LogView.AppendText(CrLf & - "Capability " & (x + 1) & " of " & capRemovalCount) + ProgressLogText("Capability") & (x + 1) & ProgressLogText("Of.Word") & capRemovalCount) Try DynaLog.LogMessage("Initializing API...") DismApi.Initialize(DismLogLevel.LogErrors) @@ -5422,9 +3418,9 @@ Public Class ProgressPanel DynaLog.LogMessage("Getting capability information...") Dim capInfo As DismCapabilityInfo = DismApi.GetCapabilityInfo(imgSession, capRemovalIds(x)) LogView.AppendText(CrLf & CrLf & - "- Capability identity: " & capInfo.Name & CrLf & - "- Capability name: " & capInfo.DisplayName & CrLf & - "- Capability description: " & capInfo.Description & CrLf) + ProgressLogText("Capability.Identity") & capInfo.Name & CrLf & + ProgressLogText("Capability.Name") & capInfo.DisplayName & CrLf & + ProgressLogText("Capability.Description") & capInfo.Description & CrLf) End Using Finally Try @@ -5436,7 +3432,7 @@ Public Class ProgressPanel End Try CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /norestart /remove-capability /capabilityname=" & capRemovalIds(x) RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) errCode = Hex(Decimal.ToInt32(DismExitCode)) If DismExitCode = 0 Then capSuccessfulRemovals += 1 @@ -5444,9 +3440,9 @@ Public Class ProgressPanel capFailedRemovals += 1 End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If FeatureErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -5463,9 +3459,9 @@ Public Class ProgressPanel End If Next CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected capabilities..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.Capabilities") & CrLf) For x = 0 To FeatureErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Capability no. " & (x + 1) & ": " & FeatureErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Capability.No") & (x + 1) & ": " & FeatureErrorCodes(x)) Next Thread.Sleep(2000) If capSuccessfulRemovals > 0 Then @@ -5475,7 +3471,7 @@ Public Class ProgressPanel End If If FeatureErrorCodes.Contains("BC2") Then DynaLog.LogMessage("A system restart is needed to fully remove some capabilities.") - LogView.AppendText(CrLf & "Some capabilities require a system restart to be fully processed. Save your work, close your programs, and restart when ready") + LogView.AppendText(CrLf & ProgressLogText("Some.Capabilities.Require.A.System.Restart.To.Be")) End If End Sub @@ -5490,13 +3486,13 @@ Public Class ProgressPanel DynaLog.LogMessage("- EULA destination (if chosen to copy the EULA): " & imgEditionEulaDestination) DynaLog.LogMessage("- Accept the EULA? " & If(imgEditionAcceptEula, "Yes", "No")) DynaLog.LogMessage("- Product key (if chosen to accept the EULA): " & imgEditionEditionKey) - allTasks.Text = "Upgrading the image..." - currentTask.Text = "Setting the new image edition..." - LogView.AppendText(CrLf & "Setting the new image edition..." & CrLf & - "Options:" & CrLf & - "- New edition: " & imgEditionNewEdition & CrLf & - "- Will the EULA be copied? " & If(imgEditionCopyEula, "Yes, to the following destination: " & imgEditionEulaDestination, "No") & CrLf & - "- Will the EULA be accepted? " & If(imgEditionAcceptEula, "Yes, with the following product key: " & imgEditionEditionKey, "No") & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.Operation")("UpgradingImage.Label") + currentTask.Text = LocalizationService.ForSection("Progress.Operation")("Setting.New.Image.Label") + LogView.AppendText(CrLf & ProgressLogText("Setting.The.New.Image.Edition") & CrLf & + ProgressLogText("Options") & CrLf & + ProgressLogText("New.Edition") & imgEditionNewEdition & CrLf & + ProgressLogText("Will.The.EULA.Be.Copied") & If(imgEditionCopyEula, ProgressLogText("Yes.To.The.Following.Destination") & imgEditionEulaDestination, ProgressLogText("No")) & CrLf & + ProgressLogText("Will.The.EULA.Be.Accepted") & If(imgEditionAcceptEula, ProgressLogText("Yes.With.The.Following.Product.Key") & imgEditionEditionKey, ProgressLogText("No")) & CrLf) CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /norestart /set-edition=" & imgEditionNewEdition DynaLog.LogMessage("Checking if the active installation is being managed...") If OnlineMgmt Then @@ -5510,16 +3506,16 @@ Public Class ProgressPanel DynaLog.LogMessage("The active installation is not being managed. Ignoring other settings...") End If RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End Sub @@ -5527,23 +3523,23 @@ Public Class ProgressPanel Private Sub SetImageProductKey(targetImage As String) DynaLog.LogMessage("Preparing to set the product key...") DynaLog.LogMessage("- New Product Key: " & pkSetNewProductKey) - allTasks.Text = "Setting the product key..." - currentTask.Text = "Setting the new product key..." - LogView.AppendText(CrLf & "Setting the new product key..." & CrLf & - "Options:" & CrLf & - "- New product key: " & pkSetNewProductKey & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.Operation")("Setting.ProductKey.Label") + currentTask.Text = LocalizationService.ForSection("Progress.Operation")("Setting.New.ProductKey.Label") + LogView.AppendText(CrLf & ProgressLogText("Setting.The.New.Product.Key") & CrLf & + ProgressLogText("Options") & CrLf & + ProgressLogText("New.Product.Key") & pkSetNewProductKey & CrLf) CommandArgs &= " /image=" & targetImage & " /norestart /set-productkey=" & pkSetNewProductKey RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End Sub @@ -5556,108 +3552,27 @@ Public Class ProgressPanel DynaLog.LogMessage("Preparing to add OS drivers...") DynaLog.LogMessage("- Force installation of unsigned drivers? " & If(drvAdditionForceUnsigned, "Yes", "No")) DynaLog.LogMessage("- Save changes to the Windows image after finishing? " & If(drvAdditionCommit, "Yes", "No")) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Adding drivers..." - currentTask.Text = "Preparing to add drivers..." - Case "ESN" - allTasks.Text = "Añadiendo controladores..." - currentTask.Text = "Preparándonos para añadir controladores..." - Case "FRA" - allTasks.Text = "Ajout des pilotes en cours..." - currentTask.Text = "Préparation de l'ajout des pilotes en cours..." - Case "PTB", "PTG" - allTasks.Text = "A adicionar controladores..." - currentTask.Text = "A preparar para adicionar controladores..." - Case "ITA" - allTasks.Text = "Aggiunta driver..." - currentTask.Text = "Preparazione aggiunta driver..." - End Select - Case 1 - allTasks.Text = "Adding drivers..." - currentTask.Text = "Preparing to add drivers..." - Case 2 - allTasks.Text = "Añadiendo controladores..." - currentTask.Text = "Preparándonos para añadir controladores..." - Case 3 - allTasks.Text = "Ajout des pilotes en cours..." - currentTask.Text = "Préparation de l'ajout des pilotes en cours..." - Case 4 - allTasks.Text = "A adicionar controladores..." - currentTask.Text = "A preparar para adicionar controladores..." - Case 5 - allTasks.Text = "Aggiunta driver..." - currentTask.Text = "Preparazione aggiunta driver..." - End Select - LogView.AppendText(CrLf & "Adding driver packages to mounted image..." & CrLf & - "Options:" & CrLf & - "- Force installation of unsigned drivers? " & If(drvAdditionForceUnsigned, "Yes", "No") & CrLf & - "- Commit image after adding driver packages? " & If(drvAdditionCommit, "Yes", "No") & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.AddDrivers")("AddingDrivers.Button") + currentTask.Text = LocalizationService.ForSection("Progress.AddDrivers")("Preparing.Drivers.Button") + LogView.AppendText(CrLf & ProgressLogText("Adding.Driver.Packages.To.Mounted.Image") & CrLf & + ProgressLogText("Options") & CrLf & + ProgressLogText("Force.Installation.Of.Unsigned.Drivers") & If(drvAdditionForceUnsigned, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Commit.Image.After.Adding.Driver.Packages") & If(drvAdditionCommit, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf) If drvAdditionForceUnsigned Then LogView.AppendText(CrLf & - "Warning: the option to force installation of unsigned drivers has been checked. Do note that unsigned drivers might cause instability on the resulting Windows image.") + ProgressLogText("Warning.The.Option.To.Force.Installation.Of.Unsigned")) End If - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Adding drivers..." - Case "ESN" - currentTask.Text = "Añadiendo controladores..." - Case "FRA" - currentTask.Text = "Ajout des pilotes en cours..." - Case "PTB", "PTG" - currentTask.Text = "A adicionar controladores..." - Case "ITA" - currentTask.Text = "Aggiunta driver..." - End Select - Case 1 - currentTask.Text = "Adding drivers..." - Case 2 - currentTask.Text = "Añadiendo controladores..." - Case 3 - currentTask.Text = "Ajout des pilotes en cours..." - Case 4 - currentTask.Text = "A adicionar controladores..." - Case 5 - currentTask.Text = "Aggiunta driver..." - End Select - LogView.AppendText(CrLf & "Enumerating drivers to add. Please wait..." & CrLf & - "Total number of drivers: " & drvAdditionCount) + currentTask.Text = LocalizationService.ForSection("Progress.AddDrivers")("AddingDrivers.Item") + LogView.AppendText(CrLf & ProgressLogText("Enumerating.Drivers.To.Add.Please.Wait") & CrLf & + ProgressLogText("Total.Number.Of.Drivers") & drvAdditionCount) CurrentPB.Maximum = drvAdditionCount For x = 0 To Array.LastIndexOf(drvAdditionPkgs, drvAdditionLastPkg) If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Adding driver " & (x + 1) & " of " & drvAdditionCount & "..." - Case "ESN" - currentTask.Text = "Añadiendo controlador " & (x + 1) & " de " & drvAdditionCount & "..." - Case "FRA" - currentTask.Text = "Ajout du pilote " & (x + 1) & " de " & drvAdditionCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "A adicionar o controlador " & (x + 1) & " de " & drvAdditionCount & "..." - Case "ITA" - currentTask.Text = "Aggiunta driver " & (x + 1) & " di " & drvAdditionCount & "..." - End Select - Case 1 - currentTask.Text = "Adding driver " & (x + 1) & " of " & drvAdditionCount & "..." - Case 2 - currentTask.Text = "Añadiendo controlador " & (x + 1) & " de " & drvAdditionCount & "..." - Case 3 - currentTask.Text = "Ajout du pilote " & (x + 1) & " de " & drvAdditionCount & " en cours..." - Case 4 - currentTask.Text = "A adicionar o controlador " & (x + 1) & " de " & drvAdditionCount & "..." - Case 5 - currentTask.Text = "Aggiunta driver " & (x + 1) & " di " & drvAdditionCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.AddDrivers").Format("AddingDriver.Item", x + 1, drvAdditionCount) CurrentPB.Value = x + 1 LogView.AppendText(CrLf & - "Driver " & (x + 1) & " of " & drvAdditionCount) + ProgressLogText("Driver") & (x + 1) & ProgressLogText("Of.Word") & drvAdditionCount) ' Get driver information DynaLog.LogMessage("Checking file system attributes of driver...") If Not (File.GetAttributes(drvAdditionPkgs(x)) And FileAttributes.Directory) = FileAttributes.Directory Then @@ -5674,23 +3589,23 @@ Public Class ProgressPanel If drvInfoCollection.Count > 0 And drvInfoCollection.Count <= 10 Then For Each drvInfo As DismDriver In drvInfoCollection LogView.AppendText(CrLf & CrLf & - "- Hardware description: " & drvInfo.HardwareDescription & CrLf & - "- Hardware ID: " & drvInfo.HardwareId & CrLf & - "- Additional IDs" & CrLf & - " - Compatible IDs: " & drvInfo.CompatibleIds & CrLf & - " - Excluded IDs: " & drvInfo.ExcludeIds & CrLf & - "- Hardware manufacturer: " & drvInfo.ManufacturerName & CrLf & - "- Hardware architecture: " & Casters.CastDismArchitecture(drvInfo.Architecture)) + ProgressLogText("Hardware.Description") & drvInfo.HardwareDescription & CrLf & + ProgressLogText("Hardware.ID") & drvInfo.HardwareId & CrLf & + ProgressLogText("Additional.IDs") & CrLf & + ProgressLogText("Compatible.IDs") & drvInfo.CompatibleIds & CrLf & + ProgressLogText("Excluded.IDs") & drvInfo.ExcludeIds & CrLf & + ProgressLogText("Hardware.Manufacturer") & drvInfo.ManufacturerName & CrLf & + ProgressLogText("Hardware.Architecture") & Casters.CastDismArchitecture(drvInfo.Architecture)) Next ElseIf drvInfoCollection.Count > 10 Then DynaLog.LogMessage("The driver information contains more than 10 hardware targets.") LogView.AppendText(CrLf & CrLf & - "This driver file targets more than 10 devices. To avoid creating log files large in size, we will not show information of this driver package, and will proceed anyway." & CrLf & - "If you want to get information of this driver package, go to Commands > Drivers > Get driver information > I want to get information about driver files, and specify this driver file:" & CrLf & CrLf & + ProgressLogText("This.Driver.File.Targets.More.Than.10.Devices") & CrLf & + ProgressLogText("If.You.Want.To.Get.Information.Of.This") & CrLf & CrLf & " " & Path.GetFileName(drvAdditionPkgs(x))) Else LogView.AppendText(CrLf & CrLf & - "We couldn't get information of this driver package. Proceeding anyway...") + ProgressLogText("We.Couldn.T.Get.Information.Of.This.Driver")) End If End Using Finally @@ -5704,7 +3619,7 @@ Public Class ProgressPanel Else DynaLog.LogMessage("The driver is a folder. It will be processed recursively.") LogView.AppendText(CrLf & CrLf & - "The driver package currently about to be processed is a folder, so information about it can't be obtained. Proceeding anyway...") + ProgressLogText("The.Driver.Package.Currently.About.To.Be.Processed")) End If DynaLog.LogMessage("Checking current operating mode...") Dim isRecursive As Boolean = (File.GetAttributes(drvAdditionPkgs(x)) And FileAttributes.Directory) = FileAttributes.Directory And drvAdditionFolderRecursiveScan.Contains(drvAdditionPkgs(x)) @@ -5747,12 +3662,12 @@ Public Class ProgressPanel CommandArgs &= " /forceunsigned" End If If isRecursive Then - LogView.AppendText(CrLf & "This folder will be scanned recursively. Driver addition may take a longer time...") + LogView.AppendText(CrLf & ProgressLogText("This.Folder.Will.Be.Scanned.Recursively.Driver.Addition")) CommandArgs &= " /recurse" End If RunProcess(DismProgram, CommandArgs) End If - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) errCode = Hex(Decimal.ToInt32(DismExitCode)) If DismExitCode = 0 Then drvSuccessfulAdditions += 1 @@ -5760,9 +3675,9 @@ Public Class ProgressPanel drvFailedAdditions += 1 End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If PackageErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -5779,40 +3694,16 @@ Public Class ProgressPanel End If Next CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected drivers..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.Drivers") & CrLf) For x = 0 To PackageErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Driver no. " & (x + 1) & ": " & PackageErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Driver.No") & (x + 1) & ": " & PackageErrorCodes(x)) Next Thread.Sleep(2000) If drvAdditionCommit Then DynaLog.LogMessage("Preparing to save changes...") AllPB.Value = AllPB.Maximum / taskCount currentTCont += 1 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case "ESN" - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case "FRA" - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case "ITA" - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select - Case 1 - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - Case 2 - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - Case 3 - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - Case 4 - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - Case 5 - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - End Select + taskCountLbl.Text = LocalizationService.ForSection("Progress").Format("Tasks.Label", currentTCont, taskCount) RunOps(8) End If If drvSuccessfulAdditions > 0 Then @@ -5843,107 +3734,26 @@ Public Class ProgressPanel Private Sub RemoveDrivers(targetImage As String) DynaLog.LogMessage("Preparing to remove OS drivers...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Removing drivers..." - currentTask.Text = "Preparing to remove drivers..." - Case "ESN" - allTasks.Text = "Eliminando controladores..." - currentTask.Text = "Preparándonos para eliminar controladores..." - Case "FRA" - allTasks.Text = "Suppression des pilotes en cours..." - currentTask.Text = "Préparation de la suppression des pilotes en cours..." - Case "PTB", "PTG" - allTasks.Text = "A remover controladores..." - currentTask.Text = "A preparar a remoção de controladores..." - Case "ITA" - allTasks.Text = "Rimozione driver..." - currentTask.Text = "Preparazione rimozione driver..." - End Select - Case 1 - allTasks.Text = "Removing drivers..." - currentTask.Text = "Preparing to remove drivers..." - Case 2 - allTasks.Text = "Eliminando controladores..." - currentTask.Text = "Preparándonos para eliminar controladores..." - Case 3 - allTasks.Text = "Suppression des pilotes en cours..." - currentTask.Text = "Préparation de la suppression des pilotes en cours..." - Case 4 - allTasks.Text = "A remover controladores..." - currentTask.Text = "A preparar a remoção de controladores..." - Case 5 - allTasks.Text = "Rimozione driver..." - currentTask.Text = "Preparazione rimozione dei driver..." - End Select - LogView.AppendText(CrLf & "Removing driver packages from mounted image..." & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.RemoveDrivers")("RemovingDrivers.Button") + currentTask.Text = LocalizationService.ForSection("Progress.RemoveDrivers")("Preparing.Drivers.Button") + LogView.AppendText(CrLf & ProgressLogText("Removing.Driver.Packages.From.Mounted.Image") & CrLf) ' Get all driver packages DynaLog.LogMessage("Getting drivers of the Windows image... This can take some time, depending on the amount of drivers installed.") - LogView.AppendText(CrLf & "Getting image drivers. This may take some time..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Getting.Image.Drivers.This.May.Take.Some.Time") & CrLf) GetThirdPartyDrivers() - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Removing drivers..." - Case "ESN" - currentTask.Text = "Eliminando controladores..." - Case "FRA" - currentTask.Text = "Suppression des pilotes en cours..." - Case "PTB", "PTG" - currentTask.Text = "A remover controladores..." - Case "ITA" - currentTask.Text = "Rimozione driver..." - End Select - Case 1 - currentTask.Text = "Removing drivers..." - Case 2 - currentTask.Text = "Eliminando controladores..." - Case 3 - currentTask.Text = "Suppression des pilotes en cours..." - Case 4 - currentTask.Text = "A remover controladores..." - Case 5 - currentTask.Text = "Rimozione driver..." - End Select - LogView.AppendText(CrLf & "Enumerating drivers to remove. Please wait..." & CrLf & - "Total number of drivers: " & drvRemovalCount) + currentTask.Text = LocalizationService.ForSection("Progress.RemoveDrivers")("RemovingDrivers.Item") + LogView.AppendText(CrLf & ProgressLogText("Enumerating.Drivers.To.Remove.Please.Wait") & CrLf & + ProgressLogText("Total.Number.Of.Drivers") & drvRemovalCount) CurrentPB.Maximum = drvRemovalCount For x = 0 To Array.LastIndexOf(drvRemovalPkgs, drvRemovalLastPkg) If x + 1 > CurrentPB.Maximum Then Exit For CommandArgs = BckArgs Dim driverRemovalPackage As String = drvRemovalPkgs(x) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Removing driver " & (x + 1) & " of " & drvRemovalCount & "..." - Case "ESN" - currentTask.Text = "Eliminando controlador " & (x + 1) & " de " & drvRemovalCount & "..." - Case "FRA" - currentTask.Text = "Suppression du pilote " & (x + 1) & " de " & drvRemovalCount & " en cours..." - Case "PTB", "PTG" - currentTask.Text = "A remover o controlador " & (x + 1) & " de " & drvRemovalCount & "..." - Case "ITA" - currentTask.Text = "Rimozione driver " & (x + 1) & " di " & drvRemovalCount & "..." - End Select - Case 1 - currentTask.Text = "Removing driver " & (x + 1) & " of " & drvRemovalCount & "..." - Case 2 - currentTask.Text = "Eliminando controlador " & (x + 1) & " de " & drvRemovalCount & "..." - Case 3 - currentTask.Text = "Suppression du pilote " & (x + 1) & " de " & drvRemovalCount & " en cours..." - Case 4 - currentTask.Text = "A remover o controlador " & (x + 1) & " de " & drvRemovalCount & "..." - Case 5 - currentTask.Text = "Rimozione driver " & (x + 1) & " di " & drvRemovalCount & "..." - End Select + currentTask.Text = LocalizationService.ForSection("Progress.RemoveDrivers").Format("RemovingDriver.Item", x + 1, drvRemovalCount) DynaLog.LogMessage("Getting information about driver file " & Quote & Path.GetFileName(driverRemovalPackage) & Quote & "...") CurrentPB.Value = x + 1 LogView.AppendText(CrLf & - "Driver " & (x + 1) & " of " & drvRemovalCount) + ProgressLogText("Driver") & (x + 1) & ProgressLogText("Of.Word") & drvRemovalCount) ' Get driver information ShowDriverInformationForRemoval(driverRemovalPackage) DynaLog.LogMessage("Checking current operating mode...") @@ -5971,7 +3781,7 @@ Public Class ProgressPanel CommandArgs &= " /image=" & targetImage & " /remove-driver /driver=" & Quote & driverRemovalPackage & Quote RunProcess(DismProgram, CommandArgs) End If - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) errCode = Hex(Decimal.ToInt32(DismExitCode)) If DismExitCode = 0 Then drvSuccessfulRemovals += 1 @@ -5979,9 +3789,9 @@ Public Class ProgressPanel drvFailedRemovals += 1 End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If PackageErrorCodes.Count <= 0 Then If errCode.Length >= 8 Then @@ -5998,9 +3808,9 @@ Public Class ProgressPanel End If Next CurrentPB.Value = CurrentPB.Maximum - LogView.AppendText(CrLf & "Gathering error level for selected drivers..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level.For.Selected.Drivers") & CrLf) For x = 0 To PackageErrorCodes.Count - 1 - LogView.AppendText(CrLf & "- Driver no. " & (x + 1) & ": " & PackageErrorCodes(x)) + LogView.AppendText(CrLf & ProgressLogText("Driver.No") & (x + 1) & ": " & PackageErrorCodes(x)) Next Thread.Sleep(2000) If drvSuccessfulRemovals > 0 Then @@ -6014,46 +3824,14 @@ Public Class ProgressPanel DynaLog.LogMessage("Preparing to export image drivers...") DynaLog.LogMessage("Export target: " & Quote & drvExportTarget & Quote) DynaLog.LogMessage("Export all drivers? " & If(drvExportAllDrvs, "Yes", "No")) - If Not drvExportAllDrvs Then DynaLog.LogMessage("Class name to use as filter for driver exports: " & Quote & drvExportSpecificClassName & Quote) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Exporting drivers..." - currentTask.Text = "Exporting third-party drivers to the specified folder..." - Case "ESN" - allTasks.Text = "Exportando controladores..." - currentTask.Text = "Exportando controladores de terceros a la carpeta especificada..." - Case "FRA" - allTasks.Text = "Exportation des pilotes en cours..." - currentTask.Text = "Exportation de pilotes tiers dans le dossier spécifié en cours..." - Case "PTB", "PTG" - allTasks.Text = "Exportar controladores..." - currentTask.Text = "Exportar controladores de terceiros para a pasta especificada..." - Case "ITA" - allTasks.Text = "Esportazione driver..." - currentTask.Text = "Esportazione driver terze parti nella cartella specificata..." - End Select - Case 1 - allTasks.Text = "Exporting drivers..." - currentTask.Text = "Exporting third-party drivers to the specified folder..." - Case 2 - allTasks.Text = "Exportando controladores..." - currentTask.Text = "Exportando controladores de terceros a la carpeta especificada..." - Case 3 - allTasks.Text = "Exportation des pilotes en cours..." - currentTask.Text = "Exportation de pilotes tiers dans le dossier spécifié en cours..." - Case 4 - allTasks.Text = "Exportar controladores..." - currentTask.Text = "Exportar controladores de terceiros para a pasta especificada..." - Case 5 - allTasks.Text = "Esportazione driver..." - currentTask.Text = "Esportazione driver terze parti nella cartella specificata..." - End Select - LogView.AppendText(CrLf & "Exporting drivers to specified folder..." & CrLf & - "- Export target: " & Quote & drvExportTarget & Quote & CrLf & - "- Export all drivers, or just those with matching class names? " & If(drvExportAllDrvs, "All Drivers", "Drivers with matching class name") & CrLf & - "- If not all drivers are exported, which class name is used for drivers that will be exported? " & drvExportSpecificClassName & CrLf) + If Not drvExportAllDrvs Then DynaLog.LogMessage("Class names to use as filter for driver exports: " & drvExportSpecificClassNames.Count) + allTasks.Text = LocalizationService.ForSection("Progress.ExportDrivers")("ExportingDrivers.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ExportDrivers")("ExportThirdParty.Button") + LogView.AppendText(CrLf & ProgressLogText("Exporting.Drivers.To.Specified.Folder") & CrLf & + ProgressLogText("Export.Target") & Quote & drvExportTarget & Quote & CrLf & + ProgressLogText("Export.All.Drivers.Or.Just.Those.With.Matching") & If(drvExportAllDrvs, ProgressLogText("All.Drivers"), ProgressLogText("Drivers.With.Matching.Class.Name")) & CrLf & + ProgressLogText("If.Not.All.Drivers.Are.Exported.How.Many.Class.Names") & drvExportSpecificClassNames.Count & CrLf & + ProgressLogText("On.Selective.Driver.Export.Organize.Results") & If(drvExportOrganizeClassNameExports, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf) If drvExportAllDrvs Then If drvExportWin7Mode Then Try @@ -6135,9 +3913,9 @@ Public Class ProgressPanel If driversToExport Is Nothing Then Exit Try DynaLog.LogMessage("Amount of drivers to export: " & driversToExport.Count) - LogView.AppendText(CrLf & driversToExport.Count & " driver(s) will be exported to the destination") + LogView.AppendText(CrLf & driversToExport.Count & ProgressLogText("Driver.S.Will.Be.Exported.To.The.Destination")) For Each driverToExport In driversToExport - LogView.AppendText(CrLf & "Exporting driver file " & Path.GetFileName(driverToExport.DriverOriginalFileName) & "...") + LogView.AppendText(CrLf & ProgressLogText("Exporting.Driver.File") & Path.GetFileName(driverToExport.DriverOriginalFileName) & "...") Dim drvName As String = Path.GetFileName(driverToExport.DriverOriginalFileName) Dim destinationDriverPath As String = Path.Combine(drvExportTarget, drvName) CopyRecursive(Path.GetDirectoryName(driverToExport.DriverOriginalFileName), destinationDriverPath) @@ -6241,15 +4019,32 @@ Public Class ProgressPanel End Using DynaLog.LogMessage("Filtering driver collection based on class name...") - Dim driversToExport As IEnumerable(Of ImageDriver) = ImageDrivers.Where(Function(driver) driver.DriverClassName.Equals(drvExportSpecificClassName, StringComparison.OrdinalIgnoreCase)) + Dim driversToExport As IEnumerable(Of ImageDriver) = ImageDrivers.Where(Function(driver) drvExportSpecificClassNames.Select(Function(cn) cn.ToLowerInvariant()).Contains(driver.DriverClassName.ToLowerInvariant())) If driversToExport Is Nothing Then Exit Try DynaLog.LogMessage("Amount of drivers to export: " & driversToExport.Count) - LogView.AppendText(CrLf & driversToExport.Count & " driver(s) will be exported to the destination") + LogView.AppendText(CrLf & driversToExport.Count & ProgressLogText("Driver.S.Will.Be.Exported.To.The.Destination")) For Each driverToExport In driversToExport - LogView.AppendText(CrLf & "Exporting driver file " & Path.GetFileName(driverToExport.DriverOriginalFileName) & "...") + LogView.AppendText(CrLf & ProgressLogText("Exporting.Driver.File") & Path.GetFileName(driverToExport.DriverOriginalFileName) & "...") Dim drvName As String = Path.GetFileName(driverToExport.DriverOriginalFileName) Dim destinationDriverPath As String = Path.Combine(drvExportTarget, drvName) + + ' If we are supposed to organize them based on class name, we'll detect if such folders exist and, if they + ' don't, we'll create them, so we have everything ready. + If drvExportOrganizeClassNameExports Then + Dim organizedDestinationDriverPath As String = Path.Combine(drvExportTarget, driverToExport.DriverClassName) + If Not Directory.Exists(organizedDestinationDriverPath) Then + Try + Directory.CreateDirectory(organizedDestinationDriverPath) + destinationDriverPath = Path.Combine(organizedDestinationDriverPath, drvName) + Catch ex As Exception + DynaLog.LogMessage("Could not organize exported driver. Error message: " & ex.Message & ". Driver will be exported to destination path without organization.") + End Try + Else + destinationDriverPath = Path.Combine(organizedDestinationDriverPath, drvName) + End If + End If + CopyRecursive(Path.GetDirectoryName(driverToExport.DriverOriginalFileName), destinationDriverPath) Next Catch ex As Exception @@ -6258,22 +4053,39 @@ Public Class ProgressPanel End Try Else Try - LogView.AppendText(CrLf & "Getting image drivers...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Image.Drivers")) DismApi.Initialize(DismLogLevel.LogErrors) Using session As DismSession = If(OnlineMgmt, DismApi.OpenOnlineSession(), DismApi.OpenOfflineSession(MountDir)) DynaLog.LogMessage("Getting drivers with DISMAPI...") Dim driverPackages As DismDriverPackageCollection = DismApi.GetDrivers(session, False) If driverPackages Is Nothing Then Exit Try DynaLog.LogMessage("Filtering driver collection based on class name...") - Dim driversToExport As IEnumerable(Of DismDriverPackage) = driverPackages.Where(Function(driver) driver.ClassName.Equals(drvExportSpecificClassName, StringComparison.OrdinalIgnoreCase)) + Dim driversToExport As IEnumerable(Of DismDriverPackage) = driverPackages.Where(Function(driver) drvExportSpecificClassNames.Select(Function(cn) cn.ToLowerInvariant()).Contains(driver.ClassName.ToLowerInvariant())) If driversToExport Is Nothing Then Exit Try DynaLog.LogMessage("Amount of drivers to export: " & driversToExport.Count) - LogView.AppendText(CrLf & driversToExport.Count & " driver(s) will be exported to the destination") + LogView.AppendText(CrLf & driversToExport.Count & ProgressLogText("Driver.S.Will.Be.Exported.To.The.Destination")) For Each driverToExport In driversToExport - LogView.AppendText(CrLf & "Exporting driver file " & Path.GetFileName(driverToExport.OriginalFileName) & "...") + LogView.AppendText(CrLf & ProgressLogText("Exporting.Driver.File") & Path.GetFileName(driverToExport.OriginalFileName) & "...") Dim drvName As String = Path.GetFileName(driverToExport.OriginalFileName) Dim destinationDriverPath As String = Path.Combine(drvExportTarget, drvName) + + ' If we are supposed to organize them based on class name, we'll detect if such folders exist and, if they + ' don't, we'll create them, so we have everything ready. + If drvExportOrganizeClassNameExports Then + Dim organizedDestinationDriverPath As String = Path.Combine(drvExportTarget, driverToExport.ClassName) + If Not Directory.Exists(organizedDestinationDriverPath) Then + Try + Directory.CreateDirectory(organizedDestinationDriverPath) + destinationDriverPath = Path.Combine(organizedDestinationDriverPath, drvName) + Catch ex As Exception + DynaLog.LogMessage("Could not organize exported driver. Error message: " & ex.Message & ". Driver will be exported to destination path without organization.") + End Try + Else + destinationDriverPath = Path.Combine(organizedDestinationDriverPath, drvName) + End If + End If + CopyRecursive(Path.GetDirectoryName(driverToExport.OriginalFileName), destinationDriverPath) Next End Using @@ -6290,16 +4102,16 @@ Public Class ProgressPanel End Try End If End If - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End Sub @@ -6354,87 +4166,30 @@ Public Class ProgressPanel Private Sub ImportDrivers(targetImage As String) DynaLog.LogMessage("Preparing to import image drivers...") DynaLog.LogMessage("Source type: " & ImportSourceInt) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Importing drivers..." - currentTask.Text = "Preparing to import third-party drivers..." - Case "ESN" - allTasks.Text = "Importando controladores..." - currentTask.Text = "Preparándonos para importar controladores de terceros..." - Case "FRA" - allTasks.Text = "Importation des pilotes en cours..." - currentTask.Text = "Préparation de l'importation de pilotes tiers en cours..." - Case "PTB", "PTG" - allTasks.Text = "A importar controladores..." - currentTask.Text = "A preparar a importação de controladores de terceiros..." - Case "ITA" - allTasks.Text = "Importazione driver..." - currentTask.Text = "Preparazione importazione driver terze parti..." - End Select - Case 1 - allTasks.Text = "Importing drivers..." - currentTask.Text = "Preparing to import third-party drivers..." - Case 2 - allTasks.Text = "Importando controladores..." - currentTask.Text = "Preparándonos para importar controladores de terceros..." - Case 3 - allTasks.Text = "Importation des pilotes en cours..." - currentTask.Text = "Préparation de l'importation de pilotes tiers en cours..." - Case 4 - allTasks.Text = "A importar controladores..." - currentTask.Text = "A preparar a importação de controladores de terceiros..." - Case 5 - allTasks.Text = "Importazione dei driver..." - currentTask.Text = "Preparazione all'importazione di driver di terze parti..." - End Select - LogView.AppendText(CrLf & "Importing third party drivers..." & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.ImportDrivers")("ImportingDrivers.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ImportDrivers")("PrepareImport.Button") + LogView.AppendText(CrLf & ProgressLogText("Importing.Third.Party.Drivers") & CrLf) Select Case ImportSourceInt Case 0 - LogView.AppendText("- Driver import source: Windows image (" & Quote & DrvImport_SourceImage & Quote & ")" & CrLf) + LogView.AppendText(ProgressLogText("Driver.Import.Source.Windows.Image") & Quote & DrvImport_SourceImage & Quote & ")" & CrLf) Case 1 - LogView.AppendText("- Driver import source: active installation" & CrLf) + LogView.AppendText(ProgressLogText("Driver.Import.Source.Active.Installation") & CrLf) Case 2 - LogView.AppendText("- Driver import source: offline installation (" & Quote & DrvImport_SourceDisk & Quote & ")" & CrLf) + LogView.AppendText(ProgressLogText("Driver.Import.Source.Offline.Installation") & Quote & DrvImport_SourceDisk & Quote & ")" & CrLf) End Select Thread.Sleep(500) - LogView.AppendText(CrLf & "Creating temporary folder for driver exports..." & CrLf) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Exporting third-party drivers from driver import source..." - Case "ESN" - currentTask.Text = "Exportando controladores de terceros del origen de importación de controladores..." - Case "FRA" - currentTask.Text = "Exportation de pilotes tiers à partir de la source d'importation des pilotes en cours..." - Case "PTB", "PTG" - currentTask.Text = "Exportar controladores de terceiros a partir da fonte de importação de controladores..." - Case "ITA" - currentTask.Text = "Esportazione driver terze parti dalla sorgente importazione driver..." - End Select - Case 1 - currentTask.Text = "Exporting third-party drivers from driver import source..." - Case 2 - currentTask.Text = "Exportando controladores de terceros del origen de importación de controladores..." - Case 3 - currentTask.Text = "Exportation de pilotes tiers à partir de la source d'importation des pilotes en cours..." - Case 4 - currentTask.Text = "Exportar controladores de terceiros a partir da fonte de importação de controladores..." - Case 5 - currentTask.Text = "Esportazione di driver di terze parti dall'origine di importazione dei driver..." - End Select + LogView.AppendText(CrLf & ProgressLogText("Creating.Temporary.Folder.For.Driver.Exports") & CrLf) + currentTask.Text = LocalizationService.ForSection("Progress.ImportDrivers")("ExportThirdParty.Item") Try DynaLog.LogMessage("Creating directory where drivers will be exported to...") Directory.CreateDirectory(Application.StartupPath & "\export_temp") Catch ex As Exception DynaLog.LogMessage("Could not create the driver export directory. Error message: " & ex.Message) - LogView.AppendText(CrLf & "The temporary folder could not be created. See below for reasons why:" & CrLf & CrLf & ex.ToString() & "-" & ex.Message) + LogView.AppendText(CrLf & ProgressLogText("The.Temporary.Folder.Could.Not.Be.Created.See") & CrLf & CrLf & ex.ToString() & "-" & ex.Message) End Try If Directory.Exists(Application.StartupPath & "\export_temp") Then DynaLog.LogMessage("Exporting drivers...") - LogView.AppendText(CrLf & "Exporting third-party drivers from import source..." & CrLf) + LogView.AppendText(CrLf & ProgressLogText("Exporting.Third.Party.Drivers.From.Import.Source") & CrLf) Dim importSource As String = "" Select Case ImportSourceInt Case 0 @@ -6444,47 +4199,23 @@ Public Class ProgressPanel End Select CommandArgs &= If(ImportSourceInt = 1, " /online", " /image=" & importSource) & " /export-driver /destination=" & Quote & Application.StartupPath & "\export_temp" & Quote RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If If DismExitCode = 0 Then DynaLog.LogMessage("The previous operation succeeded. Adding the drivers...") CurrentPB.Value = CurrentPB.Maximum / 2 AllPB.Value = AllPB.Maximum / 2 - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Importing third-party drivers to destination image..." - Case "ESN" - currentTask.Text = "Importando controladores de terceros a la imagen de destino..." - Case "FRA" - currentTask.Text = "Importation des pilotes tiers dans l'image de destination en cours..." - Case "PTB", "PTG" - currentTask.Text = "A importar controladores de terceiros para a imagem de destino..." - Case "ITA" - currentTask.Text = "Importazione driver terze parti nell'immagine destinazione..." - End Select - Case 1 - currentTask.Text = "Importing third-party drivers to destination image..." - Case 2 - currentTask.Text = "Importando controladores de terceros a la imagen de destino..." - Case 3 - currentTask.Text = "Importation des pilotes tiers dans l'image de destination en cours..." - Case 4 - currentTask.Text = "A importar controladores de terceiros para a imagem de destino..." - Case 5 - currentTask.Text = "Importazione driver di terze parti nell'immagine destinazione..." - End Select - LogView.AppendText(CrLf & "Importing third-party drivers from the temporary export directory to the destination image...") + currentTask.Text = LocalizationService.ForSection("Progress.ImportDrivers")("ImportThirdParty.Item") + LogView.AppendText(CrLf & ProgressLogText("Importing.Third.Party.Drivers.From.The.Temporary.Export")) CommandArgs = BckArgs If OnlineMgmt Then DynaLog.LogMessage("Online installation management mode detected. Using PNPUTIL to add the driver...") @@ -6516,19 +4247,19 @@ Public Class ProgressPanel errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End If - LogView.AppendText(CrLf & "Deleting temporary export directory...") + LogView.AppendText(CrLf & ProgressLogText("Deleting.Temporary.Export.Directory")) Try DynaLog.LogMessage("Attempting to delete the driver export directory...") Directory.Delete(Application.StartupPath & "\export_temp", True) Catch ex As Exception DynaLog.LogMessage("Could not delete driver export directory. Error message: " & ex.Message) - LogView.AppendText(CrLf & "We couldn't delete the temporary export directory. You'll need to delete the " & Quote & "export_temp" & Quote & " directory manually.") + LogView.AppendText(CrLf & ProgressLogText("We.Couldn.T.Delete.The.Temporary.Export.Directory") & Quote & ProgressLogText("Export.Temp") & Quote & ProgressLogText("Directory.Manually")) End Try End If End Sub @@ -6540,23 +4271,23 @@ Public Class ProgressPanel For Each drv As DismDriverPackage In drvCollection If drv.PublishedName = driverRemovalPackage Then LogView.AppendText(CrLf & CrLf & - "- Published name: " & drv.PublishedName & CrLf & - "- Provider name: " & drv.ProviderName & CrLf & - "- Class name: " & drv.ClassName & CrLf & - "- Class description: " & drv.ClassDescription & CrLf & - "- Class GUID: " & drv.ClassGuid & CrLf & - "- Version and date: " & drv.Version.ToString() & " / " & drv.Date.ToString() & CrLf & - "- Is part of the Windows distribution? " & If(drv.InBox, "Yes", "No") & CrLf & - "- Is critical to the boot process? " & If(drv.BootCritical, "Yes", "No")) + ProgressLogText("Published.Name") & drv.PublishedName & CrLf & + ProgressLogText("Provider.Name") & drv.ProviderName & CrLf & + ProgressLogText("Class.Name") & drv.ClassName & CrLf & + ProgressLogText("Class.Description") & drv.ClassDescription & CrLf & + ProgressLogText("Class.GUID") & drv.ClassGuid & CrLf & + ProgressLogText("Version.And.Date") & drv.Version.ToString() & " / " & drv.Date.ToString() & CrLf & + ProgressLogText("Is.Part.Of.The.Windows.Distribution") & If(drv.InBox, ProgressLogText("Yes"), ProgressLogText("No")) & CrLf & + ProgressLogText("Is.Critical.To.The.Boot.Process") & If(drv.BootCritical, ProgressLogText("Yes"), ProgressLogText("No"))) If drv.InBox Then DynaLog.LogMessage("This driver is part of the Windows distribution.") LogView.AppendText(CrLf & CrLf & - "Warning: this driver package is part of the Windows distribution. Some areas may no longer work after this driver has been removed") + ProgressLogText("Warning.This.Driver.Package.Is.Part.Of.The")) End If If drv.BootCritical Then DynaLog.LogMessage("This driver is critical to the boot process of the Windows image.") LogView.AppendText(CrLf & CrLf & - "Warning: this driver package is critical to the boot process. The target image may no longer boot or work correctly after this driver has been removed") + ProgressLogText("Warning.This.Driver.Package.Is.Critical.To.The")) End If Exit For End If @@ -6579,45 +4310,12 @@ Public Class ProgressPanel Private Sub ApplyUnattendedFile(targetImage As String) DynaLog.LogMessage("Preparing to apply unattended answer file...") DynaLog.LogMessage("Answer file: " & Quote & Path.GetFileName(UnattendedFile) & Quote) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Applying unattended answer file..." - currentTask.Text = "Applying specified unattended answer file to the target image..." - Case "ESN" - allTasks.Text = "Aplicando archivo de respuesta desatendida..." - currentTask.Text = "Aplicando archivo de respuesta desatendida especificado a la imagen de destino..." - Case "FRA" - allTasks.Text = "Appliquer le fichier de réponse sans surveillance en cours..." - currentTask.Text = "Appliquer le fichier de réponse non assisté spécifié à l'image cible en cours..." - Case "PTB", "PTG" - allTasks.Text = "Aplicar ficheiro de resposta não assistido..." - currentTask.Text = "Aplicar o ficheiro de resposta automática especificado à imagem de destino..." - Case "ITA" - allTasks.Text = "Applicazione file risposta non presidiate..." - currentTask.Text = "Applicazione file risposta non presidiate specificato all'immagine destinazione..." - End Select - Case 1 - allTasks.Text = "Applying unattended answer file..." - currentTask.Text = "Applying specified unattended answer file to the target image..." - Case 2 - allTasks.Text = "Aplicando archivo de respuesta desatendida..." - currentTask.Text = "Aplicando archivo de respuesta desatendida especificado a la imagen de destino..." - Case 3 - allTasks.Text = "Appliquer le fichier de réponse sans surveillance en cours..." - currentTask.Text = "Appliquer le fichier de réponse non assisté spécifié à l'image cible en cours..." - Case 4 - allTasks.Text = "Aplicar ficheiro de resposta não assistido..." - currentTask.Text = "Aplicar o ficheiro de resposta automática especificado à imagem de destino..." - Case 5 - allTasks.Text = "Applicazione del file di risposta non presidiato..." - currentTask.Text = "Applicazione file risposta non presidiata specificato all'immagine destinazione..." - End Select - LogView.AppendText(CrLf & "Applying unattended answer file. Options:" & CrLf & - "- Unattended answer file: " & UnattendedFile) + allTasks.Text = LocalizationService.ForSection("Progress.ApplyUnattend")("ApplyAnswerFile.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ApplyUnattend")("Applying.Answer.Button") + LogView.AppendText(CrLf & ProgressLogText("Applying.Unattended.Answer.File.Options") & CrLf & + ProgressLogText("Unattended.Answer.File") & UnattendedFile) Try - LogView.AppendText(CrLf & CrLf & "Creating directories and copying files...") + LogView.AppendText(CrLf & CrLf & ProgressLogText("Creating.Directories.And.Copying.Files")) DynaLog.LogMessage("Copying unattended answer file to the Panther directory of the Windows image...") If Not Directory.Exists(Path.Combine(MountDir, "Windows", "Panther")) Then Directory.CreateDirectory(Path.Combine(MountDir, "Windows", "Panther")) @@ -6630,43 +4328,19 @@ Public Class ProgressPanel End If File.Copy(UnattendedFile, Path.Combine(MountDir, "Windows", "system32", "sysprep", "unattend.xml"), True) End If - LogView.AppendText(CrLf & "The unattended answer file has been successfully copied.") + LogView.AppendText(CrLf & ProgressLogText("The.Unattended.Answer.File.Has.Been.Successfully.Copied")) GetErrorCode(True) Catch ex As Exception DynaLog.LogMessage("Could not copy unattended answer file to targets. Error message: " & ex.Message) CommandArgs &= If(OnlineMgmt, " /online", " /image=" & targetImage) & " /apply-unattend=" & Quote & UnattendedFile & Quote RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.ApplyUnattend")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Try End Sub @@ -6678,55 +4352,22 @@ Public Class ProgressPanel Private Sub SetTargetPath(targetImage As String) DynaLog.LogMessage("Preparing to set the target path of the Windows PE image...") DynaLog.LogMessage("Target path to set: " & Quote & peNewTargetPath & Quote) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Setting the target path..." - currentTask.Text = "Setting the Windows PE target path..." - Case "ESN" - allTasks.Text = "Estableciendo la ruta de destino..." - currentTask.Text = "Estableciendo la ruta de destino de Windows PE..." - Case "FRA" - allTasks.Text = "Configuration du chemin cible en cours..." - currentTask.Text = "Configuration du chemin cible de Windows PE en cours..." - Case "PTB", "PTG" - allTasks.Text = "A configurar a localização de destino..." - currentTask.Text = "A configurar a localização de destino do Windows PE..." - Case "ITA" - allTasks.Text = "Impostazione percorso destinazione..." - currentTask.Text = "Impostazione percorso destinazione Windows PE..." - End Select - Case 1 - allTasks.Text = "Setting the target path..." - currentTask.Text = "Setting the Windows PE target path..." - Case 2 - allTasks.Text = "Estableciendo la ruta de destino..." - currentTask.Text = "Estableciendo la ruta de destino de Windows PE..." - Case 3 - allTasks.Text = "Configuration du chemin cible en cours..." - currentTask.Text = "Configuration du chemin cible de Windows PE en cours..." - Case 4 - allTasks.Text = "A configurar a localização de destino..." - currentTask.Text = "A configurar a localização de destino do Windows PE..." - Case 5 - allTasks.Text = "Impostazione percorso destinazione..." - currentTask.Text = "Impostazione percorso destinazione di Windows PE..." - End Select - LogView.AppendText(CrLf & "Setting the Windows PE target path..." & CrLf & - "- New target path: " & Quote & peNewTargetPath & Quote) + allTasks.Text = LocalizationService.ForSection("Progress.SetTargetPath")("Setting.Target.Button") + currentTask.Text = LocalizationService.ForSection("Progress.SetTargetPath")("Setting.Windows.Button") + LogView.AppendText(CrLf & ProgressLogText("Setting.The.Windows.PE.Target.Path") & CrLf & + ProgressLogText("New.Target.Path") & Quote & peNewTargetPath & Quote) CommandArgs &= " /image=" & targetImage & " /set-targetpath=" & peNewTargetPath RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End Sub @@ -6734,55 +4375,22 @@ Public Class ProgressPanel Private Sub SetScratchSpace(targetImage As String) DynaLog.LogMessage("Preparing to set the scratch space of the Windows PE image...") DynaLog.LogMessage("Scratch space to set: " & peNewScratchSpace & " MB") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Setting the scratch space..." - currentTask.Text = "Setting the Windows PE scratch space..." - Case "ESN" - allTasks.Text = "Estableciendo el espacio temporal..." - currentTask.Text = "Estableciendo el espacio temporal de Windows PE..." - Case "FRA" - allTasks.Text = "Configuration de l'espace temporaire en cours..." - currentTask.Text = "Configuration de l'espace temporaire de Windows PE en cours..." - Case "PTB", "PTG" - allTasks.Text = "A configurar o espaço temporário..." - currentTask.Text = "A configurar o espaço temporário do Windows PE..." - Case "ITA" - allTasks.Text = "Impostazione spazio temporaneo..." - currentTask.Text = "Impostazione spazio temporaneo Windows PE..." - End Select - Case 1 - allTasks.Text = "Setting the scratch space..." - currentTask.Text = "Setting the Windows PE scratch space..." - Case 2 - allTasks.Text = "Estableciendo el espacio temporal..." - currentTask.Text = "Estableciendo el espacio temporal de Windows PE..." - Case 3 - allTasks.Text = "Configuration de l'espace temporaire en cours..." - currentTask.Text = "Configuration de l'espace temporaire de Windows PE en cours..." - Case 4 - allTasks.Text = "A configurar o espaço temporário..." - currentTask.Text = "A configurar o espaço temporário do Windows PE..." - Case 5 - allTasks.Text = "Impostazione dello spazio temporaneo..." - currentTask.Text = "Impostazione dello spazio temporaneo di Windows PE..." - End Select - LogView.AppendText(CrLf & "Setting the Windows PE scratch space..." & CrLf & - "- New scratch space amount: " & peNewScratchSpace & " MB") + allTasks.Text = LocalizationService.ForSection("Progress.ScratchSpace")("Setting.ScratchSpace.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ScratchSpace")("SetScratchSpace.Button") + LogView.AppendText(CrLf & ProgressLogText("Setting.The.Windows.PE.Scratch.Space") & CrLf & + ProgressLogText("New.Scratch.Space.Amount") & peNewScratchSpace & " MB") CommandArgs &= " /image=" & targetImage & " /set-scratchspace=" & peNewScratchSpace RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Getting error level...") + LogView.AppendText(CrLf & ProgressLogText("Getting.Error.Level")) If Hex(DismExitCode).Length < 8 Then errCode = DismExitCode Else errCode = Hex(DismExitCode) End If If errCode.Length >= 8 Then - LogView.AppendText(" Error level : 0x" & errCode) + LogView.AppendText(ProgressLogText("Error.Level.0x.2") & errCode) Else - LogView.AppendText(" Error level : " & errCode) + LogView.AppendText(ProgressLogText("Error.Level.2") & errCode) End If GetErrorCode(False) End Sub @@ -6794,149 +4402,50 @@ Public Class ProgressPanel Private Sub SetOSUnistallWindow() DynaLog.LogMessage("Preparing to set the OS rollback window...") DynaLog.LogMessage("New window: " & osUninstDayCount & " day(s)") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Setting the uninstall window..." - currentTask.Text = "Setting the amount of days in which an uninstall can happen..." - Case "ESN" - allTasks.Text = "Estableciendo el margen de desinstalación..." - currentTask.Text = "Estableciendo el número de días en los que puede ocurrir una desinstalación..." - Case "FRA" - allTasks.Text = "Définition de la créneau de désinstallation en cours..." - currentTask.Text = "Définition du nombre de jours au cours desquels une désinstallation peut avoir lieu en cours..." - Case "PTB", "PTG" - allTasks.Text = "A configurar a janela de desinstalação..." - currentTask.Text = "A configurar o número de dias em que uma desinstalação pode ocorrer..." - Case "ITA" - allTasks.Text = "Impostazione finestra disinstallazione..." - currentTask.Text = "Impostazione numero di giorni in cui può avvenire la disinstallazione..." - End Select - Case 1 - allTasks.Text = "Setting the uninstall window..." - currentTask.Text = "Setting the amount of days in which an uninstall can happen..." - Case 2 - allTasks.Text = "Estableciendo el margen de desinstalación..." - currentTask.Text = "Estableciendo el número de días en los que puede ocurrir una desinstalación..." - Case 3 - allTasks.Text = "Définition de la créneau de désinstallation en cours..." - currentTask.Text = "Définition du nombre de jours au cours desquels une désinstallation peut avoir lieu en cours..." - Case 4 - allTasks.Text = "A configurar a janela de desinstalação..." - currentTask.Text = "A configurar o número de dias em que uma desinstalação pode ocorrer..." - Case 5 - allTasks.Text = "Impostazione della finestra di disinstallazione..." - currentTask.Text = "Impostazione del numero di giorni in cui può avvenire la disinstallazione..." - End Select - LogView.AppendText(CrLf & "Setting the amount of days an uninstall can happen..." & CrLf & - "Number of days: " & osUninstDayCount) + allTasks.Text = LocalizationService.ForSection("Progress.RollbackWindow")("SetWindow.Button") + currentTask.Text = LocalizationService.ForSection("Progress.RollbackWindow")("SetDays.Button") + LogView.AppendText(CrLf & ProgressLogText("Setting.The.Amount.Of.Days.An.Uninstall.Can") & CrLf & + ProgressLogText("Number.Of.Days") & osUninstDayCount) CommandArgs &= " /online /set-osuninstallwindow /value:" & osUninstDayCount RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Gathering error level...") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub Private Sub RemoveOSUnistall() DynaLog.LogMessage("Preparing to remove the OS rollback...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Removing OS rollback ability..." - currentTask.Text = "Removing the ability to revert to an old installation of Windows..." - Case "ESN" - allTasks.Text = "Eliminando la habilidad de desinstalación..." - currentTask.Text = "Eliminando la habilidad para revertir a una instalación anterior de Windows..." - Case "FRA" - allTasks.Text = "Suppression de la possibilité de retour en arrière du système d'exploitation en cours..." - currentTask.Text = "Suppression de la possibilité de revenir à une ancienne installation de Windows en cours..." - Case "PTB", "PTG" - allTasks.Text = "Remover a capacidade de reversão do SO..." - currentTask.Text = "Remover a capacidade de reverter para uma instalação antiga do Windows..." - Case "ITA" - allTasks.Text = "Rimozione possibilità rollback sistema operativo..." - currentTask.Text = "Rimozione possibilità tornare alla vecchia installazione di Windows..." - End Select - Case 1 - allTasks.Text = "Removing OS rollback ability..." - currentTask.Text = "Removing the ability to revert to an old installation of Windows..." - Case 2 - allTasks.Text = "Eliminando la habilidad de desinstalación..." - currentTask.Text = "Eliminando la habilidad para revertir a una instalación anterior de Windows..." - Case 3 - allTasks.Text = "Suppression de la possibilité de retour en arrière du système d'exploitation en cours..." - currentTask.Text = "Suppression de la possibilité de revenir à une ancienne installation de Windows en cours..." - Case 4 - allTasks.Text = "Remover a capacidade de reversão do SO..." - currentTask.Text = "Remover a capacidade de reverter para uma instalação antiga do Windows..." - Case 5 - allTasks.Text = "Rimozione opzione fallback al sistema operativo precedente..." - currentTask.Text = "Rimozione opzione fallback ad una vecchia installazione di Windows..." - End Select - LogView.AppendText(CrLf & "Removing the ability to revert to an old installation of Windows...") + allTasks.Text = LocalizationService.ForSection("Progress.RemoveRollback")("RemoveRollback.Button") + currentTask.Text = LocalizationService.ForSection("Progress.RemoveRollback")("RemoveRevert.Button") + LogView.AppendText(CrLf & ProgressLogText("Removing.The.Ability.To.Revert.To.An.Old")) CommandArgs &= " /online /remove-osuninstall" RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Gathering error level...") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub Private Sub InitiateOSUnistall() DynaLog.LogMessage("Preparing to initiate the OS rollback...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Uninstalling this version of Windows..." - currentTask.Text = "Preparing operating system rollback..." - Case "ESN" - allTasks.Text = "Desinstalando esta versión de Windows..." - currentTask.Text = "Preparando la desinstalación del sistema operativo..." - Case "FRA" - allTasks.Text = "Désinstallation de cette version de Windows en cours..." - currentTask.Text = "Préparation du retour en arrière du système d'exploitation en cours..." - Case "PTB", "PTG" - allTasks.Text = "Desinstalar esta versão do Windows..." - currentTask.Text = "Preparar a reversão do sistema operativo..." - Case "ITA" - allTasks.Text = "Disinstallazione di questa versione di Windows..." - currentTask.Text = "Preparazione rollback sistema operativo..." - End Select - Case 1 - allTasks.Text = "Uninstalling this version of Windows..." - currentTask.Text = "Preparing operating system rollback..." - Case 2 - allTasks.Text = "Desinstalando esta versión de Windows..." - currentTask.Text = "Preparando la desinstalación del sistema operativo..." - Case 3 - allTasks.Text = "Désinstallation de cette version de Windows en cours..." - currentTask.Text = "Préparation du retour en arrière du système d'exploitation en cours..." - Case 4 - allTasks.Text = "Desinstalar esta versão do Windows..." - currentTask.Text = "Preparar a reversão do sistema operativo..." - Case 5 - allTasks.Text = "Disinstallazione di questa versione di Windows..." - currentTask.Text = "Preparazione del ripristino del sistema operativo..." - End Select - LogView.AppendText(CrLf & "Preparing operating system rollback...") + allTasks.Text = LocalizationService.ForSection("Progress.OSUninstall")("Uninstalling.Version.Button") + currentTask.Text = LocalizationService.ForSection("Progress.StartRollback")("Preparing.OSRollback.Button") + LogView.AppendText(CrLf & ProgressLogText("Preparing.Operating.System.Rollback")) CommandArgs = " /online /norestart /initiate-osuninstall" RunProcess(DismProgram, CommandArgs) - LogView.AppendText(CrLf & "Gathering error level...") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -6950,52 +4459,19 @@ Public Class ProgressPanel DynaLog.LogMessage("- Source image index: " & imgConversionIndex) DynaLog.LogMessage("- Destination image file: " & Quote & imgDestFile & Quote) DynaLog.LogMessage("- Conversion mode: " & imgConversionMode) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Converting image..." - currentTask.Text = "Converting specified image..." - Case "ESN" - allTasks.Text = "Convirtiendo imagen..." - currentTask.Text = "Convirtiendo imagen especificada" - Case "FRA" - allTasks.Text = "Conversion de l'image en cours..." - currentTask.Text = "Conversion de l'image spécifiée en cours..." - Case "PTB", "PTG" - allTasks.Text = "A converter imagem..." - currentTask.Text = "A converter a imagem especificada..." - Case "ITA" - allTasks.Text = "Conversione immagine..." - currentTask.Text = "Conversione immagine specificata..." - End Select - Case 1 - allTasks.Text = "Converting image..." - currentTask.Text = "Converting specified image..." - Case 2 - allTasks.Text = "Convirtiendo imagen..." - currentTask.Text = "Convirtiendo imagen especificada" - Case 3 - allTasks.Text = "Conversion de l'image en cours..." - currentTask.Text = "Conversion de l'image spécifiée en cours..." - Case 4 - allTasks.Text = "A converter imagem..." - currentTask.Text = "A converter a imagem especificada..." - Case 5 - allTasks.Text = "Conversione immagine..." - currentTask.Text = "Conversione dell'immagine specificata..." - End Select - LogView.AppendText(CrLf & "Converting image..." & CrLf & - "Options:" & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.ConvertImage")("ConvertingImage.Button") + currentTask.Text = LocalizationService.ForSection("Progress.ConvertImage")("Converting.Image.Button") + LogView.AppendText(CrLf & ProgressLogText("Converting.Image") & CrLf & + ProgressLogText("Options") & CrLf) ' Gather options - LogView.AppendText("- Source image file: " & imgSrcFile & CrLf & - "- Index to convert: " & imgConversionIndex & CrLf & - "- Destination image file: " & imgDestFile & CrLf) + LogView.AppendText(ProgressLogText("Source.Image.File") & imgSrcFile & CrLf & + ProgressLogText("Index.To.Convert") & imgConversionIndex & CrLf & + ProgressLogText("Destination.Image.File") & imgDestFile & CrLf) If imgConversionMode = 0 Then - LogView.AppendText("- Image conversion mode: Windows Imaging (WIM) --> Electronic Software Distribution (ESD)") + LogView.AppendText(ProgressLogText("Image.Conversion.Mode.Windows.Imaging.WIM.Electronic.Software")) ElseIf imgConversionMode = 1 Then - LogView.AppendText("- Image conversion mode: Electronic Software Distribution (ESD) --> Windows Imaging (WIM)") + LogView.AppendText(ProgressLogText("Image.Conversion.Mode.Electronic.Software.Distribution.ESD.Windows")) End If ' Run commands @@ -7016,37 +4492,13 @@ Public Class ProgressPanel CommandArgs &= " /compress:max" End If RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta del livello di errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.ConvertImage")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -7055,47 +4507,14 @@ Public Class ProgressPanel DynaLog.LogMessage("- Source image file: " & Quote & imgSwmSource & Quote) DynaLog.LogMessage("- Source image index: " & imgMergerIndex) DynaLog.LogMessage("- Destination image file: " & Quote & imgWimDestination & Quote) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Merging SWM files..." - currentTask.Text = "Merging SWM files into a WIM file..." - Case "ESN" - allTasks.Text = "Combinando archivos SWM..." - currentTask.Text = "Combinando archivos SWM en un archivo WIM..." - Case "FRA" - allTasks.Text = "Fusion des fichiers SWM en cours..." - currentTask.Text = "Fusion des fichiers SWM dans un fichier WIM en cours..." - Case "PTB", "PTG" - allTasks.Text = "Combinando ficheiros SWM..." - currentTask.Text = "Combinar ficheiros SWM num ficheiro WIM..." - Case "ITA" - allTasks.Text = "Unione file SWM..." - currentTask.Text = "Unione file SWM in un file WIM..." - End Select - Case 1 - allTasks.Text = "Merging SWM files..." - currentTask.Text = "Merging SWM files into a WIM file..." - Case 2 - allTasks.Text = "Combinando archivos SWM..." - currentTask.Text = "Combinando archivos SWM en un archivo WIM..." - Case 3 - allTasks.Text = "Fusion des fichiers SWM en cours..." - currentTask.Text = "Fusion des fichiers SWM dans un fichier WIM en cours..." - Case 4 - allTasks.Text = "Combinando ficheiros SWM..." - currentTask.Text = "Combinar ficheiros SWM num ficheiro WIM..." - Case 5 - allTasks.Text = "Unione dei file SWM..." - currentTask.Text = "Unione dei file SWM in un file WIM..." - End Select - LogView.AppendText(CrLf & "Merging SWM files into a WIM file..." & CrLf & - "Options:" & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.MergeSWM")("MergingSwmfiles.Button") + currentTask.Text = LocalizationService.ForSection("Progress.MergeSWM")("Merging.Swmfiles.WIM.Button") + LogView.AppendText(CrLf & ProgressLogText("Merging.SWM.Files.Into.A.WIM.File") & CrLf & + ProgressLogText("Options") & CrLf) ' Gather options - LogView.AppendText("- Source image file: " & imgSwmSource & CrLf & - "- Target index: " & imgMergerIndex & CrLf & - "- Destination image file: " & imgWimDestination & CrLf) + LogView.AppendText(ProgressLogText("Source.Image.File") & imgSwmSource & CrLf & + ProgressLogText("Target.Index") & imgMergerIndex & CrLf & + ProgressLogText("Destination.Image.File") & imgWimDestination & CrLf) ' Run commands Select Case DismVersionChecker.ProductMajorPart @@ -7110,37 +4529,13 @@ Public Class ProgressPanel CommandArgs = "/logpath=" & Quote & Application.StartupPath & "\logs\" & GetCurrentDateAndTime(Now) & Quote & " /english /export-image /sourceimagefile=" & Quote & imgSwmSource & Quote & " /swmfile=" & Quote & Path.GetDirectoryName(imgSwmSource) & "\" & Path.GetFileNameWithoutExtension(imgSwmSource) & "*.swm" & Quote & " /sourceindex=" & imgMergerIndex & " /destinationimagefile=" & Quote & imgWimDestination & Quote & " /compress=max /checkintegrity" End Select RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.MergeSWM")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -7149,51 +4544,18 @@ Public Class ProgressPanel DynaLog.LogMessage("- Source image file: " & Quote & SwitchSourceImg & Quote) DynaLog.LogMessage("- Source image index: " & SwitchSourceIndex) DynaLog.LogMessage("- Target image index: " & SwitchTargetIndex) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - allTasks.Text = "Switching image indexes..." - currentTask.Text = "Unmounting source index..." - Case "ESN" - allTasks.Text = "Cambiando índices de imagen..." - currentTask.Text = "Desmontando índice de origen..." - Case "FRA" - allTasks.Text = "Changement d'index de l'image en cours..." - currentTask.Text = "Démontage de l'index original en cours..." - Case "PTB", "PTG" - allTasks.Text = "Alternar índices de imagem..." - currentTask.Text = "Desmontar índice de origem..." - Case "ITA" - allTasks.Text = "Modifica indici immagine..." - currentTask.Text = "Smontaggio indice sorgente..." - End Select - Case 1 - allTasks.Text = "Switching image indexes..." - currentTask.Text = "Unmounting source index..." - Case 2 - allTasks.Text = "Cambiando índices de imagen..." - currentTask.Text = "Desmontando índice de origen..." - Case 3 - allTasks.Text = "Changement d'index de l'image en cours..." - currentTask.Text = "Démontage de l'index original en cours..." - Case 4 - allTasks.Text = "Alternar índices de imagem..." - currentTask.Text = "Desmontar índice de origem..." - Case 5 - allTasks.Text = "Modifica indici immagine..." - currentTask.Text = "Smontaggio indice sorgente..." - End Select - LogView.AppendText(CrLf & "Switching image indexes..." & CrLf & - "Options:" & CrLf) + allTasks.Text = LocalizationService.ForSection("Progress.SwitchIndexes")("Switching.Image.Button") + currentTask.Text = LocalizationService.ForSection("Progress.SwitchIndexes")("Unmounting.Source.Button") + LogView.AppendText(CrLf & ProgressLogText("Switching.Image.Indexes") & CrLf & + ProgressLogText("Options") & CrLf) ' Gather options - LogView.AppendText("- Target mount directory: " & SwitchTarget & CrLf & - "- Source image index: " & SwitchSourceIndex & CrLf & - "- Target image index: " & SwitchTargetIndex & " (" & SwitchTargetIndexName & ")") + LogView.AppendText(ProgressLogText("Target.Mount.Directory") & SwitchTarget & CrLf & + ProgressLogText("Source.Image.Index") & SwitchSourceIndex & CrLf & + ProgressLogText("Target.Image.Index") & SwitchTargetIndex & " (" & SwitchTargetIndexName & ")") If SwitchCommitSourceIndex Then - LogView.AppendText(CrLf & "- Commit source index? Yes") + LogView.AppendText(CrLf & ProgressLogText("Commit.Source.Index.Yes")) Else - LogView.AppendText(CrLf & "- Commit source index? No") + LogView.AppendText(CrLf & ProgressLogText("Commit.Source.Index.No")) End If DynaLog.LogMessage("Unmounting source image whilst saving changes...") ' Run commands @@ -7214,66 +4576,18 @@ Public Class ProgressPanel CommandArgs &= " /discard" End If RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta del livello di errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.SwitchIndexes")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If If Decimal.ToInt32(DismExitCode) <> 0 Then DynaLog.LogMessage("Could not save changes to the image. Unmounting image whilst discarding changes...") - LogView.AppendText(CrLf & CrLf & "Could not commit changes to the image. Discarding changes...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Unmounting source index..." - Case "ESN" - currentTask.Text = "Desmontando índice de origen..." - Case "FRA" - currentTask.Text = "Démontage de l'index original en cours..." - Case "PTB", "PTG" - currentTask.Text = "Desmontar índice de origem..." - Case "ITA" - currentTask.Text = "Smontaggio indice sorgente..." - End Select - Case 1 - currentTask.Text = "Unmounting source index..." - Case 2 - currentTask.Text = "Desmontando índice de origen..." - Case 3 - currentTask.Text = "Démontage de l'index original en cours..." - Case 4 - currentTask.Text = "Desmontar índice de origem..." - Case 5 - currentTask.Text = "Smontaggio indice sorgente..." - End Select + LogView.AppendText(CrLf & CrLf & ProgressLogText("Could.Not.Commit.Changes.To.The.Image.Discarding")) + currentTask.Text = LocalizationService.ForSection("Progress.SwitchIndexes")("Unmounting.Source.Index.Item") Select Case DismVersionChecker.ProductMajorPart Case 6 Select Case DismVersionChecker.ProductMinorPart @@ -7286,37 +4600,13 @@ Public Class ProgressPanel CommandArgs = "/logpath=" & Quote & Application.StartupPath & "\logs\" & GetCurrentDateAndTime(Now) & Quote & " /english /unmount-image /mountdir=" & Quote & SwitchTarget & Quote & " /discard" End Select RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.SwitchIndexes")("CurrentTask.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If If Decimal.ToInt32(DismExitCode) <> 0 Then DynaLog.LogMessage("Could not unmount the image.") @@ -7326,42 +4616,9 @@ Public Class ProgressPanel AllPB.Value = AllPB.Maximum / taskCount currentTCont += 1 DynaLog.LogMessage("Mounting Windows image...") - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - currentTask.Text = "Mounting target index..." - Case "ESN" - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - currentTask.Text = "Montando índice de destino..." - Case "FRA" - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - currentTask.Text = "Montage de l'index de ciblage en cours..." - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - currentTask.Text = "A montar o índice de destino..." - Case "ITA" - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - currentTask.Text = "Montaggio indice destinazione..." - End Select - Case 1 - taskCountLbl.Text = "Tasks: " & currentTCont & "/" & taskCount - currentTask.Text = "Mounting target index..." - Case 2 - taskCountLbl.Text = "Tareas: " & currentTCont & "/" & taskCount - currentTask.Text = "Montando índice de destino..." - Case 3 - taskCountLbl.Text = "Tâches : " & currentTCont & "/" & taskCount - currentTask.Text = "Montage de l'index de ciblage en cours..." - Case 4 - taskCountLbl.Text = "Tarefas: " & currentTCont & "/" & taskCount - currentTask.Text = "A montar o índice de destino..." - Case 5 - taskCountLbl.Text = "Attività: " & currentTCont & "/" & TaskList.Count - currentTask.Text = "Montaggio indice destinazione..." - End Select - LogView.AppendText(CrLf & "Mounting image (index: " & SwitchTargetIndex & ")...") + taskCountLbl.Text = LocalizationService.ForSection("Progress").Format("Tasks.Label", currentTCont, taskCount) + currentTask.Text = LocalizationService.ForSection("Progress.SwitchIndexes")("Mounting.Target.Index.Item") + LogView.AppendText(CrLf & ProgressLogText("Mounting.Image.Index") & SwitchTargetIndex & ")...") Select Case DismVersionChecker.ProductMajorPart Case 6 Select Case DismVersionChecker.ProductMinorPart @@ -7377,37 +4634,13 @@ Public Class ProgressPanel CommandArgs &= " /readonly" End If RunProcess(DismProgram, CommandArgs) - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - currentTask.Text = "Gathering error level..." - Case "ESN" - currentTask.Text = "Recopilando nivel de error..." - Case "FRA" - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case "PTB", "PTG" - currentTask.Text = "A recolher o nível de erro..." - Case "ITA" - currentTask.Text = "Raccolta livello errore..." - End Select - Case 1 - currentTask.Text = "Gathering error level..." - Case 2 - currentTask.Text = "Recopilando nivel de error..." - Case 3 - currentTask.Text = "Recueil du niveau d'erreur en cours..." - Case 4 - currentTask.Text = "A recolher o nível de erro..." - Case 5 - currentTask.Text = "Raccolta livello errore..." - End Select - LogView.AppendText(CrLf & "Gathering error level...") + currentTask.Text = LocalizationService.ForSection("Progress.SwitchIndexes")("Gathering.Error.Level.Item") + LogView.AppendText(CrLf & ProgressLogText("Gathering.Error.Level")) GetErrorCode(False) If errCode.Length >= 8 Then - LogView.AppendText(CrLf & CrLf & " Error level : 0x" & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level.0x") & errCode) Else - LogView.AppendText(CrLf & CrLf & " Error level : " & errCode) + LogView.AppendText(CrLf & CrLf & ProgressLogText("Error.Level") & errCode) End If End Sub @@ -7415,19 +4648,19 @@ Public Class ProgressPanel DynaLog.LogMessage("Preparing to replace FFU files...") DynaLog.LogMessage("- Source file: " & Quote & FFUReplaceSourceFFU & Quote) DynaLog.LogMessage("- Destination file: " & Quote & FFUReplaceDestinationFFU & Quote) - allTasks.Text = "Replacing FFU files..." - currentTask.Text = "Replacing original FFU file with modified FFU file..." - LogView.AppendText(CrLf & "Replacing FFU file " & Quote & FFUReplaceDestinationFFU & Quote & " with " & Quote & FFUReplaceSourceFFU & Quote & "...") + allTasks.Text = LocalizationService.ForSection("Progress.Operation")("Replacing.FFU.Files.Label") + currentTask.Text = LocalizationService.ForSection("Progress.Operation")("Replacing.Original.FFU.Label") + LogView.AppendText(CrLf & ProgressLogText("Replacing.FFU.File") & Quote & FFUReplaceDestinationFFU & Quote & ProgressLogText("With") & Quote & FFUReplaceSourceFFU & Quote & "...") Try If Not File.Exists(FFUReplaceSourceFFU) Or Not File.Exists(FFUReplaceDestinationFFU) Then Throw New Exception("One or both FFU files do not exist.") File.Delete(FFUReplaceDestinationFFU) File.Move(FFUReplaceSourceFFU, FFUReplaceDestinationFFU) IsSuccessful = True - LogView.AppendText(CrLf & "The FFU file has been successfully replaced.") + LogView.AppendText(CrLf & ProgressLogText("The.FFU.File.Has.Been.Successfully.Replaced")) Catch ex As Exception DynaLog.LogMessage("FFU files could not be replaced. Error message: " & ex.Message) IsSuccessful = False - LogView.AppendText(CrLf & "The FFU file could not be replaced: " & ex.Message) + LogView.AppendText(CrLf & ProgressLogText("The.FFU.File.Could.Not.Be.Replaced") & ex.Message) End Try End Sub @@ -7481,7 +4714,7 @@ Public Class ProgressPanel Catch ex As Exception DynaLog.LogMessage("Could not create log file. Error message: " & ex.Message) LogView.AppendText(CrLf & - "Warning: the contents of the log window could not be saved to the log file. Reason: " & ex.Message) + ProgressLogText("Warning.The.Contents.Of.The.Log.Window.Could") & ex.Message) Exit Sub End Try End If @@ -7525,7 +4758,7 @@ Public Class ProgressPanel Catch ex As Exception DynaLog.LogMessage("Could not create log file. Error message: " & ex.Message) LogView.AppendText(CrLf & - "Warning: the contents of the log window could not be saved to the log file. Reason: " & ex.Message) + ProgressLogText("Warning.The.Contents.Of.The.Log.Window.Could") & ex.Message) Exit Sub End Try End If @@ -7545,8 +4778,8 @@ Public Class ProgressPanel If IsSuccessful Then DynaLog.LogMessage("Tasks have been successful.") If OperationNum = 9 Then LogView.AppendText(CrLf & - "The volume images have been deleted. If you want to remount this image into a DISMTools project, choose the " & Quote & "Mount image" & Quote & " option, or use this command if you want to mount it elsewhere:" & CrLf & - " dism /mount-image /imagefile:" & Quote & imgIndexDeletionSourceImg & Quote & " /index: /mountdir:") + ProgressLogText("The.Volume.Images.Have.Been.Deleted.If.You") & Quote & ProgressLogText("Mount.Image") & Quote & ProgressLogText("Option.Or.Use.This.Command.If.You.Want") & CrLf & + ProgressLogText("DISM.Mount.Image.Imagefile") & Quote & imgIndexDeletionSourceImg & Quote & ProgressLogText("Index.Preferred.Index.Mountdir.Preferred.Mountpoint")) DynaLog.LogMessage("Saving operation logs...") SaveLog(Application.StartupPath & "\logs\DISMTools.log") SaveDismOutput(Application.StartupPath & "\logs\DISM_Output_" & Date.Now.ToString("yy-MM-dd-HH-mm-ss") & ".log") @@ -7767,31 +5000,7 @@ Public Class ProgressPanel ' This is a crucial change, so save things immediately MainForm.SaveDTProj() End If - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MainForm.MenuDesc.Text = "Ready" - Case "ESN" - MainForm.MenuDesc.Text = "Listo" - Case "FRA" - MainForm.MenuDesc.Text = "Prêt" - Case "PTB", "PTG" - MainForm.MenuDesc.Text = "Pronto" - Case "ITA" - MainForm.MenuDesc.Text = "Pronto" - End Select - Case 1 - MainForm.MenuDesc.Text = "Ready" - Case 2 - MainForm.MenuDesc.Text = "Listo" - Case 3 - MainForm.MenuDesc.Text = "Prêt" - Case 4 - MainForm.MenuDesc.Text = "Pronto" - Case 5 - MainForm.MenuDesc.Text = "Pronto" - End Select + MainForm.MenuDesc.Text = LocalizationService.ForSection("Progress.Background")("Ready.Label") TaskList.Clear() MainForm.StatusStrip.BackColor = CurrentTheme.AccentColors(1) MainForm.StartMountedImageDetector() @@ -7799,139 +5008,83 @@ Public Class ProgressPanel Else DynaLog.LogMessage("Tasks have not been successful.") Cancel_Button.Visible = True - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label1.Text = "Could not perform image operations" - Label2.Text = "An error has occurred, which stopped the image operations. Please read the log below for more information." - Case "ESN" - Label1.Text = "No se pudieron realizar las operaciones" - Label2.Text = "Ha ocurrido un error, el cual detuvo las operaciones. Lea el registro debajo para más información." - Case "FRA" - Label1.Text = "Impossible d'effectuer des opérations de l'image" - Label2.Text = "Une erreur s'est produite, qui a interrompu les opérations sur l'image. Veuillez lire le journal ci-dessous pour plus d'informations." - Case "PTB", "PTG" - Label1.Text = "Não foi possível efetuar operações de imagem" - Label2.Text = "Ocorreu um erro que interrompeu as operações de imagem. Leia o registo abaixo para obter mais informações." - Case "ITA" - Label1.Text = "Non è stato possibile eseguire operazioni sull'immagine" - Label2.Text = "Si è verificato un errore che ha interrotto le operazioni sull'immagine. Per ulteriori informazioni, consulta il registro sottostante." - End Select - Case 1 - Label1.Text = "Could not perform image operations" - Label2.Text = "An error has occurred, which stopped the image operations. Please read the log below for more information." - Case 2 - Label1.Text = "No se pudieron realizar las operaciones" - Label2.Text = "Ha ocurrido un error, el cual detuvo las operaciones. Lea el registro debajo para más información." - Case 3 - Label1.Text = "Impossible d'effectuer des opérations de l'image" - Label2.Text = "Une erreur s'est produite, qui a interrompu les opérations sur l'image. Veuillez lire le journal ci-dessous pour plus d'informations." - Case 4 - Label1.Text = "Não foi possível efetuar operações de imagem" - Label2.Text = "Ocorreu um erro que interrompeu as operações de imagem. Leia o registo abaixo para obter mais informações." - Case 5 - Label1.Text = "Non è stato possibile eseguire operazioni sull'immagine" - Label2.Text = "Si è verificato un errore che ha interrotto le operazioni sull'immagine. Per ulteriori informazioni, consulta il registro sottostante." - End Select + Label1.Text = LocalizationService.ForSection("Progress.Background")("Perform.Image.Label") + Label2.Text = LocalizationService.ForSection("Progress.Background")("Error.Has.Message") CurrentPB.Value = CurrentPB.Maximum AllPB.Value = AllPB.Maximum If Not IsExpanded Then LogButton.PerformClick() End If - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Cancel_Button.Text = "OK" - Case "ESN" - Cancel_Button.Text = "Aceptar" - Case "FRA" - Cancel_Button.Text = "OK" - Case "PTB", "PTG" - Cancel_Button.Text = "OK" - Case "ITA" - Cancel_Button.Text = "OK" - End Select - Case 1 - Cancel_Button.Text = "OK" - Case 2 - Cancel_Button.Text = "Aceptar" - Case 3 - Cancel_Button.Text = "OK" - Case 4 - Cancel_Button.Text = "OK" - Case 5 - Cancel_Button.Text = "OK" - End Select + CancelButtonClosesDialog = True + Cancel_Button.Text = LocalizationService.ForSection("Progress.Background")("Ok.Button") LinkLabel1.Visible = True ' Add details for error codes DynaLog.LogMessage("Error code: " & errCode) If errCode = "C1420126" Then ' An image that was selected for mounting is already mounted - LogView.AppendText(CrLf & "The specified image is already mounted. This command works for " & Quote & "orphaned" & Quote & " images") + LogView.AppendText(CrLf & ProgressLogText("The.Specified.Image.Is.Already.Mounted.This.Command") & Quote & ProgressLogText("Orphaned") & Quote & ProgressLogText("Images")) ElseIf errCode = "C142010C" Then ' The image, with read-only permissions, was attempted to be written - LogView.AppendText(CrLf & "The program tried to save changes to an image that was mounted as read-only. " & CrLf & - "To solve this, close this dialog, and click " & Quote & "Tools > Remount image with write permissions" & Quote & CrLf & - "Do note that, if the image came from an installation medium, you may need to copy the source file to perform modifications to it.") + LogView.AppendText(CrLf & ProgressLogText("The.Program.Tried.To.Save.Changes.To.An") & CrLf & + ProgressLogText("To.Solve.This.Close.This.Dialog.And.Click") & Quote & ProgressLogText("Tools.Remount.Image.With.Write.Permissions") & Quote & CrLf & + ProgressLogText("Do.Note.That.If.The.Image.Came.From")) ElseIf errCode = "C1420117" Then ' Some applications (or hidden processes) have open handles on the mount dir - LogView.AppendText(CrLf & "The program tried to unmount the image, but some applications or processes have opened files or directories of the image." & CrLf & - "Make sure no application or process is using the directories or files of the image." & CrLf & - "If the error occurred at the end of the operation (e.g., at 100%), and you were trying to save the changes; they might already be saved, and can be safe to continue discarding changes.") + LogView.AppendText(CrLf & ProgressLogText("The.Program.Tried.To.Unmount.The.Image.But") & CrLf & + ProgressLogText("Make.Sure.No.Application.Or.Process.Is.Using") & CrLf & + ProgressLogText("If.The.Error.Occurred.At.The.End.Of")) ElseIf errCode = "C142011D" Then ' A partial unmount or an in-progress mount operation happened - LogView.AppendText(CrLf & "The mounted image cannot be committed back into the source file." & CrLf & - "A partial unmount might have happened, or the image was still being mounted." & CrLf & - "If the image was unmounted whilst saving changes, the commit probably succeeded. Please validate this. If this is the case, proceed with unmounting the image discarding changes.") + LogView.AppendText(CrLf & ProgressLogText("The.Mounted.Image.Cannot.Be.Committed.Back.Into") & CrLf & + ProgressLogText("A.Partial.Unmount.Might.Have.Happened.Or.The") & CrLf & + ProgressLogText("If.The.Image.Was.Unmounted.Whilst.Saving.Changes")) ElseIf errCode = "C1510111" Then ' The specified image, that was marked to mount with read-write permissions, came from a read-only source (e.g., a Windows installation disc) - LogView.AppendText(CrLf & "The source file comes from a read-only source. You cannot mount it with read-write permissions." & CrLf & - "Please re-specify the image in the mount dialog whilst checking the " & Quote & "Read-only" & Quote & " check box. You can also try copying the source image to a folder with read-write permissions.") + LogView.AppendText(CrLf & ProgressLogText("The.Source.File.Comes.From.A.Read.Only") & CrLf & + ProgressLogText("Please.Re.Specify.The.Image.In.The.Mount") & Quote & ProgressLogText("Read.Only") & Quote & ProgressLogText("Check.Box.You.Can.Also.Try.Copying.The")) ElseIf errCode = "00000087" Then ' Internal errors - LogView.AppendText(CrLf & "There is essential data that was not picked internally by the operation. This may be a bug in the software or a feature may be incomplete.") + LogView.AppendText(CrLf & ProgressLogText("There.Is.Essential.Data.That.Was.Not.Picked")) ElseIf OperationNum = 26 Then ' No packages have been added successfully - LogView.AppendText(CrLf & "No packages have been added successfully. Try looking up the error codes on the Internet") + LogView.AppendText(CrLf & ProgressLogText("No.Packages.Have.Been.Added.Successfully.Try.Looking")) ElseIf OperationNum = 27 Then ' No packages have been removed successfully - LogView.AppendText(CrLf & "No packages have been removed successfully. Try looking up the error codes on the Internet") + LogView.AppendText(CrLf & ProgressLogText("No.Packages.Have.Been.Removed.Successfully.Try.Looking")) ElseIf OperationNum = 30 Then ' No features have been enabled successfully - LogView.AppendText(CrLf & "No features have been enabled successfully. Try looking up the error codes on the Internet") + LogView.AppendText(CrLf & ProgressLogText("No.Features.Have.Been.Enabled.Successfully.Try.Looking")) ElseIf OperationNum = 31 Then ' No features have been disabled successfully - LogView.AppendText(CrLf & "No features have been disabled successfully. Try looking up the error codes on the Internet") + LogView.AppendText(CrLf & ProgressLogText("No.Features.Have.Been.Disabled.Successfully.Try.Looking")) ElseIf OperationNum = 78 Then ' Cause is undetermined - LogView.AppendText(CrLf & "Either this operation has failed or some drivers were not installed. Consider reloading this project or mode to see whether there are driver changes." & CrLf & CrLf & - "If there are driver changes, consider reading the driver installation logs, stored in the INF directory of the target image. Otherwise, export the drivers you want to add from the source image and add them to the target image manually." & CrLf & CrLf & - "You can also manually customize the export directory by deleting the drivers you don't need. This may be another way to fix this problem, but you will need to temporarily pause the driver addition procedure before it scans the export directory (this can be done by selecting anything from the DISM command prompt window that appears when performing an operation)") + LogView.AppendText(CrLf & ProgressLogText("Either.This.Operation.Has.Failed.Or.Some.Drivers") & CrLf & CrLf & + ProgressLogText("If.There.Are.Driver.Changes.Consider.Reading.The") & CrLf & CrLf & + ProgressLogText("You.Can.Also.Manually.Customize.The.Export.Directory")) ElseIf errCode = "00000001" Then ElseIf errCode = "C000013A" Then ' Keyboard interrupt (Ctrl-C) or forced program closure. The former may not trigger this error, as it may trigger error 1223 - LogView.AppendText(CrLf & "The program has suffered a keyboard interrupt, or a forced program closure. The operation has been cancelled. If you have done it accidentally, you may run it again") + LogView.AppendText(CrLf & ProgressLogText("The.Program.Has.Suffered.A.Keyboard.Interrupt.Or")) ElseIf errCode = "C2FE0101" Then ' This happens on operation numbers 90, 91, and 92; related to Microsoft Edge servicing, if the components have already been installed. ' Since these operation numbers are meant for different things, detect them If OperationNum = 90 Then - LogView.AppendText(CrLf & "The Microsoft Edge components have already been installed in this image. There isn't anything to do here.") + LogView.AppendText(CrLf & ProgressLogText("The.Microsoft.Edge.Components.Have.Already.Been.Installed")) ElseIf OperationNum = 91 Then - LogView.AppendText(CrLf & "The Microsoft Edge browser has already been installed in this image. There isn't anything to do here.") + LogView.AppendText(CrLf & ProgressLogText("The.Microsoft.Edge.Browser.Has.Already.Been.Installed")) ElseIf OperationNum = 92 Then - LogView.AppendText(CrLf & "The Microsoft Edge WebView2 component has already been installed in this image. There isn't anything to do here.") + LogView.AppendText(CrLf & ProgressLogText("The.Microsoft.Edge.WebView2.Component.Has.Already.Been")) End If ElseIf errCode = "800F0806" Then ' There are pending image operations - LogView.AppendText(CrLf & "The operation could not be performed because this image has pending online operations. Applying and booting up the image might fix this issue.") + LogView.AppendText(CrLf & ProgressLogText("The.Operation.Could.Not.Be.Performed.Because.This")) ElseIf errCode = "BC2" Then DynaLog.LogMessage("The task has succeded but requires a restart...") If OperationNum = 86 Then DynaLog.LogMessage("Rollback initiated. Restarting system automatically in 10 seconds...") - LogView.AppendText(CrLf & "The rollback process has started. Your system needs to be restarted in order to continue. It will restart automatically in 10 seconds. Make sure you have saved your work.") + LogView.AppendText(CrLf & ProgressLogText("The.Rollback.Process.Has.Started.Your.System.Needs")) Dim restartProc As New Process() restartProc.StartInfo.FileName = Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\system32\shutdown.exe" restartProc.StartInfo.Arguments = "/r /t 10 /c " & Quote & "Shutdown initiated by DISMTools" & Quote @@ -7939,7 +5092,7 @@ Public Class ProgressPanel restartProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden restartProc.Start() Else - LogView.AppendText(CrLf & "The specified operation completed successfully, but requires a restart in order to be fully applied. Save your work and restart when ready") + LogView.AppendText(CrLf & ProgressLogText("The.Specified.Operation.Completed.Successfully.But.Requires.A")) End If Else Try @@ -7947,35 +5100,11 @@ Public Class ProgressPanel LogView.AppendText(CrLf & CrLf & exitDesc.Message) Catch ex As Exception ' Errors that weren't added to the database - LogView.AppendText(CrLf & "This error has not yet been added to the database, so a useful description can't be shown now. Try running the command manually and, if you see the same error, try looking it up on the Internet.") + LogView.AppendText(CrLf & ProgressLogText("This.Error.Has.Not.Yet.Been.Added.To")) End Try End If - LogView.AppendText(CrLf & CrLf & "For detailed information, consider reading the DISM operation logs.") - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MainForm.MenuDesc.Text = "Ready" - Case "ESN" - MainForm.MenuDesc.Text = "Listo" - Case "FRA" - MainForm.MenuDesc.Text = "Prêt" - Case "PTB", "PTG" - MainForm.MenuDesc.Text = "Pronto" - Case "ITA" - MainForm.MenuDesc.Text = "Pronto" - End Select - Case 1 - MainForm.MenuDesc.Text = "Ready" - Case 2 - MainForm.MenuDesc.Text = "Listo" - Case 3 - MainForm.MenuDesc.Text = "Prêt" - Case 4 - MainForm.MenuDesc.Text = "Pronto" - Case 5 - MainForm.MenuDesc.Text = "Pronto" - End Select + LogView.AppendText(CrLf & CrLf & ProgressLogText("For.Detailed.Information.Consider.Reading.The.DISM.Operation")) + MainForm.MenuDesc.Text = LocalizationService.ForSection("Progress.Background")("Ready.Item") MainForm.StatusStrip.BackColor = CurrentTheme.AccentColors(1) SaveLog(Application.StartupPath & "\logs\DISMTools.log") SaveDismOutput(Application.StartupPath & "\logs\DISM_Output_" & Date.Now.ToString("yy-MM-dd-HH-mm-ss") & ".log") @@ -7999,101 +5128,15 @@ Public Class ProgressPanel Private Sub ProgressPanel_Load(sender As Object, e As EventArgs) Handles MyBase.Load EnableExperiments = MainForm.EnableExperiments DynaLog.LogMessage("Preparing to start image operations...") - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Progress" - Label1.Text = "Image operations in progress..." - Label2.Text = "Please wait while the following tasks are done. This may take some time." - Cancel_Button.Text = "Cancel" - LogButton.Text = If(Not IsExpanded, "Show log", "Hide log") - LinkLabel1.Text = "Show DISM log file (advanced)" - allTasks.Text = "Please wait..." - currentTask.Text = "Please wait..." - Case "ESN" - Text = "Progreso" - Label1.Text = "Operaciones en progreso..." - Label2.Text = "Espere mientras las siguientes tareas se realizan. Esto puede llevar algo de tiempo." - Cancel_Button.Text = "Cancelar" - LogButton.Text = If(Not IsExpanded, "Mostrar registro", "Ocultar registro") - LinkLabel1.Text = "Mostrar archivo de registro de DISM (avanzado)" - allTasks.Text = "Por favor, espere..." - currentTask.Text = "Por favor, espere..." - Case "FRA" - Text = "Avancement" - Label1.Text = "Opérations de l'image en cours..." - Label2.Text = "Veuillez patienter pendant que les tâches suivantes sont effectuées. Cela peut prendre un certain temps." - Cancel_Button.Text = "Annuler" - LogButton.Text = If(Not IsExpanded, "Afficher le journal", "Cacher le journal") - LinkLabel1.Text = "Afficher le fichier journal DISM (avancé)" - allTasks.Text = "Veuillez patienter..." - currentTask.Text = "Veuillez patienter..." - Case "PTB", "PTG" - Text = "Progresso" - Label1.Text = "Operações de imagem em curso..." - Label2.Text = "Aguarde enquanto as seguintes tarefas são efectuadas. Isto pode demorar algum tempo" - Cancel_Button.Text = "Cancelar" - LogButton.Text = If(Not IsExpanded, " Mostrar registo", "Ocultar registo") - LinkLabel1.Text = "Mostrar ficheiro de registo DISM (avançado)" - allTasks.Text = "Aguarde..." - currentTask.Text = "Por favor, aguarde..." - Case "ITA" - Text = "Progresso" - Label1.Text = "Operazioni immagine..." - Label2.Text = "Attendi mentre vengono eseguite le operazioni. L'operazione potrebbe richiedere del tempo" - Cancel_Button.Text = "Annulla" - LogButton.Text = If(Not IsExpanded, " Visualizza registro", "Nascondi registro") - LinkLabel1.Text = "Visualizza il file registro DISM (avanzato)" - allTasks.Text = "Attendi..." - currentTask.Text = "Attendi..." - End Select - Case 1 - Text = "Progress" - Label1.Text = "Image operations in progress..." - Label2.Text = "Please wait while the following tasks are done. This may take some time." - Cancel_Button.Text = "Cancel" - LogButton.Text = If(Not IsExpanded, "Show log", "Hide log") - LinkLabel1.Text = "Show DISM log file (advanced)" - allTasks.Text = "Please wait..." - currentTask.Text = "Please wait..." - Case 2 - Text = "Progreso" - Label1.Text = "Operaciones en progreso..." - Label2.Text = "Espere mientras las siguientes tareas se realizan. Esto puede llevar algo de tiempo." - Cancel_Button.Text = "Cancelar" - LogButton.Text = If(Not IsExpanded, "Mostrar registro", "Ocultar registro") - LinkLabel1.Text = "Mostrar archivo de registro de DISM (avanzado)" - allTasks.Text = "Por favor, espere..." - currentTask.Text = "Por favor, espere..." - Case 3 - Text = "Avancement" - Label1.Text = "Opérations de l'image en cours..." - Label2.Text = "Veuillez patienter pendant que les tâches suivantes sont effectuées. Cela peut prendre un certain temps." - Cancel_Button.Text = "Annuler" - LogButton.Text = If(Not IsExpanded, "Afficher le journal", "Cacher le journal") - LinkLabel1.Text = "Afficher le fichier journal DISM (avancé)" - allTasks.Text = "Veuillez patienter..." - currentTask.Text = "Veuillez patienter..." - Case 4 - Text = "Progresso" - Label1.Text = "Operações de imagem em curso..." - Label2.Text = "Aguarde enquanto as seguintes tarefas são efectuadas. Isto pode demorar algum tempo" - Cancel_Button.Text = "Cancelar" - LogButton.Text = If(Not IsExpanded, " Mostrar registo", "Ocultar registo") - LinkLabel1.Text = "Mostrar ficheiro de registo DISM (avançado)" - allTasks.Text = "Aguarde..." - currentTask.Text = "Por favor, aguarde..." - Case 5 - Text = "Progresso" - Label1.Text = "Operazioni immagine..." - Label2.Text = "Attendi mentre vengono eseguite le operazioni. L'operazione potrebbe richiedere del tempo" - Cancel_Button.Text = "Annulla" - LogButton.Text = If(Not IsExpanded, " Visualizza registro", "Nascondi registro") - LinkLabel1.Text = "Visualizza il file registro DISM (avanzato)" - allTasks.Text = "Attendi..." - currentTask.Text = "Attendi..." - End Select + Text = LocalizationService.ForSection("Progress")("Progress.Label") + Label1.Text = LocalizationService.ForSection("Progress")("Image.Operations.Label") + Label2.Text = LocalizationService.ForSection("Progress")("Wait.Tasks.Label") + CancelButtonClosesDialog = False + Cancel_Button.Text = LocalizationService.ForSection("Progress")("Cancel.Button") + LogButton.Text = If(Not IsExpanded, LocalizationService.ForSection("Progress")("ShowLog.Label"), LocalizationService.ForSection("Progress")("HideLog.Label")) + LinkLabel1.Text = LocalizationService.ForSection("Progress")("Show.Dismlog.File.Link") + allTasks.Text = LocalizationService.ForSection("Progress")("Wait.Label") + currentTask.Text = LocalizationService.ForSection("Progress")("CurrentTask.Label") PrepareAllReporters() If MainForm.ExpandedProgressPanel AndAlso Not IsExpanded Then LogButton.PerformClick() @@ -8108,7 +5151,6 @@ Public Class ProgressPanel MainForm.bwBackgroundProcessAction = 0 MainForm.bwGetImageInfo = True MainForm.bwGetAdvImgInfo = True - Language = MainForm.Language AllDrivers = MainForm.AllDrivers BodyPanel.BorderStyle = BorderStyle.None If MainForm.CurrentImage IsNot Nothing Then @@ -8143,7 +5185,7 @@ Public Class ProgressPanel ' Make form visible sooner. We may have to set more things up here, ' but we'll see Visible = True - LogView.AppendText("Cancelling background processes...") + LogView.AppendText(ProgressLogText("Cancelling.Background.Processes")) MainForm.ImgBW.CancelAsync() While MainForm.ImgBW.IsBusy Application.DoEvents() @@ -8179,31 +5221,7 @@ Public Class ProgressPanel LogView.Font = New Font("Consolas", 11.25) End Try DISM_LogView.Font = LogView.Font - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MainForm.MenuDesc.Text = "Performing image operations. Please wait..." - Case "ESN" - MainForm.MenuDesc.Text = "Realizando operaciones con la imagen. Espere..." - Case "FRA" - MainForm.MenuDesc.Text = "Exécution d'opérations sur les images en cours. Veuillez patienter..." - Case "PTB", "PTG" - MainForm.MenuDesc.Text = "Realização de operações de imagem. Por favor, aguarde..." - Case "ITA" - MainForm.MenuDesc.Text = "Esecuzione operazioni sulle immagini..." - End Select - Case 1 - MainForm.MenuDesc.Text = "Performing image operations. Please wait..." - Case 2 - MainForm.MenuDesc.Text = "Realizando operaciones con la imagen. Espere..." - Case 3 - MainForm.MenuDesc.Text = "Exécution d'opérations sur les images en cours. Veuillez patienter..." - Case 4 - MainForm.MenuDesc.Text = "Realização de operações de imagem. Por favor, aguarde..." - Case 5 - MainForm.MenuDesc.Text = "Esecuzione operazioni sulle immagini..." - End Select + MainForm.MenuDesc.Text = LocalizationService.ForSection("Progress")("Performing.Image.Ops.Button") MainForm.StatusStrip.BackColor = CurrentTheme.AccentColors(3) If Debugger.IsAttached Then IsDebugged = True @@ -8249,31 +5267,7 @@ Public Class ProgressPanel If TaskList.Count >= 2 Then DynaLog.LogMessage("More than 2 tasks will be made.") AllPB.Maximum = TaskList.Count * 100 - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - taskCountLbl.Text = "Tasks: 1/" & TaskList.Count - Case "ESN" - taskCountLbl.Text = "Tareas: 1/" & TaskList.Count - Case "FRA" - taskCountLbl.Text = "Tâches : 1/" & TaskList.Count - Case "PTB", "PTG" - taskCountLbl.Text = "Tarefas: 1/" & TaskList.Count - Case "ITA" - taskCountLbl.Text = "Attività: 1/" & TaskList.Count - End Select - Case 1 - taskCountLbl.Text = "Tasks: 1/" & TaskList.Count - Case 2 - taskCountLbl.Text = "Tareas: 1/" & TaskList.Count - Case 3 - taskCountLbl.Text = "Tâches : 1/" & TaskList.Count - Case 4 - taskCountLbl.Text = "Tarefas: 1/" & TaskList.Count - Case 5 - taskCountLbl.Text = "Attività: 1/" & TaskList.Count - End Select + taskCountLbl.Text = LocalizationService.ForSection("Progress").Format("TaskCount.Label", TaskList.Count) OperationNum = 1000 Else DynaLog.LogMessage("Getting the tasks of the specified operation...") @@ -8286,7 +5280,7 @@ Public Class ProgressPanel RegistryControlPanel.Close() If RegistryControlPanel.Visible Then DynaLog.LogMessage("Second check determined the image registry control panel is still open. Cannot continue performing tasks until it's closed") - LogView.AppendText(CrLf & "The image registry hives need to be unloaded before continuing to perform the task.") + LogView.AppendText(CrLf & ProgressLogText("The.Image.Registry.Hives.Need.To.Be.Unloaded")) End If End If If Not RegistryControlPanel.Visible Then @@ -8312,10 +5306,10 @@ Public Class ProgressPanel Catch ex As Exception If Not File.Exists(SystemEditor) Then DynaLog.LogMessage("The system editor was not found on this system.") - LogView.AppendText(CrLf & "System editor was not found") + LogView.AppendText(CrLf & ProgressLogText("System.Editor.Was.Not.Found")) ElseIf Not File.Exists(Application.StartupPath & "\logs\" & dateStr) Or Not File.Exists(LogPath) Then DynaLog.LogMessage("The log file is not found on this system.") - LogView.AppendText(CrLf & "The log file was not found") + LogView.AppendText(CrLf & ProgressLogText("The.Log.File.Was.Not.Found")) End If End Try End Sub @@ -8325,31 +5319,7 @@ Public Class ProgressPanel End Sub Private Sub ProgressPanel_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MainForm.MenuDesc.Text = "Ready" - Case "ESN" - MainForm.MenuDesc.Text = "Listo" - Case "FRA" - MainForm.MenuDesc.Text = "Prêt" - Case "PTB", "PTG" - MainForm.MenuDesc.Text = "Pronto" - Case "ITA" - MainForm.MenuDesc.Text = "Pronto" - End Select - Case 1 - MainForm.MenuDesc.Text = "Ready" - Case 2 - MainForm.MenuDesc.Text = "Listo" - Case 3 - MainForm.MenuDesc.Text = "Prêt" - Case 4 - MainForm.MenuDesc.Text = "Pronto" - Case 5 - MainForm.MenuDesc.Text = "Pronto" - End Select + MainForm.MenuDesc.Text = LocalizationService.ForSection("Progress.Close")("Ready.Label") MainForm.StatusStrip.BackColor = CurrentTheme.AccentColors(1) MainForm.StartMountedImageDetector() End Sub @@ -8376,61 +5346,13 @@ Public Class ProgressPanel Private Sub LogSwitcherPic1_MouseHover(sender As Object, e As EventArgs) Handles LogSwitcherPic1.MouseHover Dim olcText As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - olcText = "Operation Logs" - Case "ESN" - olcText = "Registros de operación" - Case "FRA" - olcText = "Journal des opérations" - Case "PTB", "PTG" - olcText = "Registos de operações" - Case "ITA" - olcText = "Registri operazioni" - End Select - Case 1 - olcText = "Operation Logs" - Case 2 - olcText = "Registros de operación" - Case 3 - olcText = "Journal des opérations" - Case 4 - olcText = "Registos de operações" - Case 5 - olcText = "Registri operazioni" - End Select + olcText = LocalizationService.ForSection("Progress.Logs.Operation")("Label") WindowHelper.DisplayToolTip(sender, olcText) End Sub Private Sub LogSwitcherPic2_MouseHover(sender As Object, e As EventArgs) Handles LogSwitcherPic2.MouseHover Dim olcText As String = "" - Select Case Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - olcText = "DISM Output" - Case "ESN" - olcText = "Salida de DISM" - Case "FRA" - olcText = "Sortie DISM" - Case "PTB", "PTG" - olcText = "Saída DISM" - Case "ITA" - olcText = "Output DISM" - End Select - Case 1 - olcText = "DISM Output" - Case 2 - olcText = "Salida de DISM" - Case 3 - olcText = "Sortie DISM" - Case 4 - olcText = "Saída DISM" - Case 5 - olcText = "Uscita DISM" - End Select + olcText = LocalizationService.ForSection("Progress.Logs.DismOutput")("Label") WindowHelper.DisplayToolTip(sender, olcText) End Sub @@ -8439,4 +5361,4 @@ Public Class ProgressPanel WindowState = FormWindowState.Normal End If End Sub -End Class \ No newline at end of file +End Class diff --git a/Panels/DoWork/ProgressReporter.vb b/Panels/DoWork/ProgressReporter.vb index 283457d3b..59775efd5 100644 --- a/Panels/DoWork/ProgressReporter.vb +++ b/Panels/DoWork/ProgressReporter.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Module ProgressReporter @@ -12,7 +12,7 @@ Module ProgressReporter Private Sub InitializeForm() progressForm = New Form With { .StartPosition = FormStartPosition.CenterScreen, - .Text = "Progress", + .Text = LocalizationService.ForSection("ProgressReporter")("Progress.Label"), .Size = WindowHelper.ScaleSizeLogical(384, 72), .FormBorderStyle = FormBorderStyle.None, .MinimizeBox = False, diff --git a/Panels/Exceptions/ExceptionForm.vb b/Panels/Exceptions/ExceptionForm.vb index 0cd10b7d4..c54d4ab3e 100644 --- a/Panels/Exceptions/ExceptionForm.vb +++ b/Panels/Exceptions/ExceptionForm.vb @@ -1,10 +1,10 @@ -Imports Microsoft.VisualBasic.ControlChars +Imports Microsoft.VisualBasic.ControlChars Imports System.IO Public Class ExceptionForm - Dim copySuccess As String = "This information has been copied to the clipboard." - Dim copyFail As String = "You'll need to copy this information manually." + Dim copySuccess As String = String.Empty + Dim copyFail As String = String.Empty Dim dvPath As String = Path.Combine(Application.StartupPath, "Tools", "DynaViewer", "DynaViewer.exe") @@ -24,76 +24,28 @@ Public Class ExceptionForm End Sub Private Sub ExceptionForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load - ' Use system language in case exception is thrown when trying to load settings - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "DISMTools - Internal Error" - Label1.Text = "We are sorry for the inconvenience, but DISMTools has run into an error that it couldn't handle and we need your help in order to continue." & CrLf & CrLf & "Here is the error information if you need it:" - Label2.Text = "Please help us fix this issue" - Label3.Text = "In order to prevent this problem from happening again, we would like to know more about it by reporting an issue on the GitHub repository. You will need a GitHub account to report feedback." - Label4.Text = "When reporting this issue, PLEASE paste the exception information on the left. Otherwise, standard closure policies will be applied which imply closing your issue after (at least) 4 hours." - Label5.Text = "You may be able to continue running the program by clicking Continue. However, if this error is displayed for a second time, you can forcefully close the program by clicking Exit. Do note that changes made to projects, as well as changes in the Recents list, will not be saved." & CrLf & CrLf & "What do you want to do?" - Issue_Btn.Text = "Report this issue" - LinkLabel1.Text = "Continue" - LinkLabel2.Text = "Exit" - copySuccess = "This information has been copied to the clipboard." - copyFail = "You'll need to copy this information manually." - Case "ESN" - Text = "DISMTools - Error interno" - Label1.Text = "Lo sentimos por el inconveniente, pero DISMTools ha sufrido un error que no pudo controlar y necesitamos su ayuda para poder continuar." & CrLf & CrLf & "Aquí tiene la información del error por si lo necesita:" - Label2.Text = "Por favor, ayúdenos a corregir este problema" - Label3.Text = "Para evitar que este problema ocurra de nuevo, nos gustaría saber más acerca de él reportando un error en el repositorio de GitHub. Necesitará una cuenta de GitHub para enviar comentarios." - Label4.Text = "Cuando reporte este error, le rogamos que pegue la información de la excepción en la izquierda. De otra manera, se aplicarán políticas de cierre estándar que implican cerrar tu propuesta después de (al menos) 4 horas." - Label5.Text = "Podrá ser capaz de continuar con la ejecución del programa haciendo clic en Continuar. En cambio, si este error se muestra por una segunda vez, puede cerrar el programa forzadamente haciendo clic en Salir. Dese cuenta de que los cambios de proyectos y de la lista de Recientes no se guardarán." & CrLf & CrLf & "¿Qué le gustaría hacer?" - Issue_Btn.Text = "Reportar este problema" - LinkLabel1.Text = "Continuar" - LinkLabel2.Text = "Salir" - copySuccess = "Esta información ha sido copiada al portapapeles." - copyFail = "Deberá copiar esta información manualmente." - Case "FRA" - Text = "DISMTools - Erreur interne" - Label1.Text = "Nous sommes désolés pour la gêne occasionnée, mais DISMTools a rencontré une erreur qu'il n'a pas pu gérer et nous avons besoin de votre aide pour continuer" & CrLf & CrLf & "Voici les informations sur l'erreur si vous en avez besoin :" - Label2.Text = "Veuillez nous aider à résoudre ce problème" - Label3.Text = "Afin d'éviter que ce problème ne se reproduise, nous aimerions en savoir plus en signalant un problème sur le dépôt GitHub. Vous devez disposer d'un compte GitHub pour signaler un problème." - Label4.Text = "Lorsque vous signalez ce problème, VEUILLEZ coller les informations relatives à l'exception à gauche. Dans le cas contraire, les politiques de fermeture standard seront appliquées, ce qui implique la fermeture de votre problème après (au moins) 4 heures." - Label5.Text = "Vous pouvez continuer à exécuter le programme en cliquant sur Continuer. Cependant, si cette erreur s'affiche une seconde fois, vous pouvez fermer le programme en cliquant sur Quitter. Notez que les modifications apportées aux projets, ainsi que les modifications apportées à la liste Récents, ne seront pas sauvegardées." & CrLf & CrLf & "Que voulez-vous faire ?" - Issue_Btn.Text = "Signaler ce problème" - LinkLabel1.Text = "Continuer" - LinkLabel2.Text = "Quitter" - copySuccess = "Cette information a été copiée dans le presse-papiers" - copyFail = "Vous devrez copier ces informations manuellement." - Case "PTB", "PTG" - Text = "DISMTools - Erro interno" - Label1.Text = "Lamentamos o incómodo, mas o DISMTools deparou-se com um erro que não conseguiu resolver e precisamos da sua ajuda para continuar." & CrLf & CrLf & "Aqui está a informação do erro, se precisar dela:" - Label2.Text = "Por favor, ajude-nos a resolver este problema" - Label3.Text = "Para evitar que este problema volte a acontecer, gostaríamos de saber mais sobre o mesmo, reportando um problema no repositório do GitHub. Necessita de uma conta GitHub para comunicar comentários." - Label4.Text = "Ao relatar este problema, POR FAVOR, cole as informações de exceção à esquerda. Caso contrário, serão aplicadas as políticas de encerramento padrão, que implicam o encerramento do seu problema após (pelo menos) 4 horas." - Label5.Text = "Poderá continuar a executar o programa clicando em Continuar. No entanto, se este erro for apresentado pela segunda vez, pode fechar o programa à força, clicando em Sair. Tenha em atenção que as alterações efectuadas nos projectos, bem como as alterações na lista Recentes, não serão guardadas." & CrLf & CrLf & "O que pretende fazer?" - Issue_Btn.Text = "Comunicar este problema" - LinkLabel1.Text = "Continuar" - LinkLabel2.Text = "Sair" - copySuccess = "Esta informação foi copiada para a área de transferência." - copyFail = "Terá de copiar esta informação manualmente." - Case "ITA" - Text = "DISMTools - Errore interno" - Label1.Text = "Ci scusiamo per l'inconveniente, ma DISMTools ha riscontrato un errore che non è stato in grado di gestire e abbiamo bisogno del tuo aiuto per continuare." & CrLf & CrLf & "Ecco le informazioni sull'errore:" - Label2.Text = "Per favore, aiutaci a risolvere questo problema" - Label3.Text = "Per evitare che questo problema si ripeta, vorremmo saperne di più segnalando un problema sul repository GitHub. Per inviare un feedback è necessario un account GitHub" - Label4.Text = "Quando si segnala questo problema, incolla le informazioni sull'eccezione a sinistra. In caso contrario, verranno applicate le politiche di chiusura standard, che prevedono la chiusura del problema dopo (almeno) 4 ore." - Label5.Text = "È possibile continuare ad eseguire il programma selezionando 'Continua'. Tuttavia, se questo errore viene visualizzato per la seconda volta, è possibile chiudere forzatamente il programma selezionando 'Esci'. Nota che le modifiche apportate ai progetti e quelle nell'elenco Recenti non verranno salvate." & CrLf & CrLf & "Cosa si desidera fare?" - Issue_Btn.Text = "Segnala questo problema" - LinkLabel1.Text = "Continua" - LinkLabel2.Text = "Esci" - copySuccess = "Queste informazioni sono state copiate negli appunti" - copyFail = "È necessario copiare queste informazioni manualmente" - End Select - BackColor = CurrentTheme.SectionBackgroundColor - ForeColor = CurrentTheme.ForegroundColor - ErrorText.BackColor = CurrentTheme.BackgroundColor - ErrorText.ForeColor = CurrentTheme.ForegroundColor - Dim handle As IntPtr = WindowHelper.GetWindowHandle(Me) - WindowHelper.ToggleDarkTitleBar(handle, CurrentTheme.IsDark) - ThemeHelper.UpdateLinkLabelColors(Me, Color.DodgerBlue, CurrentTheme.AccentColors(0)) + Text = LocalizationService.ForSection("Exception")("DISM.Tools.Internal.Label") + Label1.Text = LocalizationService.ForSection("Exception")("Sorry.Inconvenience.Message") + Label2.Text = LocalizationService.ForSection("Exception")("Help.Us.Fix.Label") + Label3.Text = LocalizationService.ForSection("Exception")("Problem.Prevention.Message") + Label4.Text = LocalizationService.ForSection("Exception")("Reporting.Issue.Message") + Label5.Text = LocalizationService.ForSection("Exception")("Continue.Running.Message") + Issue_Btn.Text = LocalizationService.ForSection("Exception")("ReportIssue.Label") + LinkLabel1.Text = LocalizationService.ForSection("Exception")("Continue.Button") + LinkLabel2.Text = LocalizationService.ForSection("Exception")("Exit.Button") + copySuccess = LocalizationService.ForSection("Exception")("Copied.Clipboard.Label") + copyFail = LocalizationService.ForSection("Exception")("Ll.Copy.Label") + If CurrentTheme IsNot Nothing Then + BackColor = CurrentTheme.SectionBackgroundColor + ForeColor = CurrentTheme.ForegroundColor + ErrorText.BackColor = CurrentTheme.BackgroundColor + ErrorText.ForeColor = CurrentTheme.ForegroundColor + Dim handle As IntPtr = WindowHelper.GetWindowHandle(Me) + WindowHelper.ToggleDarkTitleBar(handle, CurrentTheme.IsDark) + If CurrentTheme.AccentColors IsNot Nothing AndAlso CurrentTheme.AccentColors.Count > 0 Then + ThemeHelper.UpdateLinkLabelColors(Me, Color.DodgerBlue, CurrentTheme.AccentColors(0)) + End If + End If Try Dim data As New DataObject() data.SetText(ErrorText.Text, TextDataFormat.Text) @@ -115,10 +67,10 @@ Public Class ExceptionForm File.Copy(Path.Combine(Application.StartupPath, "logs", "DT_DynaLog.log"), Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "DynaLog_Trace.log")) Process.Start(dvPath, Quote & Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "DynaLog_Trace.log") & Quote & _ - " /selectlast=10") + " /selectlast=10 " & LocalizationService.GetLanguageCommandLineArgument()) Catch ex As Exception Process.Start(dvPath, Quote & Path.Combine(Application.StartupPath, "logs", "DT_DynaLog.log") & Quote & _ - " /selectlast=10") + " /selectlast=10 " & LocalizationService.GetLanguageCommandLineArgument()) End Try End Sub End Class \ No newline at end of file diff --git a/Panels/Exe_Ops/BGProcs/BGProcsAdvSettings.vb b/Panels/Exe_Ops/BGProcs/BGProcsAdvSettings.vb index 3faaff3a9..2af8b3608 100644 --- a/Panels/Exe_Ops/BGProcs/BGProcsAdvSettings.vb +++ b/Panels/Exe_Ops/BGProcs/BGProcsAdvSettings.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Public Class BGProcsAdvSettings @@ -18,31 +18,7 @@ Public Class BGProcsAdvSettings End If If (NeedsDriverChecks And MainForm.isProjectLoaded And (MainForm.IsImageMounted Or MainForm.OnlineManagement)) And Not MainForm.ImgBW.IsBusy Then Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "The program will now detect the drivers of the image according to the options you've specified. This may take some time." - Case "ESN" - msg = "El programa va a detectar los controladores de la imagen atendiendo a las opciones que ha especificado. Esto puede llevar un tiempo." - Case "FRA" - msg = "Le programme va maintenant détecter les pilotes de l'image en fonction des options que vous avez spécifiées. Cela peut prendre un certain temps." - Case "PTB", "PTG" - msg = "O programa irá agora detetar os controladores da imagem de acordo com as opções que especificou. Isto pode demorar algum tempo." - Case "ITA" - msg = "Il programma ora rileverà i driver dell'immagine in base alle opzioni specificate. Questa operazione potrebbe richiedere un po' di tempo" - End Select - Case 1 - msg = "The program will now detect the drivers of the image according to the options you've specified. This may take some time." - Case 2 - msg = "El programa va a detectar los controladores de la imagen atendiendo a las opciones que ha especificado. Esto puede llevar un tiempo." - Case 3 - msg = "Le programme va maintenant détecter les pilotes de l'image en fonction des options que vous avez spécifiées. Cela peut prendre un certain temps." - Case 4 - msg = "O programa irá agora detetar os controladores da imagem de acordo com as opções que especificou. Isto pode demorar algum tempo." - Case 5 - msg = "Il programma rileverà i driver dell'immagine in base alle opzioni specificate. Questa operazione potrebbe richiedere un po' di tempo" - End Select + msg = LocalizationService.ForSection("BgProcesses.Validation")("DetectDrivers.Message") MsgBox(msg, vbOKOnly + vbInformation, Text) MainForm.bwGetImageInfo = False MainForm.bwGetAdvImgInfo = False @@ -59,111 +35,15 @@ Public Class BGProcsAdvSettings End Sub Private Sub BGProcsAdvSettings_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Advanced background process settings" - Label1.Text = "Configure additional settings for background processes:" - CheckBox1.Text = "Enhance detection of all installed AppX packages of an active installation with PowerShell helpers" - CheckBox2.Text = "Skip packages with non-removable policies set" - CheckBox3.Text = "Detect all image drivers" - CheckBox4.Text = "Skip framework packages, and remove them from the listings if they were detected" - CheckBox5.Text = "Run all background processes after performing a task" - OK_Button.Text = "OK" - Cancel_Button.Text = "Cancel" - Case "ESN" - Text = "Configuraciones avanzadas de procesos en segundo plano" - Label1.Text = "Configure opciones adicionales para los procesos en segundo plano:" - CheckBox1.Text = "Mejorar la detección de todos los paquetes AppX instalados en una instalación activa con ayudantes de PowerShell" - CheckBox2.Text = "Omitir paquetes no removibles" - CheckBox3.Text = "Detectar todos los controladores de la imagen" - CheckBox4.Text = "Omitir paquetes de marcos de trabajo, y eliminarlos de los listados si fueron detectados" - CheckBox5.Text = "Ejecutar todos los procesos en segundo plano tras realizar una operación" - OK_Button.Text = "Aceptar" - Cancel_Button.Text = "Cancelar" - Case "FRA" - Text = "Paramètres avancés des processus en arrière plan" - Label1.Text = "Configurer des paramètres supplémentaires pour les processus en arrière plan :" - CheckBox1.Text = "Améliorer la détection de tous les paquets AppX installés dans une installation active grâce aux aides PowerShell" - CheckBox2.Text = "Sauter les paquets dont les politiques ne sont pas supprimées" - CheckBox3.Text = "Détecter tous les pilotes de l'image" - CheckBox4.Text = "Ignorer les paquets cadres et les supprimer de la liste s'ils ont été détectés." - CheckBox5.Text = "Exécuter tous les processus en arrière plan après l'exécution d'une tâche" - OK_Button.Text = "OK" - Cancel_Button.Text = "Annuler" - Case "PTB", "PTG" - Text = "Configurações avançadas de processos em segundo plano" - Label1.Text = "Configurar definições adicionais para processos em segundo plano:" - CheckBox1.Text = "Melhorar a deteção de todos os pacotes AppX instalados de uma instalação ativa com ajudantes do PowerShell" - CheckBox2.Text = "Ignorar pacotes com políticas não removíveis definidas" - CheckBox3.Text = "Detetar todos os controladores de imagem" - CheckBox4.Text = "Ignorar pacotes de estrutura e removê-los das listagens se tiverem sido detectados" - CheckBox5.Text = "Executar todos os processos em segundo plano depois de executar uma tarefa" - OK_Button.Text = "OK" - Cancel_Button.Text = "Cancelar" - Case "ITA" - Text = "Impostazioni avanzate processi in background" - Label1.Text = "Configura impostazioni aggiuntive per i processi in background:" - CheckBox1.Text = "Migliora il rilevamento di tutti i pacchetti AppX di un'installazione attiva con gli helper di PowerShell" - CheckBox2.Text = "Salta i pacchetti con impostati criteri non rimovibili" - CheckBox3.Text = "Rileva tutti i driver dell'immagine" - CheckBox4.Text = "Salta i pacchetti framework e rimuovili dagli elenchi se sono stati rilevati" - CheckBox5.Text = "Esegui tutti i processi in background dopo aver eseguito un'attività" - OK_Button.Text = "OK" - Cancel_Button.Text = "Annulla" - End Select - Case 1 - Text = "Advanced background process settings" - Label1.Text = "Configure additional settings for background processes:" - CheckBox1.Text = "Enhance detection of all installed AppX packages of an active installation with PowerShell helpers" - CheckBox2.Text = "Skip packages with non-removable policies set" - CheckBox3.Text = "Detect all image drivers" - CheckBox4.Text = "Skip framework packages, and remove them from the listings if they were detected" - CheckBox5.Text = "Run all background processes after performing a task" - OK_Button.Text = "OK" - Cancel_Button.Text = "Cancel" - Case 2 - Text = "Configuraciones avanzadas de procesos en segundo plano" - Label1.Text = "Configure opciones adicionales para los procesos en segundo plano:" - CheckBox1.Text = "Mejorar la detección de todos los paquetes AppX instalados en una instalación activa con ayudantes de PowerShell" - CheckBox2.Text = "Omitir paquetes no removibles" - CheckBox3.Text = "Detectar todos los controladores de la imagen" - CheckBox4.Text = "Omitir paquetes de marcos de trabajo, y eliminarlos de los listados si fueron detectados" - CheckBox5.Text = "Ejecutar todos los procesos en segundo plano tras realizar una operación" - OK_Button.Text = "Aceptar" - Cancel_Button.Text = "Cancelar" - Case 3 - Text = "Paramètres avancés des processus en arrière plan" - Label1.Text = "Configurer des paramètres supplémentaires pour les processus en arrière plan :" - CheckBox1.Text = "Améliorer la détection de tous les paquets AppX installés dans une installation active grâce aux aides PowerShell" - CheckBox2.Text = "Sauter les paquets dont les politiques ne sont pas supprimées" - CheckBox3.Text = "Détecter tous les pilotes de l'image" - CheckBox4.Text = "Ignorer les paquets cadres et les supprimer de la liste s'ils ont été détectés." - CheckBox5.Text = "Exécuter tous les processus en arrière plan après l'exécution d'une tâche" - OK_Button.Text = "OK" - Cancel_Button.Text = "Annuler" - Case 4 - Text = "Configurações avançadas de processos em segundo plano" - Label1.Text = "Configurar definições adicionais para processos em segundo plano:" - CheckBox1.Text = "Melhorar a deteção de todos os pacotes AppX instalados de uma instalação ativa com ajudantes do PowerShell" - CheckBox2.Text = "Ignorar pacotes com políticas não removíveis definidas" - CheckBox3.Text = "Detetar todos os controladores de imagem" - CheckBox4.Text = "Ignorar pacotes de estrutura e removê-los das listagens se tiverem sido detectados" - CheckBox5.Text = "Executar todos os processos em segundo plano depois de executar uma tarefa" - OK_Button.Text = "OK" - Cancel_Button.Text = "Cancelar" - Case 5 - Text = "Impostazioni avanzate processi in background" - Label1.Text = "Configura impostazioni aggiuntive per i processi in background:" - CheckBox1.Text = "Migliora il rilevamento di tutti i pacchetti AppX di un'installazione attiva con gli helper di PowerShell" - CheckBox2.Text = "Salta i pacchetti con criteri non rimovibili impostati" - CheckBox3.Text = "Rileva tutti i driver dell'immagine" - CheckBox4.Text = "Salta i pacchetti framework e rimuovili dagli elenchi se sono stati rilevati" - CheckBox5.Text = "Esegui tutti i processi in background dopo aver eseguito un'attività" - OK_Button.Text = "OK" - Cancel_Button.Text = "Annulla" - End Select + Text = LocalizationService.ForSection("BgProcs.Settings")("Advanced.Process.Label") + Label1.Text = LocalizationService.ForSection("BgProcs.Settings")("Additional.Label") + CheckBox1.Text = LocalizationService.ForSection("BgProcesses")("Enhance.App.Detect.Message") + CheckBox2.Text = LocalizationService.ForSection("BgProcesses")("SkipNonRemovable.CheckBox") + CheckBox3.Text = LocalizationService.ForSection("BgProcesses")("DetectAllDrivers.CheckBox") + CheckBox4.Text = LocalizationService.ForSection("BgProcesses")("Skip.Framework.CheckBox") + CheckBox5.Text = LocalizationService.ForSection("BgProcesses")("Run.CheckBox") + OK_Button.Text = LocalizationService.ForSection("BgProcesses")("Ok.Button") + Cancel_Button.Text = LocalizationService.ForSection("BgProcesses")("Cancel.Button") BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor CheckBox1.Checked = MainForm.ExtAppxGetter diff --git a/Panels/Exe_Ops/DismComponents.vb b/Panels/Exe_Ops/DismComponents.vb index f59aaeb5c..bfb3ee4d6 100644 --- a/Panels/Exe_Ops/DismComponents.vb +++ b/Panels/Exe_Ops/DismComponents.vb @@ -12,61 +12,10 @@ Public Class DismComponents End Sub Private Sub DismComponents_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "DISM Components" - ListView1.Columns(0).Text = "Component" - ListView1.Columns(1).Text = "Version" - OK_Button.Text = "OK" - Case "ESN" - Text = "Componentes de DISM" - ListView1.Columns(0).Text = "Componente" - ListView1.Columns(1).Text = "Versión" - OK_Button.Text = "Aceptar" - Case "FRA" - Text = "Composants du DISM" - ListView1.Columns(0).Text = "Composant" - ListView1.Columns(1).Text = "Version" - OK_Button.Text = "OK" - Case "PTB", "PTG" - Text = "Componentes DISM" - ListView1.Columns(0).Text = " Componente" - ListView1.Columns(1).Text = "Versão" - OK_Button.Text = "OK" - Case "ITA" - Text = "Componenti DISM" - ListView1.Columns(0).Text = "Componente" - ListView1.Columns(1).Text = "Versione" - OK_Button.Text = "OK" - End Select - Case 1 - Text = "DISM Components" - ListView1.Columns(0).Text = "Component" - ListView1.Columns(1).Text = "Version" - OK_Button.Text = "OK" - Case 2 - Text = "Componentes de DISM" - ListView1.Columns(0).Text = "Componente" - ListView1.Columns(1).Text = "Versión" - OK_Button.Text = "Aceptar" - Case 3 - Text = "Composants du DISM" - ListView1.Columns(0).Text = "Composant" - ListView1.Columns(1).Text = "Version" - OK_Button.Text = "OK" - Case 4 - Text = "Componentes DISM" - ListView1.Columns(0).Text = " Componente" - ListView1.Columns(1).Text = "Versão" - OK_Button.Text = "OK" - Case 5 - Text = "Componenti DISM" - ListView1.Columns(0).Text = "Componente" - ListView1.Columns(1).Text = "Versione" - OK_Button.Text = "OK" - End Select + Text = LocalizationService.ForSection("DismComponents")("Title.Label") + ListView1.Columns(0).Text = LocalizationService.ForSection("DismComponents")("Component.Column") + ListView1.Columns(1).Text = LocalizationService.ForSection("DismComponents")("Version.Column") + OK_Button.Text = LocalizationService.ForSection("DismComponents")("Ok.Button") BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor ListView1.BackColor = CurrentTheme.SectionBackgroundColor diff --git a/Panels/Exe_Ops/InvalidSettings/InvalidSettingsDialog.vb b/Panels/Exe_Ops/InvalidSettings/InvalidSettingsDialog.vb index cb2bb9b96..e61103b24 100644 --- a/Panels/Exe_Ops/InvalidSettings/InvalidSettingsDialog.vb +++ b/Panels/Exe_Ops/InvalidSettings/InvalidSettingsDialog.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports Microsoft.VisualBasic.ControlChars Public Class InvalidSettingsDialog @@ -9,274 +9,31 @@ Public Class InvalidSettingsDialog End Sub Private Sub InvalidSettingsDialog_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Invalid settings have been detected" - Label1.Text = "The program has detected invalid settings" - Label2.Text = "The invalid settings have been reset to default values. Check the fields below for more information:" - Button1.Text = "OK" - Case "ESN" - Text = "Se han detectado configuraciones inválidas" - Label1.Text = "El programa ha detectado configuraciones inválidas" - Label2.Text = "Las configuraciones inválidas han sido restablecidas a sus valores predeterminados. Compruebe los campos de abajo para más información:" - Button1.Text = "Aceptar" - Case "FRA" - Text = "Des paramètres non valides ont été détectés" - Label1.Text = "Le programme a détecté des paramètres non valides" - Label2.Text = "Les paramètres non valides ont été réinitialisés aux valeurs par défaut. Vérifiez les champs ci-dessous pour plus d'informations :" - Button1.Text = "OK" - Case "PTB", "PTG" - Text = "Foram detectadas definições inválidas" - Label1.Text = "O programa detectou definições inválidas" - Label2.Text = "As definições inválidas foram repostas para os valores predefinidos. Verifique os campos abaixo para obter mais informações:" - Button1.Text = "OK" - Case "ITA" - Text = "Sono state rilevate impostazioni non valide" - Label1.Text = "Il programma ha rilevato impostazioni non valide" - Label2.Text = "Le impostazioni non valide sono state ripristinate ai valori predefiniti. Per ulteriori informazioni: controlla i campi sottostanti:" - Button1.Text = "OK" - End Select - Case 1 - Text = "Invalid settings have been detected" - Label1.Text = "The program has detected invalid settings" - Label2.Text = "The invalid settings have been reset to default values. Check the fields below for more information:" - Button1.Text = "OK" - Case 2 - Text = "Se han detectado configuraciones inválidas" - Label1.Text = "El programa ha detectado configuraciones inválidas" - Label2.Text = "Las configuraciones inválidas han sido restablecidas a sus valores predeterminados. Compruebe los campos de abajo para más información:" - Button1.Text = "Aceptar" - Case 3 - Text = "Des paramètres non valides ont été détectés" - Label1.Text = "Le programme a détecté des paramètres non valides" - Label2.Text = "Les paramètres non valides ont été réinitialisés aux valeurs par défaut. Vérifiez les champs ci-dessous pour plus d'informations :" - Button1.Text = "OK" - Case 4 - Text = "Foram detectadas definições inválidas" - Label1.Text = "O programa detectou definições inválidas" - Label2.Text = "As definições inválidas foram repostas para os valores predefinidos. Verifique os campos abaixo para obter mais informações:" - Button1.Text = "OK" - Case 5 - Text = "Sono state rilevate impostazioni non valide" - Label1.Text = "Il programma ha rilevato impostazioni non valide" - Label2.Text = "Le impostazioni non valide sono state ripristinate ai valori predefiniti. Per ulteriori informazioni controllare i campi sottostanti:" - Button1.Text = "OK" - End Select + Text = LocalizationService.ForSection("Settings.Dialog")("Detected.Label") + Label1.Text = LocalizationService.ForSection("InvalidSettings")("Found.Label") + Label2.Text = LocalizationService.ForSection("Settings.Dialog")("Reset.Default.Message") + Button1.Text = LocalizationService.ForSection("Settings.Dialog")("Ok.Button") BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor If MainForm.isExeProblematic Then - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label3.Text = "The specified DISM executable does not exist: " & CrLf & Quote & MainForm.ProblematicStrings(0) & Quote - Case "ESN" - Label3.Text = "El ejecutable de DISM especificado no existe: " & CrLf & Quote & MainForm.ProblematicStrings(0) & Quote - Case "FRA" - Label3.Text = "L'exécutable DISM spécifié n'existe pas : " & CrLf & Quote & MainForm.ProblematicStrings(0) & Quote - Case "PTB", "PTG" - Label3.Text = "O executável DISM especificado não existe: " & CrLf & Quote & MainForm.ProblematicStrings(0) & Quote - Case "ITA" - Label3.Text = "L'eseguibile DISM specificato non esiste: " & CrLf & Quote & MainForm.ProblematicStrings(0) & Quote - End Select - Case 1 - Label3.Text = "The specified DISM executable does not exist: " & CrLf & Quote & MainForm.ProblematicStrings(0) & Quote - Case 2 - Label3.Text = "El ejecutable de DISM especificado no existe: " & CrLf & Quote & MainForm.ProblematicStrings(0) & Quote - Case 3 - Label3.Text = "L'exécutable DISM spécifié n'existe pas : " & CrLf & Quote & MainForm.ProblematicStrings(0) & Quote - Case 4 - Label3.Text = "O executável DISM especificado não existe: " & CrLf & Quote & MainForm.ProblematicStrings(0) & Quote - Case 5 - Label3.Text = "L'eseguibile DISM specificato non esiste: " & CrLf & Quote & MainForm.ProblematicStrings(0) & Quote - End Select + Label3.Text = LocalizationService.ForSection("Settings.Dialog").Format("Dismexecutable.Exist.Item", MainForm.ProblematicStrings(0)) Else - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label3.Text = "The DISM executable setting seems to be in order" - Case "ESN" - Label3.Text = "La configuración del ejecutable de DISM parece estar bien" - Case "FRA" - Label3.Text = "Le paramétrage de l'exécutable DISM semble être en ordre" - Case "PTB", "PTG" - Label3.Text = "A configuração do executável DISM parece estar em ordem" - Case "ITA" - Label3.Text = "L'impostazione dell'eseguibile DISM sembra essere corretta" - End Select - Case 1 - Label3.Text = "The DISM executable setting seems to be in order" - Case 2 - Label3.Text = "La configuración del ejecutable de DISM parece estar bien" - Case 3 - Label3.Text = "Le paramétrage de l'exécutable DISM semble être en ordre" - Case 4 - Label3.Text = "A configuração do executável DISM parece estar em ordem" - Case 5 - Label3.Text = "L'impostazione dell'eseguibile DISM sembra essere corretta" - End Select + Label3.Text = LocalizationService.ForSection("Settings.Dialog")("DISM.Executable.Label") End If If MainForm.isLogFontProblematic Then - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label4.Text = "The specified log font does not exist in this system: " & CrLf & Quote & MainForm.ProblematicStrings(1) & Quote - Case "ESN" - Label4.Text = "La fuente del registro especificada no existe en este sistema: " & CrLf & Quote & MainForm.ProblematicStrings(1) & Quote - Case "FRA" - Label4.Text = "La fonte spécifiée n'existe pas dans ce système : " & CrLf & Quote & MainForm.ProblematicStrings(1) & Quote - Case "PTB", "PTG" - Label4.Text = "A fonte de registo especificada não existe neste sistema: " & CrLf & Quote & MainForm.ProblematicStrings(1) & Quote - Case "ITA" - Label4.Text = "Il font specificato del registro non esiste in questo sistema: " & CrLf & Quote & MainForm.ProblematicStrings(1) & Quote - End Select - Case 1 - Label4.Text = "The specified log font does not exist in this system: " & CrLf & Quote & MainForm.ProblematicStrings(1) & Quote - Case 2 - Label4.Text = "La fuente del registro especificada no existe en este sistema: " & CrLf & Quote & MainForm.ProblematicStrings(1) & Quote - Case 3 - Label4.Text = "La fonte spécifiée n'existe pas dans ce système : " & CrLf & Quote & MainForm.ProblematicStrings(1) & Quote - Case 4 - Label4.Text = "A fonte de registo especificada não existe neste sistema: " & CrLf & Quote & MainForm.ProblematicStrings(1) & Quote - Case 5 - Label4.Text = "Il font specificato del registro non esiste in questo sistema: " & CrLf & Quote & MainForm.ProblematicStrings(1) & Quote - End Select + Label4.Text = LocalizationService.ForSection("Settings.Dialog").Format("Log.Font.Exist.Item", MainForm.ProblematicStrings(1)) Else - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label4.Text = "The log font setting seems to be in order" - Case "ESN" - Label4.Text = "La configuración de la fuente de registro parece estar bien" - Case "FRA" - Label4.Text = "Le paramètre de la fonte du journal semble être dans l'ordre" - Case "PTB", "PTG" - Label4.Text = "A configuração da fonte de registo parece estar em ordem" - Case "ITA" - Label4.Text = "L'impostazione dei font del registro sembra essere corretta" - End Select - Case 1 - Label4.Text = "The log font setting seems to be in order" - Case 2 - Label4.Text = "La configuración de la fuente de registro parece estar bien" - Case 3 - Label4.Text = "Le paramètre de la fonte du journal semble être dans l'ordre" - Case 4 - Label4.Text = "A configuração da fonte de registo parece estar em ordem" - Case 5 - Label4.Text = "L'impostazione dei font del registro sembra essere corretta" - End Select + Label4.Text = LocalizationService.ForSection("Settings.Dialog")("Log.Font.Setting.Label") End If If MainForm.isLogFileProblematic Then - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label5.Text = "The specified log file does not exist: " & CrLf & Quote & MainForm.ProblematicStrings(2) & Quote - Case "ESN" - Label5.Text = "El archivo de registro especificado no existe: " & CrLf & Quote & MainForm.ProblematicStrings(2) & Quote - Case "FRA" - Label5.Text = "Le fichier journal spécifié n'existe pas : " & CrLf & Quote & MainForm.ProblematicStrings(2) & Quote - Case "PTB", "PTG" - Label5.Text = "O ficheiro de registo especificado não existe: " & CrLf & Quote & MainForm.ProblematicStrings(2) & Quote - Case "ITA" - Label5.Text = "Il file registro specificato non esiste: " & CrLf & Quote & MainForm.ProblematicStrings(2) & Quote - End Select - Case 1 - Label5.Text = "The specified log file does not exist: " & CrLf & Quote & MainForm.ProblematicStrings(2) & Quote - Case 2 - Label5.Text = "El archivo de registro especificado no existe: " & CrLf & Quote & MainForm.ProblematicStrings(2) & Quote - Case 3 - Label5.Text = "Le fichier journal spécifié n'existe pas : " & CrLf & Quote & MainForm.ProblematicStrings(2) & Quote - Case 4 - Label5.Text = "O ficheiro de registo especificado não existe: " & CrLf & Quote & MainForm.ProblematicStrings(2) & Quote - Case 5 - Label5.Text = "Il file registro specificato non esiste: " & CrLf & Quote & MainForm.ProblematicStrings(2) & Quote - End Select + Label5.Text = LocalizationService.ForSection("Settings.Dialog").Format("Log.File.Exist.Item", MainForm.ProblematicStrings(2)) Else - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label5.Text = "The log file setting seems to be in order" - Case "ESN" - Label5.Text = "La configuración del archivo de registro parece estar bien" - Case "FRA" - Label5.Text = "Le paramètre du fichier journal semble être dans l'ordre" - Case "PTB", "PTG" - Label5.Text = "A configuração do ficheiro de registo parece estar em ordem" - Case "ITA" - Label5.Text = "L'impostazione del file registro sembra essere corretta" - End Select - Case 1 - Label5.Text = "The log file setting seems to be in order" - Case 2 - Label5.Text = "La configuración del archivo de registro parece estar bien" - Case 3 - Label5.Text = "Le paramètre du fichier journal semble être dans l'ordre" - Case 4 - Label5.Text = "A configuração do ficheiro de registo parece estar em ordem" - Case 5 - Label5.Text = "L'impostazione del file registro sembra essere corretta" - End Select + Label5.Text = LocalizationService.ForSection("Settings.Dialog")("Log.File.Setting.Label") End If If MainForm.isScratchDirProblematic Then - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label6.Text = "The specified scratch directory does not exist: " & CrLf & Quote & MainForm.ProblematicStrings(3) & Quote - Case "ESN" - Label6.Text = "El directorio temporal especificado no existe: " & CrLf & Quote & MainForm.ProblematicStrings(3) & Quote - Case "FRA" - Label6.Text = "Le répertoire temporaire spécifié n'existe pas : " & CrLf & Quote & MainForm.ProblematicStrings(3) & Quote - Case "PTB", "PTG" - Label6.Text = "O diretório temporário especificado não existe: " & CrLf & Quote & MainForm.ProblematicStrings(3) & Quote - Case "ITA" - Label6.Text = "La cartelle temporanea specificata non esiste: " & CrLf & Quote & MainForm.ProblematicStrings(3) & Quote - End Select - Case 1 - Label6.Text = "The specified scratch directory does not exist: " & CrLf & Quote & MainForm.ProblematicStrings(3) & Quote - Case 2 - Label6.Text = "El directorio temporal especificado no existe: " & CrLf & Quote & MainForm.ProblematicStrings(3) & Quote - Case 3 - Label6.Text = "Le répertoire temporaire spécifié n'existe pas : " & CrLf & Quote & MainForm.ProblematicStrings(3) & Quote - Case 4 - Label6.Text = "O diretório temporário especificado não existe: " & CrLf & Quote & MainForm.ProblematicStrings(3) & Quote - Case 5 - Label6.Text = "La cartelle temporanea specificata non esiste: " & CrLf & Quote & MainForm.ProblematicStrings(3) & Quote - End Select + Label6.Text = LocalizationService.ForSection("Settings.Dialog").Format("Scratch.Dir.Exist.Item", MainForm.ProblematicStrings(3)) Else - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label6.Text = "The scratch directory setting seems to be in order" - Case "ESN" - Label6.Text = "La configuración del directorio temporal parece estar bien" - Case "FRA" - Label6.Text = "Le paramètre du répertoire temporaire semble être dans l'ordre" - Case "PTB", "PTG" - Label6.Text = "A configuração do diretório temporário parece estar em ordem" - Case "ITA" - Label6.Text = "L'impostazione della cartella temporanea sembra essere corretta" - End Select - Case 1 - Label6.Text = "The scratch directory setting seems to be in order" - Case 2 - Label6.Text = "La configuración del directorio temporal parece estar bien" - Case 3 - Label6.Text = "Le paramètre du répertoire temporaire semble être dans l'ordre" - Case 4 - Label6.Text = "A configuração do diretório temporário parece estar em ordem" - Case 5 - Label6.Text = "L'impostazione della cartella temporanea sembra essere corretta" - End Select + Label6.Text = LocalizationService.ForSection("Settings.Dialog")("Scratch.Dir.Set.Label") End If Dim handle As IntPtr = WindowHelper.GetWindowHandle(Me) WindowHelper.ToggleDarkTitleBar(handle, CurrentTheme.IsDark) diff --git a/Panels/Exe_Ops/Migration/MigrationForm.vb b/Panels/Exe_Ops/Migration/MigrationForm.vb index be4f6870d..293be8e70 100644 --- a/Panels/Exe_Ops/Migration/MigrationForm.vb +++ b/Panels/Exe_Ops/Migration/MigrationForm.vb @@ -1,4 +1,4 @@ -Imports Microsoft.Win32 +Imports Microsoft.Win32 Public Class MigrationForm Dim msg As String @@ -6,51 +6,18 @@ Public Class MigrationForm Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork DynaLog.LogMessage("Beginning migration...") DynaLog.LogMessage("Loading old settings file...") - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Loading old settings file..." - Case "ESN" - msg = "Cargando archivo antiguo de configuración..." - Case "FRA" - msg = "Chargement d'un ancien fichier de paramètres en cours..." - Case "PTB", "PTG" - msg = "Carregar ficheiro de configurações antigo..." - Case "ITA" - msg = "Caricamento vecchio file impostazioni..." - End Select + msg = LocalizationService.ForSection("Migration.Background")("Loading.Old.Settings.Message") BackgroundWorker1.ReportProgress(33.299999999999997) MainForm.LoadDTSettings(1) Threading.Thread.Sleep(72) DynaLog.LogMessage("Saving new settings...") MainForm.Width = WindowHelper.ScaleLogical(1280) MainForm.Height = WindowHelper.ScaleLogical(720) - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Saving new settings file..." - Case "ESN" - msg = "Guardando archivo nuevo de configuración..." - Case "FRA" - msg = "Sauvegarder le fichier des nouveaux paramètres en cours..." - Case "PTB", "PTG" - msg = "Guardar o novo ficheiro de configurações..." - Case "ITA" - msg = "Salvataggio nuovo file impostazioni..." - End Select + msg = LocalizationService.ForSection("Migration.Background")("Saving.New.Settings.Message") BackgroundWorker1.ReportProgress(66.599999999999994) MainForm.SaveDTSettings() Threading.Thread.Sleep(72) - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Done" - Case "ESN" - msg = "Terminado" - Case "FRA" - msg = "Terminé" - Case "PTB", "PTG" - msg = "Concluído" - Case "ITA" - msg = "Terminato" - End Select + msg = LocalizationService.ForSection("Migration.Background")("Done.Message") BackgroundWorker1.ReportProgress(100) Threading.Thread.Sleep(250) End Sub @@ -64,23 +31,8 @@ Public Class MigrationForm Private Sub MigrationForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label1.Text = "Please wait while DISMTools migrates your old settings file to work on this version. This may take some time." - Label2.Text = "Please wait..." - Case "ESN" - Label1.Text = "Espere mientras DISMTools migra su archivo antiguo de configuración para que sea compatible con esta versión. Esto puede llevar un tiempo." - Label2.Text = "Espere..." - Case "FRA" - Label1.Text = "Veuillez patienter pendant que DISMTools migre votre ancien fichier de paramètres pour qu'il fonctionne avec cette version. Cela peut prendre un certain temps." - Label2.Text = "Veuillez patienter..." - Case "PTB", "PTG" - Label1.Text = "Aguarde enquanto o DISMTools migra o seu ficheiro de configurações antigo para funcionar nesta versão. Isso pode levar algum tempo" - Label2.Text = "Aguarde..." - Case "ITA" - Label1.Text = "Attendi mentre DISMTools converte il vecchio file impostazioni per farlo funzionare con questa versione. L'operazione potrebbe richiedere del tempo." - Label2.Text = "Attendi..." - End Select + Label1.Text = LocalizationService.ForSection("Migration")("Wait.Message") + Label2.Text = LocalizationService.ForSection("Migration")("Wait.Label") Refresh() BackgroundWorker1.RunWorkerAsync() End Sub @@ -92,4 +44,4 @@ Public Class MigrationForm Private Sub MigrationForm_Paint(sender As Object, e As PaintEventArgs) Handles MyBase.Paint ControlPaint.DrawBorder(e.Graphics, ClientRectangle, Color.FromArgb(53, 153, 41), ButtonBorderStyle.Solid) End Sub -End Class \ No newline at end of file +End Class diff --git a/Panels/Exe_Ops/Options.Designer.vb b/Panels/Exe_Ops/Options.Designer.vb index 30f1c8dae..79e56621e 100644 --- a/Panels/Exe_Ops/Options.Designer.vb +++ b/Panels/Exe_Ops/Options.Designer.vb @@ -35,6 +35,7 @@ Partial Class Options Me.Label46 = New System.Windows.Forms.Label() Me.PictureBox8 = New System.Windows.Forms.PictureBox() Me.Panel2 = New System.Windows.Forms.Panel() + Me.CheckBox24 = New System.Windows.Forms.CheckBox() Me.CheckBox11 = New System.Windows.Forms.CheckBox() Me.DTSSEditAssocCB = New System.Windows.Forms.CheckBox() Me.Button9 = New System.Windows.Forms.Button() @@ -168,6 +169,7 @@ Partial Class Options Me.Label70 = New System.Windows.Forms.Label() Me.Label32 = New System.Windows.Forms.Label() Me.CheckBox23 = New System.Windows.Forms.CheckBox() + Me.CheckBox25 = New System.Windows.Forms.CheckBox() Me.CheckBox1 = New System.Windows.Forms.CheckBox() Me.CheckBox8 = New System.Windows.Forms.CheckBox() Me.Panel7 = New System.Windows.Forms.Panel() @@ -257,7 +259,11 @@ Partial Class Options Me.Panel12 = New System.Windows.Forms.Panel() Me.EditorOFD = New System.Windows.Forms.OpenFileDialog() Me.ImageTaskHeader1 = New DISMTools.ImageTaskHeader() - Me.CheckBox24 = New System.Windows.Forms.CheckBox() + Me.Label1 = New System.Windows.Forms.Label() + Me.Label6 = New System.Windows.Forms.Label() + Me.NumericUpDown2 = New System.Windows.Forms.NumericUpDown() + Me.Label35 = New System.Windows.Forms.Label() + Me.Button8 = New System.Windows.Forms.Button() Me.TableLayoutPanel1.SuspendLayout() Me.Panel3.SuspendLayout() CType(Me.PictureBox8, System.ComponentModel.ISupportInitialize).BeginInit() @@ -349,6 +355,7 @@ Partial Class Options Me.FlowLayoutPanel8.SuspendLayout() Me.Panel11.SuspendLayout() Me.Panel12.SuspendLayout() + CType(Me.NumericUpDown2, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'TableLayoutPanel1 @@ -469,6 +476,16 @@ Partial Class Options Me.Panel2.Size = New System.Drawing.Size(748, 256) Me.Panel2.TabIndex = 12 ' + 'CheckBox24 + ' + Me.CheckBox24.AutoSize = True + Me.CheckBox24.Location = New System.Drawing.Point(110, 160) + Me.CheckBox24.Name = "CheckBox24" + Me.CheckBox24.Size = New System.Drawing.Size(226, 19) + Me.CheckBox24.TabIndex = 2 + Me.CheckBox24.Text = "Set custom file icons for starter scripts" + Me.CheckBox24.UseVisualStyleBackColor = True + ' 'CheckBox11 ' Me.CheckBox11.AutoSize = True @@ -1712,8 +1729,8 @@ Partial Class Options ' 'ValueContainer ' - Me.ValueContainer.Controls.Add(Me.Options_FileAssocs) Me.ValueContainer.Controls.Add(Me.Options_ImgOps) + Me.ValueContainer.Controls.Add(Me.Options_FileAssocs) Me.ValueContainer.Controls.Add(Me.Options_Shutdown) Me.ValueContainer.Controls.Add(Me.Options_Startup) Me.ValueContainer.Controls.Add(Me.Options_Personalization) @@ -1753,10 +1770,15 @@ Partial Class Options ' 'Panel6 ' + Me.Panel6.Controls.Add(Me.Button8) + Me.Panel6.Controls.Add(Me.NumericUpDown2) + Me.Panel6.Controls.Add(Me.Label6) Me.Panel6.Controls.Add(Me.LinkLabel4) Me.Panel6.Controls.Add(Me.TableLayoutPanel3) Me.Panel6.Controls.Add(Me.ComboBox8) Me.Panel6.Controls.Add(Me.Label71) + Me.Panel6.Controls.Add(Me.Label35) + Me.Panel6.Controls.Add(Me.Label1) Me.Panel6.Controls.Add(Me.Label70) Me.Panel6.Controls.Add(Me.CheckBox2) Me.Panel6.Controls.Add(Me.Label32) @@ -1764,12 +1786,13 @@ Partial Class Options Me.Panel6.Controls.Add(Me.CheckBox23) Me.Panel6.Controls.Add(Me.CheckBox3) Me.Panel6.Controls.Add(Me.Label18) + Me.Panel6.Controls.Add(Me.CheckBox25) Me.Panel6.Controls.Add(Me.CheckBox1) Me.Panel6.Controls.Add(Me.CheckBox8) Me.Panel6.Location = New System.Drawing.Point(0, 0) Me.Panel6.Margin = New System.Windows.Forms.Padding(0) Me.Panel6.Name = "Panel6" - Me.Panel6.Size = New System.Drawing.Size(728, 464) + Me.Panel6.Size = New System.Drawing.Size(728, 640) Me.Panel6.TabIndex = 0 ' 'LinkLabel4 @@ -1777,7 +1800,7 @@ Partial Class Options Me.LinkLabel4.AutoSize = True Me.LinkLabel4.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline Me.LinkLabel4.LinkColor = System.Drawing.Color.DodgerBlue - Me.LinkLabel4.Location = New System.Drawing.Point(18, 438) + Me.LinkLabel4.Location = New System.Drawing.Point(18, 606) Me.LinkLabel4.Name = "LinkLabel4" Me.LinkLabel4.Size = New System.Drawing.Size(397, 15) Me.LinkLabel4.TabIndex = 12 @@ -1793,7 +1816,7 @@ Partial Class Options Me.TableLayoutPanel3.Controls.Add(Me.Label73, 1, 0) Me.TableLayoutPanel3.Controls.Add(Me.Label74, 0, 1) Me.TableLayoutPanel3.Controls.Add(Me.Label75, 1, 1) - Me.TableLayoutPanel3.Location = New System.Drawing.Point(48, 386) + Me.TableLayoutPanel3.Location = New System.Drawing.Point(48, 554) Me.TableLayoutPanel3.Name = "TableLayoutPanel3" Me.TableLayoutPanel3.RowCount = 2 Me.TableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) @@ -1848,7 +1871,7 @@ Partial Class Options ' Me.ComboBox8.FormattingEnabled = True Me.ComboBox8.Items.AddRange(New Object() {"Display name only", "Display name, then friendly display name", "Friendly display name only"}) - Me.ComboBox8.Location = New System.Drawing.Point(20, 330) + Me.ComboBox8.Location = New System.Drawing.Point(20, 498) Me.ComboBox8.Name = "ComboBox8" Me.ComboBox8.Size = New System.Drawing.Size(686, 23) Me.ComboBox8.TabIndex = 10 @@ -1856,7 +1879,7 @@ Partial Class Options 'Label71 ' Me.Label71.AutoSize = True - Me.Label71.Location = New System.Drawing.Point(17, 362) + Me.Label71.Location = New System.Drawing.Point(17, 530) Me.Label71.Name = "Label71" Me.Label71.Size = New System.Drawing.Size(54, 15) Me.Label71.TabIndex = 9 @@ -1865,7 +1888,7 @@ Partial Class Options 'Label70 ' Me.Label70.AutoSize = True - Me.Label70.Location = New System.Drawing.Point(18, 308) + Me.Label70.Location = New System.Drawing.Point(18, 476) Me.Label70.Name = "Label70" Me.Label70.Size = New System.Drawing.Size(384, 15) Me.Label70.TabIndex = 9 @@ -1890,6 +1913,16 @@ Partial Class Options Me.CheckBox23.Text = "Map system accounts to application registration information" Me.CheckBox23.UseVisualStyleBackColor = True ' + 'CheckBox25 + ' + Me.CheckBox25.AutoSize = True + Me.CheckBox25.Location = New System.Drawing.Point(21, 308) + Me.CheckBox25.Name = "CheckBox25" + Me.CheckBox25.Size = New System.Drawing.Size(445, 19) + Me.CheckBox25.TabIndex = 13 + Me.CheckBox25.Text = "Lock unlocked BitLocker volumes when exiting offline installation management" + Me.CheckBox25.UseVisualStyleBackColor = True + ' 'CheckBox1 ' Me.CheckBox1.AutoSize = True @@ -1916,7 +1949,7 @@ Partial Class Options Me.Panel7.Controls.Add(Me.CheckBox14) Me.Panel7.Controls.Add(Me.Label48) Me.Panel7.Controls.Add(Me.TableLayoutPanel2) - Me.Panel7.Location = New System.Drawing.Point(0, 464) + Me.Panel7.Location = New System.Drawing.Point(0, 640) Me.Panel7.Margin = New System.Windows.Forms.Padding(0) Me.Panel7.Name = "Panel7" Me.Panel7.Size = New System.Drawing.Size(728, 172) @@ -1941,7 +1974,7 @@ Partial Class Options Me.Panel21.Controls.Add(Me.Label69) Me.Panel21.Controls.Add(Me.Label67) Me.Panel21.Controls.Add(Me.Label68) - Me.Panel21.Location = New System.Drawing.Point(0, 636) + Me.Panel21.Location = New System.Drawing.Point(0, 812) Me.Panel21.Margin = New System.Windows.Forms.Padding(0) Me.Panel21.Name = "Panel21" Me.Panel21.Size = New System.Drawing.Size(728, 256) @@ -2889,15 +2922,53 @@ Partial Class Options Me.ImageTaskHeader1.Size = New System.Drawing.Size(1008, 48) Me.ImageTaskHeader1.TabIndex = 6 ' - 'CheckBox24 - ' - Me.CheckBox24.AutoSize = True - Me.CheckBox24.Location = New System.Drawing.Point(110, 160) - Me.CheckBox24.Name = "CheckBox24" - Me.CheckBox24.Size = New System.Drawing.Size(226, 19) - Me.CheckBox24.TabIndex = 2 - Me.CheckBox24.Text = "Set custom file icons for starter scripts" - Me.CheckBox24.UseVisualStyleBackColor = True + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(18, 341) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(444, 15) + Me.Label1.TabIndex = 9 + Me.Label1.Text = "When creating ISO files, allow me to create the following amount at the same time" & _ + ":" + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Location = New System.Drawing.Point(151, 373) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(185, 15) + Me.Label6.TabIndex = 14 + Me.Label6.Text = "Concurrent ISO file creation tasks:" + ' + 'NumericUpDown2 + ' + Me.NumericUpDown2.Location = New System.Drawing.Point(342, 371) + Me.NumericUpDown2.Maximum = New Decimal(New Integer() {10, 0, 0, 0}) + Me.NumericUpDown2.Minimum = New Decimal(New Integer() {1, 0, 0, 0}) + Me.NumericUpDown2.Name = "NumericUpDown2" + Me.NumericUpDown2.Size = New System.Drawing.Size(72, 23) + Me.NumericUpDown2.TabIndex = 15 + Me.NumericUpDown2.Value = New Decimal(New Integer() {1, 0, 0, 0}) + ' + 'Label35 + ' + Me.Label35.AutoEllipsis = True + Me.Label35.Location = New System.Drawing.Point(38, 401) + Me.Label35.Name = "Label35" + Me.Label35.Size = New System.Drawing.Size(666, 64) + Me.Label35.TabIndex = 9 + Me.Label35.Text = resources.GetString("Label35.Text") + ' + 'Button8 + ' + Me.Button8.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Button8.Location = New System.Drawing.Point(420, 371) + Me.Button8.Name = "Button8" + Me.Button8.Size = New System.Drawing.Size(158, 23) + Me.Button8.TabIndex = 16 + Me.Button8.Text = "Determine..." + Me.Button8.UseVisualStyleBackColor = True ' 'Options ' @@ -3043,6 +3114,7 @@ Partial Class Options Me.Panel11.ResumeLayout(False) Me.Panel11.PerformLayout() Me.Panel12.ResumeLayout(False) + CType(Me.NumericUpDown2, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) End Sub @@ -3281,5 +3353,11 @@ Partial Class Options Friend WithEvents DTProjAssocCB As System.Windows.Forms.CheckBox Friend WithEvents CheckBox1 As System.Windows.Forms.CheckBox Friend WithEvents CheckBox24 As System.Windows.Forms.CheckBox + Friend WithEvents CheckBox25 As System.Windows.Forms.CheckBox + Friend WithEvents NumericUpDown2 As System.Windows.Forms.NumericUpDown + Friend WithEvents Label6 As System.Windows.Forms.Label + Friend WithEvents Label35 As System.Windows.Forms.Label + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents Button8 As System.Windows.Forms.Button End Class diff --git a/Panels/Exe_Ops/Options.resx b/Panels/Exe_Ops/Options.resx index 89c4dfa9f..e2ab2583d 100644 --- a/Panels/Exe_Ops/Options.resx +++ b/Panels/Exe_Ops/Options.resx @@ -167,6 +167,11 @@ Package 1 of 128 233, 17 + + Note that, the more ISO files you create at the same time, the more CPU-intensive the task will get. Consider your machine's specifications before setting the slider. You must close and reopen the ISO creation task for your changes to be carried over. + +For the majority of systems, a value of 2 is fine. For more performant systems, you may increase this value. + This is only available when managing active installations. When getting information about AppX packages, DISMTools can map the IDs and names of the local accounts in this system to tell you which users an application is registered to more precisely. diff --git a/Panels/Exe_Ops/Options.vb b/Panels/Exe_Ops/Options.vb index bfbf963a2..addcbdf25 100644 --- a/Panels/Exe_Ops/Options.vb +++ b/Panels/Exe_Ops/Options.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports System.IO Imports Microsoft.VisualBasic.ControlChars Imports System.Globalization @@ -8,17 +8,279 @@ Public Class Options Dim DismVersion As FileVersionInfo Dim CanExit As Boolean - Dim SaveLocations() As String = New String(1) {"Settings file", "Registry"} - Dim ColorModes() As String = New String(2) {"Use system setting", "Light mode", "Dark mode"} - Dim Languages() As String = New String(5) {"Use system language", "English", "Spanish", "French", "Portuguese", "Italian"} - Dim LogViews() As String = New String(1) {"list", "table"} - Dim NotFreqs() As String = New String(1) {"Every time a project has been loaded successfully", "Once"} + Dim SaveLocations() As String = New String(1) {"", ""} + Dim ColorModes() As String = New String(2) {"", "", ""} + Dim LogViews() As String = New String(1) {"", ""} + Dim NotFreqs() As String = New String(1) {"", ""} Public SectionNum As Integer = 0 + Private isInitializingForm As Boolean = True + Private isApplyingLocalizedText As Boolean = False + Private originalLanguage As String = LocalizationService.DefaultCultureCode + + Public Sub New() + isInitializingForm = True + InitializeComponent() + isInitializingForm = False + End Sub + Private AutoReloadServiceInstalled As Boolean Private AutoReloadService As WindowsService + Private Class ProcessorFamilyCategory + + Public Property Beefiness As ProcessorFamilyBeefiness + Public Property Family As Integer + + Public Sub New(family As Integer, beefiness As ProcessorFamilyBeefiness) + Me.Family = family + Me.Beefiness = beefiness + End Sub + + End Class + + Private Enum ProcessorFamilyBeefiness As Integer + Potato = 0 + Average = 1 + Beefy = 2 + End Enum + + ' Processor families that we know the performance of. Family numbers derive from + ' version 3.9 of the SMBIOS specification, from 2025: + ' https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.9.0.pdf + Private Const CPU_INTEL_PENTIUM_3 As Integer = 17, + CPU_INTEL_CELERON_M As Integer = 20, + CPU_INTEL_PENTIUM_4_HT As Integer = 21, + CPU_INTEL As Integer = 22, + CPU_INTEL_CORE_DUO As Integer = 40, + CPU_INTEL_CORE_DUO_M As Integer = 41, + CPU_INTEL_CORE_SOLO As Integer = 42, + CPU_INTEL_ATOM As Integer = 43, + CPU_INTEL_CORE_M As Integer = 44, + CPU_INTEL_CORE_M3 As Integer = 45, + CPU_INTEL_CORE_M5 As Integer = 46, + CPU_INTEL_CORE_M7 As Integer = 47, + CPU_AMD_TURION_2_ULTRA_DUALCORE_MOBILE_M As Integer = 56, + CPU_AMD_TURION_2_DUALCORE_MOBILE_M As Integer = 57, + CPU_AMD_ATHLON_2_DUALCORE_M As Integer = 58, + CPU_AMD_OPTERON_6100 As Integer = 59, + CPU_AMD_OPTERON_4100 As Integer = 60, + CPU_AMD_OPTERON_6200 As Integer = 61, + CPU_AMD_OPTERON_4200 As Integer = 62, + CPU_AMD_FX As Integer = 63, + CPU_AMD_C As Integer = 70, + CPU_AMD_E As Integer = 71, + CPU_AMD_A As Integer = 72, + CPU_AMD_G As Integer = 73, + CPU_AMD_Z As Integer = 74, + CPU_AMD_R As Integer = 75, + CPU_AMD_OPTERON_4300 As Integer = 76, + CPU_AMD_OPTERON_6300 As Integer = 77, + CPU_AMD_OPTERON_3300 As Integer = 78, + CPU_AMD_FIREPRO As Integer = 79, + CPU_AMD_ATHLON_X4_QUADCORE As Integer = 102, + CPU_AMD_OPTERON_X1000 As Integer = 103, + CPU_AMD_OPTERON_X2000_APU As Integer = 104, + CPU_AMD_OPTERON_A As Integer = 105, + CPU_AMD_OPTERON_X3000_APU As Integer = 106, + CPU_AMD_ZEN As Integer = 107, + CPU_AMD_ATHLON_64 As Integer = 131, + CPU_AMD_OPTERON As Integer = 132, + CPU_AMD_SEMPRON As Integer = 133, + CPU_AMD_TURION_64_MOBILE As Integer = 134, + CPU_AMD_OPTERON_DUALCORE As Integer = 135, + CPU_AMD_ATHLON_64_X2_DUALCORE As Integer = 136, + CPU_AMD_TURION_64_X2_MOBILE As Integer = 137, + CPU_AMD_OPTERON_QUADCORE As Integer = 138, + CPU_AMD_OPTERON_MK3 As Integer = 139, + CPU_AMD_PHENOM_FX_QUADCORE As Integer = 140, + CPU_AMD_PHENOM_X4_QUADCORE As Integer = 141, + CPU_AMD_PHENOM_X2_DUALCORE As Integer = 142, + CPU_AMD_ATHLON_X2_DUALCORE As Integer = 143, + CPU_INTEL_XEON_3200_QUADCORE As Integer = 161, + CPU_INTEL_XEON_3000_DUALCORE As Integer = 162, + CPU_INTEL_XEON_5300_QUADCORE As Integer = 163, + CPU_INTEL_XEON_5100_DUALCORE As Integer = 164, + CPU_INTEL_XEON_5000_DUALCORE As Integer = 165, + CPU_INTEL_XEON_LV_DUALCORE As Integer = 166, + CPU_INTEL_XEON_ULV_DUALCORE As Integer = 167, + CPU_INTEL_XEON_7100_DUALCORE As Integer = 168, + CPU_INTEL_XEON_5400_QUADCORE As Integer = 169, + CPU_INTEL_XEON_QUADCORE As Integer = 170, + CPU_INTEL_XEON_5200_DUALCORE As Integer = 171, + CPU_INTEL_XEON_7200_DUALCORE As Integer = 172, + CPU_INTEL_XEON_7300_QUADCORE As Integer = 173, + CPU_INTEL_XEON_7400_QUADCORE As Integer = 174, + CPU_INTEL_XEON_7400_MULTICORE As Integer = 175, + CPU_INTEL_PENTIUM3_XEON As Integer = 176, + CPU_INTEL_PENTIUM3_SPEEDSTEP As Integer = 177, + CPU_INTEL_PENTIUM4 As Integer = 178, + CPU_INTEL_XEON As Integer = 179, + CPU_INTEL_XEON_MP As Integer = 181, + CPU_AMD_ATHLON_XP As Integer = 182, + CPU_AMD_ATHLON_MP As Integer = 183, + CPU_INTEL_PENTIUM_M As Integer = 185, + CPU_INTEL_CELERON_D As Integer = 186, + CPU_INTEL_PENTIUM_D As Integer = 187, + CPU_INTEL_PENTIUM_D_EXTREME As Integer = 188, + CPU_INTEL_CORE_SOLO_2 As Integer = 189, + CPU_INTEL_CORE2_DUO As Integer = 191, + CPU_INTEL_CORE2_SOLO As Integer = 192, + CPU_INTEL_CORE2_EXTREME As Integer = 193, + CPU_INTEL_CORE2_QUAD As Integer = 194, + CPU_INTEL_CORE2_EXTREME_M As Integer = 195, + CPU_INTEL_CORE2_DUO_M As Integer = 196, + CPU_INTEL_CORE2_SOLO_M As Integer = 197, + CPU_INTEL_CORE_I7 As Integer = 198, + CPU_INTEL_CELERON_DUALCORE As Integer = 199, + CPU_INTEL_CORE_I5 As Integer = 205, + CPU_INTEL_CORE_I3 As Integer = 206, + CPU_INTEL_CORE_I9 As Integer = 207, + CPU_INTEL_XEON_D As Integer = 208, + CPU_INTEL_XEON_3400_MULTICORE As Integer = 224, + CPU_AMD_OPTERON_3000 As Integer = 228, + CPU_AMD_SEMPRON_2 As Integer = 229, + CPU_AMD_OPTERON_QUADCORE_EMBEDDED As Integer = 230, + CPU_AMD_PHENOM_TRICORE As Integer = 231, + CPU_AMD_TURION_ULTRA_DUALCORE_MOBILE As Integer = 232, + CPU_AMD_TURION_DUALCORE_MOBILE As Integer = 233, + CPU_AMD_ATHLON_DUALCORE As Integer = 234, + CPU_AMD_SEMPRON_SI As Integer = 235, + CPU_AMD_PHENOM_2 As Integer = 236, + CPU_AMD_ATHLON_2 As Integer = 237, + CPU_AMD_OPTERON_SIXCORE As Integer = 238, + CPU_AMD_SEMPRON_M As Integer = 239, + CPU_ARMV7 As Integer = 256, + CPU_ARMV8 As Integer = 257, + CPU_ARMV9 As Integer = 258, + CPU_ARMRESERVED As Integer = 259, + CPU_INTEL_CORE_3_RAPTORLAKE As Integer = 768, + CPU_INTEL_CORE_5_RAPTORLAKE As Integer = 769, + CPU_INTEL_CORE_7_RAPTORLAKE As Integer = 770, + CPU_INTEL_CORE_9_RAPTORLAKE As Integer = 771, + CPU_INTEL_CORE_ULTRA3 As Integer = 772, + CPU_INTEL_CORE_ULTRA5 As Integer = 773, + CPU_INTEL_CORE_ULTRA7 As Integer = 774, + CPU_INTEL_CORE_ULTRA9 As Integer = 775 + + Private SpecialProcessorFamilies As New List(Of ProcessorFamilyCategory) From { + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM_3, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CELERON_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM_4_HT, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_DUO, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_DUO_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_SOLO, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_ATOM, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_M3, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_M5, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_M7, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_TURION_2_ULTRA_DUALCORE_MOBILE_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_TURION_2_DUALCORE_MOBILE_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_2_DUALCORE_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_6100, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_4100, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_6200, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_4200, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_FX, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_C, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_E, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_A, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_G, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_Z, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_R, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_4300, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_6300, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_3300, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_FIREPRO, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_X4_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_X1000, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_X2000_APU, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_A, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_X3000_APU, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_ZEN, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_64, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_SEMPRON, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_TURION_64_MOBILE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_64_X2_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_TURION_64_X2_MOBILE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_MK3, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_PHENOM_FX_QUADCORE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_AMD_PHENOM_X4_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_PHENOM_X2_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_X2_DUALCORE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_XEON_3200_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_3000_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_5300_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_5100_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_5000_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_LV_DUALCORE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_XEON_ULV_DUALCORE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_XEON_7100_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_5400_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_QUADCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_5200_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_7200_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_7300_QUADCORE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_XEON_7400_QUADCORE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_XEON_7400_MULTICORE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM3_XEON, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM3_SPEEDSTEP, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM4, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_XEON, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_MP, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_XP, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_MP, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CELERON_D, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM_D, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_PENTIUM_D_EXTREME, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_SOLO_2, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_DUO, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_SOLO, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_EXTREME, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_QUAD, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_EXTREME_M, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_DUO_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE2_SOLO_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_I7, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CELERON_DUALCORE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_I5, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_I3, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_INTEL_CORE_I9, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_XEON_D, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_XEON_3400_MULTICORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_3000, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_SEMPRON_2, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_QUADCORE_EMBEDDED, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_PHENOM_TRICORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_TURION_ULTRA_DUALCORE_MOBILE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_TURION_DUALCORE_MOBILE, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_DUALCORE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_SEMPRON_SI, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_AMD_PHENOM_2, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_ATHLON_2, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_AMD_OPTERON_SIXCORE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_AMD_SEMPRON_M, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_ARMV7, ProcessorFamilyBeefiness.Potato), + New ProcessorFamilyCategory(CPU_ARMV8, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_ARMV9, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_ARMRESERVED, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_3_RAPTORLAKE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_5_RAPTORLAKE, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_7_RAPTORLAKE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE_9_RAPTORLAKE, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE_ULTRA3, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_ULTRA5, ProcessorFamilyBeefiness.Average), + New ProcessorFamilyCategory(CPU_INTEL_CORE_ULTRA7, ProcessorFamilyBeefiness.Beefy), + New ProcessorFamilyCategory(CPU_INTEL_CORE_ULTRA9, ProcessorFamilyBeefiness.Beefy) + } + Private Sub DetermineSettingValidity() DynaLog.LogMessage("Validating settings...") If TextBox1.Text = "" Then @@ -115,7 +377,7 @@ Public Class Options MainForm.SaveOnSettingsIni = False End Select MainForm.ColorMode = ComboBox2.SelectedIndex - MainForm.Language = ComboBox3.SelectedIndex + MainForm.LanguageCode = GetSelectedLanguageCode(ComboBox3, MainForm.LanguageCode) MainForm.LogFont = ComboBox4.Text MainForm.LogFontSize = NumericUpDown1.Value If Toggle1.Checked Then @@ -176,7 +438,7 @@ Public Class Options MainForm.DarkThemeIndex = DarkThemesCB.SelectedIndex MainForm.LightThemeIndex = LightThemesCB.SelectedIndex MainForm.ChangePrgColors(MainForm.ColorMode) - MainForm.ChangeLangs(MainForm.Language) + MainForm.ApplyLanguage(MainForm.LanguageCode) If MountedImgMgr.Visible Then MountedImgMgr.Close() MountedImgMgr.Show() @@ -220,23 +482,26 @@ Public Class Options MainForm.AppxDisplayNameFormatOnRemoval = ComboBox8.SelectedIndex MainForm.PreventSystemFromSleeping = CheckBox8.Checked MainForm.HumanizeDates = CheckBox1.Checked + MainForm.LockUnlockedVolumes = CheckBox25.Checked + + MainForm.PEHelper_MaxConcurrentISO = NumericUpDown2.Value End Sub Private Sub GiveErrorExplanation(ErrorCode As Integer) DynaLog.LogMessage("Error Code: " & ErrorCode) Select Case ErrorCode Case 1 - MsgBox("The DISM executable path was not specified. Please specify one and try again", MsgBoxStyle.Critical, "DISMTools") + MsgBox(LocalizationService.ForSection("Options.Messages")("Dismexecutable.Path.Message"), MsgBoxStyle.Critical, "DISMTools") Case 2 - MsgBox("The DISM executable does not exist in the file system. Please verify the file still exists and try again", MsgBoxStyle.Critical, "DISMTools") + MsgBox(LocalizationService.ForSection("Options.Messages")("DISM.Executable.Message"), MsgBoxStyle.Critical, "DISMTools") Case 3 - MsgBox("The log file was not specified. Please specify one and try again", MsgBoxStyle.Critical, "DISMTools") + MsgBox(LocalizationService.ForSection("Options.Messages")("Log.File.Label"), MsgBoxStyle.Critical, "DISMTools") Case 4 - MsgBox("The program tried to create the specified log file, but has failed. Please try again", MsgBoxStyle.Critical, "DISMTools") + MsgBox(LocalizationService.ForSection("Options.Messages")("Tried.Create.Message"), MsgBoxStyle.Critical, "DISMTools") Case 5 - MsgBox("The scratch directory was not specified. Please specify one and try again", MsgBoxStyle.Critical, "DISMTools") + MsgBox(LocalizationService.ForSection("Options.Messages")("ScratchDir.Message"), MsgBoxStyle.Critical, "DISMTools") Case 6 - MsgBox("The program tried to create the specified scratch directory, but has failed. Please try again", MsgBoxStyle.Critical, "DISMTools") + MsgBox(LocalizationService.ForSection("Options.Messages")("Tried.Scratch.Message"), MsgBoxStyle.Critical, "DISMTools") End Select End Sub @@ -282,7 +547,7 @@ Public Class Options FileAssociationHelper.RemoveFileAssociation(".dtproj", "DISMTools.Project") End If If DTSSEditAssocCB.Checked Then - FileAssociationHelper.SetFileAssociation(".dtss", "DTSSEdit.StarterScript", String.Format("{0}{1}{0} /dtss={0}%1{0}", Quote, Path.Combine(Application.StartupPath, "tools", "StarterScriptEditor", "StarterScriptEditor.exe")), + FileAssociationHelper.SetFileAssociation(".dtss", "DTSSEdit.StarterScript", String.Format("{0}{1}{0} /dtss={0}%1{0}", Quote, Path.Combine(Application.StartupPath, "tools", "StarterScriptEditor", "StarterScript.exe")), "DISMTools Starter Script", If(DtssUseCustomIcon, Path.Combine(Application.StartupPath, "tools", "StarterScriptEditor", "DTSSIcon.ico"), ""), Not DtssUseCustomIcon) Else FileAssociationHelper.RemoveFileAssociation(".dtss", "DTSSEdit.StarterScript") @@ -300,6 +565,8 @@ Public Class Options DynaLog.LogMessage("Applying program settings...") ApplyProgSettings() If CanExit Then + DynaLog.LogMessage("Saving program settings...") + MainForm.SaveDTSettings() DynaLog.LogMessage("We can close the Options dialog.") Me.DialogResult = System.Windows.Forms.DialogResult.OK Me.Close() @@ -307,6 +574,8 @@ Public Class Options End Sub Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + MainForm.LanguageCode = LocalizationService.NormalizeCultureCode(originalLanguage) + MainForm.ApplyLanguage(MainForm.LanguageCode) Me.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.Close() End Sub @@ -314,7 +583,7 @@ Public Class Options Private Sub GetAIRServiceInformation() AutoReloadService = WindowsServiceHelper.GetOnlineSystemServiceInformationByName("DT_AutoReload") - Label80.Text = If(AutoReloadService IsNot Nothing, "Yes", "No") + Label80.Text = If(AutoReloadService IsNot Nothing, LocalizationService.ForSection("Options.AIRServiceInfo")("Yes.Button"), LocalizationService.ForSection("Options.AIRServiceInfo")("No.Button")) Button7.Enabled = AutoReloadService Is Nothing Button13.Enabled = AutoReloadService IsNot Nothing @@ -333,7 +602,7 @@ Public Class Options ' don't grab the version then End Try Else - Label80.Text = "No" + Label80.Text = LocalizationService.ForSection("Options.AIRServiceInfo")("No.Button") Label82.Text = "" Button11.Enabled = False Button12.Enabled = False @@ -341,7 +610,7 @@ Public Class Options Button13.Enabled = False End If Else - Label80.Text = "No" + Label80.Text = LocalizationService.ForSection("Options.AIRServiceInfo")("No.Button") Label82.Text = "" Button11.Enabled = False Button12.Enabled = False @@ -349,7 +618,65 @@ Public Class Options End Sub - Private Sub Options_Load(sender As Object, e As EventArgs) Handles MyBase.Load + + Private Sub RestoreComboBoxIndex(comboBox As ComboBox, selectedIndex As Integer) + If comboBox.Items.Count = 0 Then Return + If selectedIndex < 0 Then Return + comboBox.SelectedIndex = Math.Min(selectedIndex, comboBox.Items.Count - 1) + End Sub + + Private Function GetSelectedLanguageCode(comboBox As ComboBox, fallbackCultureCode As String) As String + If comboBox.SelectedItem IsNot Nothing AndAlso TypeOf comboBox.SelectedItem Is LocalizationLanguageInfo Then + Return DirectCast(comboBox.SelectedItem, LocalizationLanguageInfo).Code + End If + + If comboBox.SelectedValue IsNot Nothing Then + Return comboBox.SelectedValue.ToString() + End If + + Return LocalizationService.NormalizeCultureCode(fallbackCultureCode) + End Function + + Private Sub PopulateLanguageComboBox(comboBox As ComboBox, selectedCultureCode As String) + Dim normalizedCultureCode As String = LocalizationService.NormalizeCultureCode(selectedCultureCode) + comboBox.Items.Clear() + + For Each languageInfo As LocalizationLanguageInfo In LocalizationService.GetAvailableLanguages() + comboBox.Items.Add(languageInfo) + Next + + Dim selectedIndex As Integer = -1 + For index As Integer = 0 To comboBox.Items.Count - 1 + Dim languageInfo As LocalizationLanguageInfo = TryCast(comboBox.Items(index), LocalizationLanguageInfo) + If languageInfo IsNot Nothing AndAlso languageInfo.Code.Equals(normalizedCultureCode, StringComparison.OrdinalIgnoreCase) Then + selectedIndex = index + Exit For + End If + Next + + If selectedIndex < 0 Then + For index As Integer = 0 To comboBox.Items.Count - 1 + Dim languageInfo As LocalizationLanguageInfo = TryCast(comboBox.Items(index), LocalizationLanguageInfo) + If languageInfo IsNot Nothing AndAlso languageInfo.Code.Equals(LocalizationService.DefaultCultureCode, StringComparison.OrdinalIgnoreCase) Then + selectedIndex = index + Exit For + End If + Next + End If + + If selectedIndex >= 0 Then comboBox.SelectedIndex = selectedIndex + End Sub + + Private Sub ApplyLocalizedText() + Dim selectedSaveLocation As Integer = ComboBox1.SelectedIndex + Dim selectedColorMode As Integer = ComboBox2.SelectedIndex + Dim selectedLanguageCode As String = GetSelectedLanguageCode(ComboBox3, MainForm.LanguageCode) + Dim selectedLogView As Integer = ComboBox5.SelectedIndex + Dim selectedNotificationFrequency As Integer = ComboBox6.SelectedIndex + Dim selectedSearchEngine As Object = ComboBox7.SelectedItem + + isApplyingLocalizedText = True + Try DynaLog.LogMessage("Resetting values to add translated resources...") ComboBox1.Items.Clear() ComboBox2.Items.Clear() @@ -362,1103 +689,174 @@ Public Class Options ComboBox3.SelectedText = "" ComboBox5.SelectedText = "" ComboBox6.SelectedText = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Options" - ImageTaskHeader1.ItemText = Text - Label49.Text = "Program" - Label50.Text = "Personalization" - Label51.Text = "Logs" - Label52.Text = "Image operations" - Label53.Text = "Scratch directory" - Label54.Text = "Program output" - Label55.Text = "Background processes" - Label57.Text = "File associations" - Label58.Text = "Startup options" - Label34.Text = "Shutdown options" - Label2.Text = "DISM executable path:" - Label3.Text = "Version:" - Label5.Text = "Save settings on:" - Label7.Text = "Color mode:" - Label8.Text = "Language:" - 'Label9.Text = "Please specify the settings for the log window:" - Label10.Text = "Log window font:" - Label11.Text = "Preview:" - Label12.Text = "Operation log file:" - Label13.Text = "When performing image operations in the command line, specify the " & Quote & "/LogPath" & Quote & " argument to save the image operation log to the target log file." - Label14.Text = "Log file level:" - Label18.Text = "When quietly performing operations, the program will hide information and progress output. Error messages will still be shown." & CrLf & "This option will not be used when getting information of, for example, packages or features." & CrLf & "Also, when performing image servicing, your computer may restart automatically." - Label19.Text = "When this option is checked, your computer will not restart automatically; even when quietly performing operations" - Label20.Text = "Please specify the scratch directory to be used for DISM operations:" - Label21.Text = "Scratch directory:" - Label22.Text = "Space left on selected scratch directory:" - Label25.Text = "Log view:" - Label26.Text = "Example report:" - Label27.Text = "Some reports do not allow being shown as a table." - Label28.Text = "When should the program notify you about background processes being started?" - Label29.Text = "The program uses background processes to gather complete image information, like modification dates, installed packages, features present; and more" - Label40.Text = "Manage file associations for DISMTools components:" - Label43.Text = "Set options you would like to perform when the program starts up:" - Label44.Text = "The program will use the scratch directory provided by the project if one is loaded. If you are in the online or offline installation management modes, the program will use its scratch directory" - Label45.Text = "Secondary progress panel style:" - Label46.Text = "These settings aren't applicable to non-portable installations" - Label47.Text = "This font may not be readable on log windows. While you can still use it, we recommend monospaced fonts for increased readability." - Label48.Text = "Choose the settings the program should consider when saving image information:" - Button1.Text = "Browse..." - Button2.Text = "View DISM component versions" - Button3.Text = "Browse..." - Button4.Text = "Browse..." - Button9.Text = "Set file associations" - Button10.Text = "Advanced settings" - Cancel_Button.Text = "Cancel" - OK_Button.Text = "OK" - PrefReset.Text = "Reset preferences" - CheckBox2.Text = "Quietly perform image operations" - CheckBox3.Text = "Skip system restart" - CheckBox4.Text = "Use a scratch directory" - CheckBox5.Text = "Show command output in English" - CheckBox6.Text = "Notify me when background processes have started" - CheckBox7.Text = "Show log view on the progress panel by default" - CheckBox9.Text = "Use uppercase menus" - CheckBox10.Text = "Automatically create logs for each operation performed" - CheckBox11.Text = "Set custom file icons for DISMTools projects" - CheckBox12.Text = "Remount mounted images in need of a servicing session reload" - CheckBox13.Text = "Check for updates" - CheckBox14.Text = "Always save complete information for the following elements:" - CheckBox15.Text = "Installed packages" - CheckBox16.Text = "Features" - CheckBox17.Text = "Installed AppX packages" - CheckBox18.Text = "Capabilities" - CheckBox19.Text = "Installed drivers" - CheckBox22.Text = "Automatically clean up mount points (launches a separate process)" - DismOFD.Title = "Specify the DISM executable to use" - Label59.Text = "Log customization" - Label60.Text = "Set options you would like to perform when the program closes:" - Label61.Text = "Preview:" - Label9.Text = "Saving image information" - LinkLabel1.Text = "The program will enable or disable certain features according to what the DISM version supports. How is it going to affect my usage of this program, and which features will be disabled accordingly?" - LinkLabel1.LinkArea = New LinkArea(97, 100) - LinkLabel2.Text = "Learn more about background processes" - LogSFD.Title = "Specify the location of the log file" - RadioButton3.Text = "Use the project or program scratch directory" - RadioButton4.Text = "Use the specified scratch directory" - RadioButton5.Text = "Modern" - RadioButton6.Text = "Classic" - ScratchFBD.Description = "Specify the scratch directory the program should use:" - Label62.Text = "DynaLog logging provides a method for saving diagnostic logs that can be used to help fix program issues, in case you encounter them. You can disable the logger using the toggle below, but it's not recommended." & CrLf & CrLf & - "Disable logging only if it causes a performance overhead on your computer. Clicking the toggle will apply this setting automatically." - Label63.Text = "By default, operation logs are opened with Notepad in the event of an operation error. However, if you want to open them with a different program, specify it below:" - Label64.Text = "DynaLog logging control" - Label65.Text = "Editor to open log files with:" - Label66.Text = "System Editor" - Button5.Text = "Browse..." - EditorOFD.Title = "Specify the editor to use" - LinkLabel3.Text = "Show me where these logs are stored" - CheckBox20.Text = "Disable DynaLog logging" - Case "ESN" - Text = "Opciones" - ImageTaskHeader1.ItemText = Text - Label49.Text = "Programa" - Label50.Text = "Personalización" - Label51.Text = "Registros" - Label52.Text = "Operaciones" - Label53.Text = "Directorio temporal" - Label54.Text = "Salida del programa" - Label55.Text = "Procesos en segundo plano" - Label57.Text = "Asociaciones de archivos" - Label58.Text = "Opciones de inicio" - Label34.Text = "Opciones de cierre" - Label2.Text = "Ruta del ejecutable:" - Label3.Text = "Versión:" - Label5.Text = "Guardar configuraciones en:" - Label7.Text = "Modo de color:" - Label8.Text = "Idioma:" - Label10.Text = "Fuente:" - Label11.Text = "Vista previa:" - Label12.Text = "Archivo de registro:" - Label13.Text = "Cuando se realizan operaciones en la línea de comandos, especifique el argumento " & Quote & "/LogPath" & Quote & " para guardar el registro de operaciones en el archivo de destino" - Label14.Text = "Nivel de registro:" - Label18.Text = "Cuando se realizan operaciones silenciosamente, el programa ocultará información y salida del progreso." & CrLf & "Esta opción no se usará al obtener información de, por ejemplo, paquetes o características." & CrLf & "También, al realizar un servicio de imágenes, su sistema podría reiniciarse automáticamente." - Label19.Text = "Cuando esta opción está marcada, su sistema no se reiniciará automáticamente; incluso si se realizan operaciones silenciosamente" - Label20.Text = "Especifique el directorio temporal a ser usado en operaciones de DISM:" - Label21.Text = "Directorio temporal:" - Label22.Text = "Espacio disponible en directorio temporal:" - Label25.Text = "Vista de registro:" - Label26.Text = "Informe de prueba:" - Label27.Text = "Algunos informes no permiten ser mostrados como una tabla." - Label28.Text = "¿Cuándo debería el programa notificarle acerca de procesos en segundo plano siendo iniciados?" - Label29.Text = "El programa utiliza procesos en segundo plano para recopilar información completa de la imagen, como fechas de modificación, paquetes instalados, características presentes; y más" - Label40.Text = "Administre asociaciones de archivos para componentes de DISMTools:" - Label43.Text = "Establezca las opciones que le gustaría realizar cuando el programa inicie:" - Label44.Text = "El programa usará el directorio temporal proporcionado por el proyecto si se cargó alguno. Si está en los modos de administración de instalaciones en línea o fuera de línea, el programa utilizará su directorio temporal" - Label45.Text = "Estilo del panel de progreso secundario:" - Label46.Text = "Estas configuraciones no son aplicables a instalaciones no portátiles" - Label47.Text = "Esta fuente podría no ser legible en ventanas de registro. Aunque todavía pueda utilizarla, le recomendamos fuentes monoespaciadas para una legibilidad aumentada." - Label48.Text = "Escoja las opciones que el programa debería considerar al guardar información de la imagen:" - Button1.Text = "Examinar..." - Button2.Text = "Ver versiones de componentes" - Button3.Text = "Examinar..." - Button4.Text = "Examinar..." - Button9.Text = "Establecer asociaciones" - Button10.Text = "Opciones avanzadas" - Cancel_Button.Text = "Cancelar" - OK_Button.Text = "Aceptar" - PrefReset.Text = "Restablecer preferencias" - CheckBox2.Text = "Realizar operaciones silenciosamente" - CheckBox3.Text = "Omitir reinicio del sistema" - CheckBox4.Text = "Usar un directorio temporal" - CheckBox5.Text = "Mostrar salida del programa en inglés" - CheckBox6.Text = "Notificarme cuando los procesos en segundo plano se hayan iniciado" - CheckBox7.Text = "Mostrar vista de registro en el panel de progreso por defecto" - CheckBox9.Text = "Usar menús en mayúscula" - CheckBox10.Text = "Crear registros para cada operación realizada automáticamente" - CheckBox11.Text = "Establecer iconos personalizados para proyectos de DISMTools" - CheckBox12.Text = "Remontar imágenes montadas que necesitan una recarga de su sesión de servicio" - CheckBox13.Text = "Comprobar actualizaciones" - CheckBox14.Text = "Siempre guardar información completa para los siguientes elementos:" - CheckBox15.Text = "Paquetes instalados" - CheckBox16.Text = "Características" - CheckBox17.Text = "Paquetes AppX instalados" - CheckBox18.Text = "Funcionalidades" - CheckBox19.Text = "Controladores instalados" - CheckBox22.Text = "Limpiar puntos de montaje automáticamente (inicia un proceso separado)" - DismOFD.Title = "Especifique el ejecutable de DISM a usar" - Label59.Text = "Personalización del registro" - Label60.Text = "Establezca las opciones que le gustaría realizar cuando el programa se cierra:" - Label61.Text = "Vista previa:" - Label9.Text = "Guardando información de la imagen" - LinkLabel1.Text = "El programa habilitará o deshabilitará algunas características atendiendo a lo que soporte la versión de DISM. ¿Cómo va a afectar esto mi uso del programa, y qué características serán deshabilitadas?" - LinkLabel1.LinkArea = New LinkArea(111, 88) - LinkLabel2.Text = "Conocer más sobre los procesos en segundo plano" - LogSFD.Title = "Especifique la ubicación del archivo de registro" - RadioButton3.Text = "Utilizar el directorio temporal del proyecto o del programa" - RadioButton4.Text = "Utilizar el directorio temporal especificado" - RadioButton5.Text = "Moderno" - RadioButton6.Text = "Clásico" - ScratchFBD.Description = "Especifique el directorio temporal que debería usar el programa:" - Label62.Text = "DynaLog proporciona un método para guardar registros de diagnóstico que pueden ser utilizados para ayudar a solucionar problemas del programa, en caso de que los encuentre. Puede desactivar el registro usando el interruptor de abajo, pero no es recomendable." & CrLf & CrLf & - "Desactive el registro solo si causa una sobrecarga de rendimiento en su equipo. Hacer clic en el interruptor aplicará esta configuración automáticamente." - Label63.Text = "Por defecto, los registros de operación se abren con el Bloc de notas en caso de un error de operación. Sin embargo, si desea abrirlos con un programa diferente, especifíquelo a continuación:" - Label64.Text = "Control de registro de DynaLog" - Label65.Text = "Editor con el que se abrirán archivos de registro:" - Label66.Text = "Editor del sistema" - Button5.Text = "Examinar..." - EditorOFD.Title = "Especifique el editor a usar" - LinkLabel3.Text = "Muéstrame dónde se guardan estos registros" - CheckBox20.Text = "Desactivar el registro de DynaLog" - Case "FRA" - Text = "Paramètres" - ImageTaskHeader1.ItemText = Text - Label49.Text = "Programme" - Label50.Text = "Personnalisation" - Label51.Text = "Journaux" - Label52.Text = "Opérations sur les images" - Label53.Text = "Répertoire temporaire" - Label54.Text = "Sortie du programme" - Label55.Text = "Processus en arrière plan" - Label57.Text = "Associations de fichiers" - Label58.Text = "Paramètres de démarrage" - Label34.Text = "Paramètres de fermeture" - Label2.Text = "Chemin d'accès à l'exécutable DISM :" - Label3.Text = "Version:" - Label5.Text = "Sauvegarder les paramètres sur :" - Label7.Text = "Mode couleur :" - Label8.Text = "Langue:" - 'Label9.Text = "Veuillez spécifier les paramètres de la fenêtre d'enregistrement :" - Label10.Text = "Fonte de la fenêtre du journal :" - Label11.Text = "Aperçu:" - Label12.Text = "Fichier journal des opérations :" - Label13.Text = "Lorsque vous effectuez des opérations sur les images dans la ligne de commande, spécifiez l'argument " & Quote & "/LogPath" & Quote & " pour sauvegarder le journal des opérations sur les images dans le fichier journal cible." - Label14.Text = "Niveau du fichier journal :" - Label18.Text = "Lors de l'exécution silencieuse d'une opération, le programme masquera les informations et la progression de l'opération. Les messages d'erreur seront toujours affichés." & CrLf & "Cette option ne sera pas utilisée pour obtenir des informations, par exemple, sur les paquets ou les caractéristiques." & CrLf & "En outre, lors de la maintenance de l'image, votre ordinateur peut redémarrer automatiquement." - Label19.Text = "Lorsque cette option est cochée, l'ordinateur ne redémarre pas automatiquement, même lorsqu'il effectue des opérations en silence." - Label20.Text = "Veuillez indiquer le répertoire temporaire à utiliser pour les opérations DISM :" - Label21.Text = "Répertoire temporaire:" - Label22.Text = "Espace restant sur le répertoire temporaire sélectionné :" - Label25.Text = "Vue du journal :" - Label26.Text = "Exemple de rapport :" - Label27.Text = "Certains rapports ne permettent pas d'être présentés sous forme de tableau." - Label28.Text = "Quand le programme doit-il vous avertir du démarrage de processus en arrière plan ?" - Label29.Text = "Le programme utilise des processus en arrière plan pour recueillir des informations complètes sur l'image, comme les dates de modification, les paquets installés, les caractéristiques présentes, etc." - Label40.Text = "Gérer les associations de fichiers pour les composants DISMTools :" - Label43.Text = "Définissez les options que vous souhaitez exécuter au démarrage du programme :" - Label44.Text = "Le programme utilisera le répertoire temporaire fourni par le projet s'il en existe un. Si vous êtes en les modes de gestion de l'installation en ligne ou hors ligne, le programme utilisera son répertoire temporaire." - Label45.Text = "Style du panneau de progression secondaire :" - Label46.Text = "Ces paramètres ne s'appliquent pas aux installations non portables." - Label47.Text = "Cette police peut ne pas être lisible sur les fenêtres logiques. Bien que vous puissiez encore l'utiliser, nous recommandons les polices monospaces pour une meilleure lisibilité." - Label48.Text = "Choisissez les paramètres que le programme doit prendre en compte lors de la sauvegarde des informations de l'image :" - Button1.Text = "Parcourir..." - Button2.Text = "Voir les versions des composants DISM" - Button3.Text = "Parcourir..." - Button4.Text = "Parcourir..." - Button9.Text = "Établir des associations de fichiers" - Button10.Text = "Paramètres avancés" - Cancel_Button.Text = "Annuler" - OK_Button.Text = "OK" - PrefReset.Text = "Réinitialiser les préférences" - CheckBox2.Text = "Effectuer des opérations d'image en silence" - CheckBox3.Text = "Sauter le redémarrage du système" - CheckBox4.Text = "Utiliser un répertoire temporaire" - CheckBox5.Text = "Afficher la sortie de la commande en anglais" - CheckBox6.Text = "M'avertir lorsque des processus en arrière plan ont démarré" - CheckBox7.Text = "Afficher par défaut la vue du journal dans le panneau de progression" - CheckBox9.Text = "Utiliser des menus en majuscules" - CheckBox10.Text = "Créer automatiquement des journaux pour chaque opération effectuée" - CheckBox11.Text = "Définir des icônes de fichiers personnalisés pour les projets DISMTools" - CheckBox12.Text = "Remonter les images montées nécessitant un rechargement de la session de maintenance" - CheckBox13.Text = "Mettre à jour les données" - CheckBox14.Text = "Sauvegardez toujours des informations complètes pour les éléments suivants :" - CheckBox15.Text = "Paquets installés" - CheckBox16.Text = "Caractéristiques" - CheckBox17.Text = "Paquets AppX installés" - CheckBox18.Text = "Capacités" - CheckBox19.Text = "Pilotes installés" - CheckBox22.Text = "Nettoyer automatiquement les points de montage (lance un processus séparé)" - DismOFD.Title = "Spécifier l'exécutable DISM à utiliser" - Label59.Text = "Personnalisation du journal" - Label60.Text = "Définissez les paramètres que vous souhaitez effectuer à la fermeture du programme :" - Label61.Text = "Aperçu :" - Label9.Text = "Sauvegarde des informations de l'image" - LinkLabel1.Text = "Le programme activera ou désactivera certaines caractéristiques en fonction de ce que la version de DISM prend en charge. Comment cela va-t-il affecter mon utilisation de ce programme, et quelles caractéristiques seront désactivées en conséquence ?" - LinkLabel1.LinkArea = New LinkArea(122, 126) - LinkLabel2.Text = "Savoir plus sur les processus en arrière plan" - LogSFD.Title = "Spécifier l'emplacement du fichier journal" - RadioButton3.Text = "Utiliser le répertoire temporaire du projet ou du programme" - RadioButton4.Text = "Utiliser le répertoire temporaire spécifié" - RadioButton5.Text = "Moderne" - RadioButton6.Text = "Classique" - ScratchFBD.Description = "Indiquez le répertoire temporaire que le programme doit utiliser :" - Label62.Text = "L'enregistrement DynaLog permet de sauvegarder des journaux de diagnostic qui peuvent être utilisés pour aider à résoudre des problèmes de programme, au cas où vous en rencontreriez. Vous pouvez désactiver l'enregistreur en utilisant la bascule ci-dessous, mais ce n'est pas recommandé." & CrLf & CrLf & - "Désactivez la journalisation uniquement si elle entraîne une surcharge de performance sur votre ordinateur. En cliquant sur la bascule, vous appliquerez automatiquement ce paramètre." - Label63.Text = "Par défaut, les journaux d'opération sont ouverts avec le Bloc-notes en cas d'erreur d'opération. Cependant, si vous souhaitez les ouvrir avec un autre programme, indiquez-le ci-dessous :" - Label64.Text = "Contrôle d'enregistrement DynaLog" - Label65.Text = "Editeur pour ouvrir les fichiers journaux avec :" - Label66.Text = "Editeur système" - Button5.Text = "Parcourir..." - EditorOFD.Title = "Spécifier l'éditeur à utiliser" - LinkLabel3.Text = "Montrez-moi où ces journaux sont stockés" - CheckBox20.Text = "Désactiver la journalisation DynaLog" - Case "PTB", "PTG" - Text = "Opções" - ImageTaskHeader1.ItemText = Text - Label49.Text = "Programa" - Label50.Text = "Personalização" - Label51.Text = "Registos" - Label52.Text = "Operações de imagem" - Label53.Text = "Diretório temporário" - Label54.Text = "Saída do programa" - Label55.Text = "Processos em segundo plano" - Label57.Text = "Associações de ficheiros" - Label58.Text = "Opções de arranque" - Label34.Text = "Opções de encerramento" - Label2.Text = "Localização do executável DISM:" - Label3.Text = "Versão:" - Label5.Text = "Guardar configurações em:" - Label7.Text = "Modo de cor:" - Label8.Text = "Idioma:" - Label9.Text = "Especifique as configurações para a janela de registo:" - Label10.Text = "Tipo de letra da janela de registo:" - Label11.Text = "Pré-visualização:" - Label12.Text = "Ficheiro de registo de operações:" - Label13.Text = "Quando efetuar operações de imagem na linha de comandos, especifique o argumento " & Quote & "/LogPath" & Quote & " para guardar o registo da operação de imagem no ficheiro de registo de destino." - Label14.Text = "Nível do ficheiro de registo:" - Label18.Text = "Quando as operações são efectuadas em silêncio, o programa oculta as informações e o progresso. As mensagens de erro continuarão a ser mostradas." & CrLf & "Esta opção não será utilizada para obter informações sobre, por exemplo, pacotes ou funcionalidades." & CrLf & "Além disso, ao efetuar operações de imagem, o computador pode reiniciar-se automaticamente." - Label19.Text = "Se esta opção estiver selecionada, o computador não será reiniciado automaticamente, mesmo quando estiver a efetuar operações silenciosas" - Label20.Text = "Especifique o diretório de rascunho a utilizar para as operações DISM:" - Label21.Text = "Diretório de rascunho:" - Label22.Text = "Espaço restante no diretório de rascunho selecionado:" - Label25.Text = "Vista de registo:" - Label26.Text = "Exemplo de relatório:" - Label27.Text = "Alguns relatórios não permitem ser mostrados como uma tabela." - Label28.Text = "Quando é que o programa o deve notificar sobre os processos em segundo plano que estão a ser iniciados?" - Label29.Text = "O programa usa processos em segundo plano para reunir informações completas sobre a imagem, como datas de modificação, pacotes instalados, recursos presentes e muito mais" - Label40.Text = "Gerir associações de ficheiros para os componentes do DISMTools:" - Label43.Text = "Definir opções que gostaria de efetuar quando o programa arranca:" - Label44.Text = "O programa utilizará o diretório de rascunho fornecido pelo projeto, se tiver sido carregado um. Se estiver nos modos de gestão da instalação online ou offline, o programa utilizará o seu diretório de rascunho" - Label45.Text = "Estilo do painel de progresso secundário:" - Label46.Text = "Estas configurações não são aplicáveis a instalações não portáteis" - Label47.Text = "Este tipo de letra pode não ser legível em janelas de registo. Embora possa continuar a utilizá-lo, recomendamos tipos de letra monoespaçados para uma maior legibilidade." - Label48.Text = "Escolha as configurações que o programa deve considerar quando guardar informações de imagem:" - Button1.Text = "Navegar..." - Button2.Text = "Ver versões de componentes DISM" - Button3.Text = "Navegar..." - Button4.Text = "Navegar..." - Button9.Text = "Configurar associações de ficheiros" - Button10.Text = "Configurações avançadas" - Cancel_Button.Text = "Cancelar" - OK_Button.Text = "OK" - PrefReset.Text = "Repor preferências" - CheckBox2.Text = "Efetuar operações de imagem silenciosamente" - CheckBox3.Text = "Ignorar o reinício do sistema" - CheckBox4.Text = "Utilizar um diretório de rascunho" - CheckBox5.Text = "Mostrar a saída do comando em inglês" - CheckBox6.Text = "Notificar-me quando os processos em segundo plano tiverem iniciado" - CheckBox7.Text = "Mostrar a vista de registo no painel de progresso por predefinição" - CheckBox9.Text = "Utilizar menus em maiúsculas" - CheckBox10.Text = "Criar automaticamente registos para cada operação realizada" - CheckBox11.Text = "Configurar ícones de ficheiros personalizados para projectos DISMTools" - CheckBox12.Text = "Remontar imagens montadas que necessitem de um recarregamento da sessão de manutenção" - CheckBox13.Text = "Verificar se há actualizações" - CheckBox14.Text = "Guardar sempre informações completas sobre os seguintes elementos:" - CheckBox15.Text = "Pacotes instalados" - CheckBox16.Text = "Características" - CheckBox17.Text = "Pacotes AppX instalados" - CheckBox18.Text = " Capacidades" - CheckBox19.Text = "Controladores instalados" - CheckBox22.Text = "Limpar automaticamente os pontos de montagem (inicia um processo separado)" - DismOFD.Title = "Especificar o executável DISM a utilizar" - Label59.Text = "Personalização do registo" - Label60.Text = "Configurar as opções que gostaria de executar quando o programa fecha:" - Label61.Text = "Pré-visualização:" - Label9.Text = "Guardar informação da imagem" - LinkLabel1.Text = "O programa irá ativar ou desativar determinadas funcionalidades de acordo com o que a versão DISM suporta. Como é que isso vai afetar a minha utilização deste programa e que funcionalidades serão desactivadas em conformidade?" - LinkLabel1.LinkArea = New LinkArea(107, 118) - LinkLabel2.Text = "Saiba mais sobre os processos em segundo plano" - LogSFD.Title = "Especificar a localização do ficheiro de registo" - RadioButton3.Text = "Utilizar o diretório de rascunho do projeto ou do programa" - RadioButton4.Text = "Utilizar o diretório de rascunho especificado" - RadioButton5.Text = "Moderna" - RadioButton6.Text = "Clássico" - ScratchFBD.Description = "Especificar o diretório de rascunho que o programa deve utilizar:" - Label62.Text = "O registo DynaLog fornece um método para guardar registos de diagnóstico que podem ser utilizados para ajudar a corrigir problemas do programa, caso os encontre. Pode desativar o registo utilizando o botão abaixo, mas não é recomendado." & CrLf & CrLf & - "Desactive o registo apenas se este causar uma sobrecarga de desempenho no seu computador. Se clicar no botão de alternância, esta definição será aplicada automaticamente." - Label63.Text = "Por predefinição, os registos de operações são abertos com o Bloco de Notas em caso de erro de operação. No entanto, se pretender abri-los com um programa diferente, especifique-o abaixo:" - Label64.Text = "Controlo de registo DynaLog" - Label65.Text = "Editor para abrir ficheiros de registo com:" - Label66.Text = "Editor do sistema" - Button5.Text = "Procurar..." - EditorOFD.Title = "Especificar o editor a utilizar" - LinkLabel3.Text = "Mostre-me onde estes registos estão armazenados" - CheckBox20.Text = "Desativar o registo DynaLog" - Case "ITA" - Text = "Opzioni" - ImageTaskHeader1.ItemText = Text - Label49.Text = "Programma" - Label50.Text = "Personalizzazione" - Label51.Text = "Registri" - Label52.Text = "Operazioni immagine" - Label53.Text = "Cartella temporanea" - Label54.Text = "Output programma" - Label55.Text = "Processi in background" - Label57.Text = "Associazioni file" - Label58.Text = "Opzioni avvio" - Label34.Text = "Opzioni spegnimento" - Label2.Text = "Percorso eseguibile DISM:" - Label3.Text = "Versione:" - Label5.Text = "Salva impostazioni in:" - Label7.Text = "Modalità colore:" - Label8.Text = "Lingua:" - Label9.Text = "Specifica le impostazioni per la finestra regsitro:" - Label10.Text = "Font finestra registro:" - Label11.Text = "Anteprima:" - Label12.Text = "File registro operazioni:" - Label13.Text = "Quando si eseguono operazioni sull'immagine da riga di comando, specifical'argomento " & Quote & "/LogPath" & Quote & " per salvare il registro delle operazioni sull'immagine nel file registro destinazione" - Label14.Text = "Livello file registro:" - Label18.Text = "Quando si eseguono le operazioni in modalità silenziosa, il programma nasconde le informazioni e l'output di avanzamento. I messaggi di errore verranno comunque visualizzati." & CrLf & "Questa opzione non verrà usata quando si ottengono informazioni, ad esempio, sui pacchetti o sulle funzionalità." & CrLf & "Inoltre, quando si esegue la manutenzione delle immagini, il computer potrebbe riavviarsi automaticamente." - Label19.Text = "Quando questa opzione è selezionata, il computer non si riavvia automaticamente, anche quando si eseguono le operazioni in modalità silenziosa" - Label20.Text = "Specifica la cartella temporanea da usare per le operazioni DISM:" - Label21.Text = "Cartella temporanea:" - Label22.Text = "Spazio rimanente nella cartella temporanea selezionata:" - Label25.Text = "Visualizzazione registro:" - Label26.Text = "Esempio rapporto:" - Label27.Text = "Alcuni rapporti non possono essere visualizzati come tabella" - Label28.Text = "Quando il programma dovrebbe notificare l'avvio dei processi in background?" - Label29.Text = "Il programma usa i processi in background per raccogliere informazioni complete sull'immagine, come le date di modifica, i pacchetti installati, le funzionalità presenti e altro ancora" - Label40.Text = "Gestisci le associazioni dei file per i componenti di DISMTools:" - Label43.Text = "Imposta le opzioni che vuoi eseguire all'avvio del programma:" - Label44.Text = "Il programma userà la cartella temporanea fornita dal progetto, se ne è stata caricata una. Se ci si trova nelle modalità di gestione dell'installazione online o offline, il programma userà la sua cartella scratch" - Label45.Text = "Stile pannello avanzamento secondario:" - Label46.Text = "Queste impostazioni non sono applicabili alle installazioni non portatili" - Label47.Text = "Questo font potrebbe non essere leggibile nelle finestre registro. Anche se è possibile usarlo, per una maggiore leggibilità ti consigliamo di usare font mono spaziati." - Label48.Text = "Scegli le impostazioni che il programma deve considerare quando salva le informazioni sull'immagine:" - Button1.Text = "Sfoglia..." - Button2.Text = "Visualizza le versioni dei componenti DISM" - Button3.Text = "Sfoglia..." - Button4.Text = "Sfoglia..." - Button9.Text = "Imposta associazioni file" - Button10.Text = "Impostazioni avanzate" - Cancel_Button.Text = "Annulla" - OK_Button.Text = "OK" - PrefReset.Text = "Ripristina preferenze" - CheckBox2.Text = "Esegui le operazioni sull'immagine in modalità silenziosa" - CheckBox3.Text = "Salta il riavvio del sistema" - CheckBox4.Text = "Usa cartella scratch" - CheckBox5.Text = "Visualizza l'output del comando in inglese" - CheckBox6.Text = "Notifica l'avvio dei processi in background" - CheckBox7.Text = "Visualizza il registro nel pannello di avanzamento per impostazione predefinita" - CheckBox9.Text = "Usa i menu in maiuscolo" - CheckBox10.Text = "Crea automaticamente i registri per ogni operazione eseguita" - CheckBox11.Text = "Imposta icone file personalizzate per i progetti DISMTools" - CheckBox12.Text = "Rimonta le immagini montate che necessitano di un ricaricamento della sessione di assistenza" - CheckBox13.Text = "Controlla aggiornamenti" - CheckBox14.Text = "Salva sempre le informazioni complete per i seguenti elementi:" - CheckBox15.Text = "Pacchetti installati" - CheckBox16.Text = "Funzionalità" - CheckBox17.Text = "Pacchetti AppX installati" - CheckBox18.Text = "Capacità" - CheckBox19.Text = "Driver installati" - CheckBox22.Text = "Pulisci automaticamente i punti di montaggio (esegui un processo separato)" - DismOFD.Title = "Specifica l'eseguibile DISM da usare" - Label59.Text = "Personalizzazione dei registri" - Label60.Text = "Imposta le opzioni che vuoi eseguire alla chiusura del programma:" - Label61.Text = "Anteprima:" - Label9.Text = "Salvataggio informazioni dell'immagine" - LinkLabel1.Text = "Il programma abilita/disabilita alcune funzionalità in base alla versione di DISM supportata. Come influirà sull'uso di questo programma e quali funzioni saranno disabilitate di conseguenza?" - LinkLabel1.LinkArea = New LinkArea(92, 100) - LinkLabel2.Text = "Ulteriori informazioni sui processi in background" - LogSFD.Title = "Specifica il percorso del file registro" - RadioButton3.Text = "Usa la cartella temporanea del progetto o del programma" - RadioButton4.Text = "Usa la cartella temporanea specificata" - RadioButton5.Text = "Moderno" - RadioButton6.Text = "Classico" - ScratchFBD.Description = "Specifica la cartella scratch che il programma deve usare:" - Label62.Text = "La registrazione DynaLog fornisce un metodo per salvare i registri diagnostici che possono essere usati per risolvere i problemi del programma, nel caso in cui si verifichino. È possibile disattivare il logger usando la levetta sottostante, ma non è consigliabile." & CrLf & CrLf & - "Disattivare il logging solo se causa un sovraccarico di prestazioni sul computer. Facendo clic sulla levetta, questa impostazione verrà applicata automaticamente." - Label63.Text = "Per impostazione predefinita, in caso di errore i registri delle operazioni vengono aperti con il Blocco note. Tuttavia, se vuoi aprirli con un altro programma, specificalo di seguito:" - Label64.Text = "Controllo registrazione DynaLog" - Label65.Text = "Editor per aprire i file registro:" - Label66.Text = "Editor di sistema" - Button5.Text = "Sfoglia..." - EditorOFD.Title = "Specifica l'editor da usare" - LinkLabel3.Text = "Visualizza dove sono archiviati i registri" - CheckBox20.Text = "Disabilita registrazione di DynaLog" - End Select - Case 1 - Text = "Options" - ImageTaskHeader1.ItemText = Text - Label49.Text = "Program" - Label50.Text = "Personalization" - Label51.Text = "Logs" - Label52.Text = "Image operations" - Label53.Text = "Scratch directory" - Label54.Text = "Program output" - Label55.Text = "Background processes" - Label57.Text = "File associations" - Label58.Text = "Startup options" - Label34.Text = "Shutdown options" - Label2.Text = "DISM executable path:" - Label3.Text = "Version:" - Label5.Text = "Save settings on:" - Label7.Text = "Color mode:" - Label8.Text = "Language:" - 'Label9.Text = "Please specify the settings for the log window:" - Label10.Text = "Log window font:" - Label11.Text = "Preview:" - Label12.Text = "Operation log file:" - Label13.Text = "When performing image operations in the command line, specify the " & Quote & "/LogPath" & Quote & " argument to save the image operation log to the target log file." - Label14.Text = "Log file level:" - Label18.Text = "When quietly performing operations, the program will hide information and progress output. Error messages will still be shown." & CrLf & "This option will not be used when getting information of, for example, packages or features." & CrLf & "Also, when performing image servicing, your computer may restart automatically." - Label19.Text = "When this option is checked, your computer will not restart automatically; even when quietly performing operations" - Label20.Text = "Please specify the scratch directory to be used for DISM operations:" - Label21.Text = "Scratch directory:" - Label22.Text = "Space left on selected scratch directory:" - Label25.Text = "Log view:" - Label26.Text = "Example report:" - Label27.Text = "Some reports do not allow being shown as a table." - Label28.Text = "When should the program notify you about background processes being started?" - Label29.Text = "The program uses background processes to gather complete image information, like modification dates, installed packages, features present; and more" - Label40.Text = "Manage file associations for DISMTools components:" - Label43.Text = "Set options you would like to perform when the program starts up:" - Label44.Text = "The program will use the scratch directory provided by the project if one is loaded. If you are in the online or offline installation management modes, the program will use its scratch directory" - Label45.Text = "Secondary progress panel style:" - Label46.Text = "These settings aren't applicable to non-portable installations" - Label47.Text = "This font may not be readable on log windows. While you can still use it, we recommend monospaced fonts for increased readability." - Label48.Text = "Choose the settings the program should consider when saving image information:" - Button1.Text = "Browse..." - Button2.Text = "View DISM component versions" - Button3.Text = "Browse..." - Button4.Text = "Browse..." - Button9.Text = "Set file associations" - Button10.Text = "Advanced settings" - Cancel_Button.Text = "Cancel" - OK_Button.Text = "OK" - PrefReset.Text = "Reset preferences" - CheckBox2.Text = "Quietly perform image operations" - CheckBox3.Text = "Skip system restart" - CheckBox4.Text = "Use a scratch directory" - CheckBox5.Text = "Show command output in English" - CheckBox6.Text = "Notify me when background processes have started" - CheckBox7.Text = "Show log view on the progress panel by default" - CheckBox9.Text = "Use uppercase menus" - CheckBox10.Text = "Automatically create logs for each operation performed" - CheckBox11.Text = "Set custom file icons for DISMTools projects" - CheckBox12.Text = "Remount mounted images in need of a servicing session reload" - CheckBox13.Text = "Check for updates" - CheckBox14.Text = "Always save complete information for the following elements:" - CheckBox15.Text = "Installed packages" - CheckBox16.Text = "Features" - CheckBox17.Text = "Installed AppX packages" - CheckBox18.Text = "Capabilities" - CheckBox19.Text = "Installed drivers" - CheckBox22.Text = "Automatically clean up mount points (launches a separate process)" - DismOFD.Title = "Specify the DISM executable to use" - Label59.Text = "Log customization" - Label60.Text = "Set options you would like to perform when the program closes:" - Label61.Text = "Preview:" - Label9.Text = "Saving image information" - LinkLabel1.Text = "The program will enable or disable certain features according to what the DISM version supports. How is it going to affect my usage of this program, and which features will be disabled accordingly?" - LinkLabel1.LinkArea = New LinkArea(97, 100) - LinkLabel2.Text = "Learn more about background processes" - LogSFD.Title = "Specify the location of the log file" - RadioButton3.Text = "Use the project or program scratch directory" - RadioButton4.Text = "Use the specified scratch directory" - RadioButton5.Text = "Modern" - RadioButton6.Text = "Classic" - ScratchFBD.Description = "Specify the scratch directory the program should use:" - Label62.Text = "DynaLog logging provides a method for saving diagnostic logs that can be used to help fix program issues, in case you encounter them. You can disable the logger using the toggle below, but it's not recommended." & CrLf & CrLf & - "Disable logging only if it causes a performance overhead on your computer. Clicking the toggle will apply this setting automatically." - Label63.Text = "By default, operation logs are opened with Notepad in the event of an operation error. However, if you want to open them with a different program, specify it below:" - Label64.Text = "DynaLog logging control" - Label65.Text = "Editor to open log files with:" - Label66.Text = "System Editor" - Button5.Text = "Browse..." - EditorOFD.Title = "Specify the editor to use" - LinkLabel3.Text = "Show me where these logs are stored" - CheckBox20.Text = "Disable DynaLog logging" - Case 2 - Text = "Opciones" - ImageTaskHeader1.ItemText = Text - Label49.Text = "Programa" - Label50.Text = "Personalización" - Label51.Text = "Registros" - Label52.Text = "Operaciones" - Label53.Text = "Directorio temporal" - Label54.Text = "Salida del programa" - Label55.Text = "Procesos en segundo plano" - Label57.Text = "Asociaciones de archivos" - Label58.Text = "Opciones de inicio" - Label34.Text = "Opciones de cierre" - Label2.Text = "Ruta del ejecutable:" - Label3.Text = "Versión:" - Label5.Text = "Guardar configuraciones en:" - Label7.Text = "Modo de color:" - Label8.Text = "Idioma:" - 'Label9.Text = "Especifique las configuraciones para la ventana de registro:" - Label10.Text = "Fuente:" - Label11.Text = "Vista previa:" - Label12.Text = "Archivo de registro:" - Label13.Text = "Cuando se realizan operaciones en la línea de comandos, especifique el argumento " & Quote & "/LogPath" & Quote & " para guardar el registro de operaciones en el archivo de destino" - Label14.Text = "Nivel de registro:" - Label18.Text = "Cuando se realizan operaciones silenciosamente, el programa ocultará información y salida del progreso." & CrLf & "Esta opción no se usará al obtener información de, por ejemplo, paquetes o características." & CrLf & "También, al realizar un servicio de imágenes, su sistema podría reiniciarse automáticamente." - Label19.Text = "Cuando esta opción está marcada, su sistema no se reiniciará automáticamente; incluso si se realizan operaciones silenciosamente" - Label20.Text = "Especifique el directorio temporal a ser usado en operaciones de DISM:" - Label21.Text = "Directorio temporal:" - Label22.Text = "Espacio disponible en directorio temporal:" - Label25.Text = "Vista de registro:" - Label26.Text = "Informe de prueba:" - Label27.Text = "Algunos informes no permiten ser mostrados como una tabla." - Label28.Text = "¿Cuándo debería el programa notificarle acerca de procesos en segundo plano siendo iniciados?" - Label29.Text = "El programa utiliza procesos en segundo plano para recopilar información completa de la imagen, como fechas de modificación, paquetes instalados, características presentes; y más" - Label40.Text = "Administre asociaciones de archivos para componentes de DISMTools" - Label43.Text = "Establezca las opciones que le gustaría realizar cuando el programa inicie:" - Label44.Text = "El programa usará el directorio temporal proporcionado por el proyecto si se cargó alguno. Si está en los modos de administración de instalaciones en línea o fuera de línea, el programa utilizará su directorio temporal" - Label45.Text = "Estilo del panel de progreso secundario:" - Label46.Text = "Estas configuraciones no son aplicables a instalaciones no portátiles" - Label47.Text = "Esta fuente podría no ser legible en ventanas de registro. Aunque todavía pueda utilizarla, le recomendamos fuentes monoespaciadas para una legibilidad aumentada." - Label48.Text = "Escoja las opciones que el programa debería considerar al guardar información de la imagen:" - Button1.Text = "Examinar..." - Button2.Text = "Ver versiones de componentes" - Button3.Text = "Examinar..." - Button4.Text = "Examinar..." - Button9.Text = "Establecer asociaciones" - Button10.Text = "Opciones avanzadas" - Cancel_Button.Text = "Cancelar" - OK_Button.Text = "Aceptar" - PrefReset.Text = "Restablecer preferencias" - CheckBox2.Text = "Realizar operaciones silenciosamente" - CheckBox3.Text = "Omitir reinicio del sistema" - CheckBox4.Text = "Usar un directorio temporal" - CheckBox5.Text = "Mostrar salida del programa en inglés" - CheckBox6.Text = "Notificarme cuando los procesos en segundo plano se hayan iniciado" - CheckBox7.Text = "Mostrar vista de registro en el panel de progreso por defecto" - CheckBox9.Text = "Usar menús en mayúscula" - CheckBox10.Text = "Crear registros para cada operación realizada automáticamente" - CheckBox11.Text = "Establecer iconos personalizados para proyectos de DISMTools" - CheckBox12.Text = "Remontar imágenes montadas que necesitan una recarga de su sesión de servicio" - CheckBox13.Text = "Comprobar actualizaciones" - CheckBox14.Text = "Siempre guardar información completa para los siguientes elementos:" - CheckBox15.Text = "Paquetes instalados" - CheckBox16.Text = "Características" - CheckBox17.Text = "Paquetes AppX instalados" - CheckBox18.Text = "Funcionalidades" - CheckBox19.Text = "Controladores instalados" - CheckBox22.Text = "Limpiar puntos de montaje automáticamente (inicia un proceso separado)" - DismOFD.Title = "Especifique el ejecutable de DISM a usar" - Label59.Text = "Personalización del registro" - Label60.Text = "Establezca las opciones que le gustaría realizar cuando el programa se cierra:" - Label61.Text = "Vista previa:" - Label9.Text = "Guardando información de la imagen" - LinkLabel1.Text = "El programa habilitará o deshabilitará algunas características atendiendo a lo que soporte la versión de DISM. ¿Cómo va a afectar esto mi uso del programa, y qué características serán deshabilitadas?" - LinkLabel1.LinkArea = New LinkArea(111, 88) - LinkLabel2.Text = "Conocer más sobre los procesos en segundo plano" - LogSFD.Title = "Especifique la ubicación del archivo de registro" - RadioButton3.Text = "Utilizar el directorio temporal del proyecto o del programa" - RadioButton4.Text = "Utilizar el directorio temporal especificado" - RadioButton5.Text = "Moderno" - RadioButton6.Text = "Clásico" - ScratchFBD.Description = "Especifique el directorio temporal que debería usar el programa:" - Label62.Text = "DynaLog proporciona un método para guardar registros de diagnóstico que pueden ser utilizados para ayudar a solucionar problemas del programa, en caso de que los encuentre. Puede desactivar el registro usando el interruptor de abajo, pero no es recomendable." & CrLf & CrLf & - "Desactive el registro solo si causa una sobrecarga de rendimiento en su equipo. Hacer clic en el interruptor aplicará esta configuración automáticamente." - Label63.Text = "Por defecto, los registros de operación se abren con el Bloc de notas en caso de un error de operación. Sin embargo, si desea abrirlos con un programa diferente, especifíquelo a continuación:" - Label64.Text = "Control de registro de DynaLog" - Label65.Text = "Editor con el que se abrirán archivos de registro:" - Label66.Text = "Editor del sistema" - Button5.Text = "Examinar..." - EditorOFD.Title = "Especifique el editor a usar" - LinkLabel3.Text = "Muéstrame dónde se guardan estos registros" - CheckBox20.Text = "Desactivar el registro de DynaLog" - Case 3 - Text = "Paramètres" - ImageTaskHeader1.ItemText = Text - Label49.Text = "Programme" - Label50.Text = "Personnalisation" - Label51.Text = "Journaux" - Label52.Text = "Opérations sur les images" - Label53.Text = "Répertoire temporaire" - Label54.Text = "Sortie du programme" - Label55.Text = "Processus en arrière plan" - Label57.Text = "Associations de fichiers" - Label58.Text = "Paramètres de démarrage" - Label34.Text = "Paramètres de fermeture" - Label2.Text = "Chemin d'accès à l'exécutable DISM :" - Label3.Text = "Version:" - Label5.Text = "Sauvegarder les paramètres sur :" - Label7.Text = "Mode couleur :" - Label8.Text = "Langue:" - 'Label9.Text = "Veuillez spécifier les paramètres de la fenêtre d'enregistrement :" - Label10.Text = "Fonte de la fenêtre du journal :" - Label11.Text = "Aperçu:" - Label12.Text = "Fichier journal des opérations :" - Label13.Text = "Lorsque vous effectuez des opérations sur les images dans la ligne de commande, spécifiez l'argument " & Quote & "/LogPath" & Quote & " pour sauvegarder le journal des opérations sur les images dans le fichier journal cible." - Label14.Text = "Niveau du fichier journal :" - Label18.Text = "Lors de l'exécution silencieuse d'une opération, le programme masquera les informations et la progression de l'opération. Les messages d'erreur seront toujours affichés." & CrLf & "Cette option ne sera pas utilisée pour obtenir des informations, par exemple, sur les paquets ou les caractéristiques." & CrLf & "En outre, lors de la maintenance de l'image, votre ordinateur peut redémarrer automatiquement." - Label19.Text = "Lorsque cette option est cochée, l'ordinateur ne redémarre pas automatiquement, même lorsqu'il effectue des opérations en silence." - Label20.Text = "Veuillez indiquer le répertoire temporaire à utiliser pour les opérations DISM :" - Label21.Text = "Répertoire temporaire:" - Label22.Text = "Espace restant sur le répertoire temporaire sélectionné :" - Label25.Text = "Vue du journal :" - Label26.Text = "Exemple de rapport :" - Label27.Text = "Certains rapports ne permettent pas d'être présentés sous forme de tableau." - Label28.Text = "Quand le programme doit-il vous avertir du démarrage de processus en arrière plan ?" - Label29.Text = "Le programme utilise des processus en arrière plan pour recueillir des informations complètes sur l'image, comme les dates de modification, les paquets installés, les caractéristiques présentes, etc." - Label40.Text = "Gérer les associations de fichiers pour les composants DISMTools :" - Label43.Text = "Définissez les options que vous souhaitez exécuter au démarrage du programme :" - Label44.Text = "Le programme utilisera le répertoire temporaire fourni par le projet s'il en existe un. Si vous êtes en les modes de gestion de l'installation en ligne ou hors ligne, le programme utilisera son répertoire temporaire." - Label45.Text = "Style du panneau de progression secondaire :" - Label46.Text = "Ces paramètres ne s'appliquent pas aux installations non portables." - Label47.Text = "Cette police peut ne pas être lisible sur les fenêtres logiques. Bien que vous puissiez encore l'utiliser, nous recommandons les polices monospaces pour une meilleure lisibilité." - Label48.Text = "Choisissez les paramètres que le programme doit prendre en compte lors de la sauvegarde des informations de l'image :" - Button1.Text = "Parcourir..." - Button2.Text = "Voir les versions des composants DISM" - Button3.Text = "Parcourir..." - Button4.Text = "Parcourir..." - Button9.Text = "Établir des associations de fichiers" - Button10.Text = "Paramètres avancés" - Cancel_Button.Text = "Annuler" - OK_Button.Text = "OK" - PrefReset.Text = "Réinitialiser les préférences" - CheckBox2.Text = "Effectuer des opérations d'image en silence" - CheckBox3.Text = "Sauter le redémarrage du système" - CheckBox4.Text = "Utiliser un répertoire temporaire" - CheckBox5.Text = "Afficher la sortie de la commande en anglais" - CheckBox6.Text = "M'avertir lorsque des processus en arrière plan ont démarré" - CheckBox7.Text = "Afficher par défaut la vue du journal dans le panneau de progression" - CheckBox9.Text = "Utiliser des menus en majuscules" - CheckBox10.Text = "Créer automatiquement des journaux pour chaque opération effectuée" - CheckBox11.Text = "Définir des icônes de fichiers personnalisés pour les projets DISMTools" - CheckBox12.Text = "Remonter les images montées nécessitant un rechargement de la session de maintenance" - CheckBox13.Text = "Mettre à jour les données" - CheckBox14.Text = "Sauvegardez toujours des informations complètes pour les éléments suivants :" - CheckBox15.Text = "Paquets installés" - CheckBox16.Text = "Caractéristiques" - CheckBox17.Text = "Paquets AppX installés" - CheckBox18.Text = "Capacités" - CheckBox19.Text = "Pilotes installés" - CheckBox22.Text = "Nettoyer automatiquement les points de montage (lance un processus séparé)" - DismOFD.Title = "Spécifier l'exécutable DISM à utiliser" - Label59.Text = "Personnalisation du journal" - Label60.Text = "Définissez les paramètres que vous souhaitez effectuer à la fermeture du programme :" - Label61.Text = "Aperçu :" - Label9.Text = "Sauvegarde des informations de l'image" - LinkLabel1.Text = "Le programme activera ou désactivera certaines caractéristiques en fonction de ce que la version de DISM prend en charge. Comment cela va-t-il affecter mon utilisation de ce programme, et quelles caractéristiques seront désactivées en conséquence ?" - LinkLabel1.LinkArea = New LinkArea(122, 126) - LinkLabel2.Text = "Savoir plus sur les processus en arrière plan" - LogSFD.Title = "Spécifier l'emplacement du fichier journal" - RadioButton3.Text = "Utiliser le répertoire temporaire du projet ou du programme" - RadioButton4.Text = "Utiliser le répertoire temporaire spécifié" - RadioButton5.Text = "Moderne" - RadioButton6.Text = "Classique" - ScratchFBD.Description = "Indiquez le répertoire temporaire que le programme doit utiliser :" - Label62.Text = "L'enregistrement DynaLog permet de sauvegarder des journaux de diagnostic qui peuvent être utilisés pour aider à résoudre des problèmes de programme, au cas où vous en rencontreriez. Vous pouvez désactiver l'enregistreur en utilisant la bascule ci-dessous, mais ce n'est pas recommandé." & CrLf & CrLf & - "Désactivez la journalisation uniquement si elle entraîne une surcharge de performance sur votre ordinateur. En cliquant sur la bascule, vous appliquerez automatiquement ce paramètre." - Label63.Text = "Par défaut, les journaux d'opération sont ouverts avec le Bloc-notes en cas d'erreur d'opération. Cependant, si vous souhaitez les ouvrir avec un autre programme, indiquez-le ci-dessous :" - Label64.Text = "Contrôle d'enregistrement DynaLog" - Label65.Text = "Editeur pour ouvrir les fichiers journaux avec :" - Label66.Text = "Editeur système" - Button5.Text = "Parcourir..." - EditorOFD.Title = "Spécifier l'éditeur à utiliser" - LinkLabel3.Text = "Montrez-moi où ces journaux sont stockés" - CheckBox20.Text = "Désactiver la journalisation DynaLog" - Case 4 - Text = "Opções" - ImageTaskHeader1.ItemText = Text - Label49.Text = "Programa" - Label50.Text = "Personalização" - Label51.Text = "Registos" - Label52.Text = "Operações de imagem" - Label53.Text = "Diretório temporário" - Label54.Text = "Saída do programa" - Label55.Text = "Processos em segundo plano" - Label57.Text = "Associações de ficheiros" - Label58.Text = "Opções de arranque" - Label34.Text = "Opções de encerramento" - Label2.Text = "Localização do executável DISM:" - Label3.Text = "Versão:" - Label5.Text = "Guardar configurações em:" - Label7.Text = "Modo de cor:" - Label8.Text = "Idioma:" - Label9.Text = "Especifique as configurações para a janela de registo:" - Label10.Text = "Tipo de letra da janela de registo:" - Label11.Text = "Pré-visualização:" - Label12.Text = "Ficheiro de registo de operações:" - Label13.Text = "Quando efetuar operações de imagem na linha de comandos, especifique o argumento " & Quote & "/LogPath" & Quote & " para guardar o registo da operação de imagem no ficheiro de registo de destino." - Label14.Text = "Nível do ficheiro de registo:" - Label18.Text = "Quando as operações são efectuadas em silêncio, o programa oculta as informações e o progresso. As mensagens de erro continuarão a ser mostradas." & CrLf & "Esta opção não será utilizada para obter informações sobre, por exemplo, pacotes ou funcionalidades." & CrLf & "Além disso, ao efetuar operações de imagem, o computador pode reiniciar-se automaticamente." - Label19.Text = "Se esta opção estiver selecionada, o computador não será reiniciado automaticamente, mesmo quando estiver a efetuar operações silenciosas" - Label20.Text = "Especifique o diretório de rascunho a utilizar para as operações DISM:" - Label21.Text = "Diretório de rascunho:" - Label22.Text = "Espaço restante no diretório de rascunho selecionado:" - Label25.Text = "Vista de registo:" - Label26.Text = "Exemplo de relatório:" - Label27.Text = "Alguns relatórios não permitem ser mostrados como uma tabela." - Label28.Text = "Quando é que o programa o deve notificar sobre os processos em segundo plano que estão a ser iniciados?" - Label29.Text = "O programa usa processos em segundo plano para reunir informações completas sobre a imagem, como datas de modificação, pacotes instalados, recursos presentes e muito mais" - Label40.Text = "Gerir associações de ficheiros para os componentes do DISMTools:" - Label43.Text = "Definir opções que gostaria de efetuar quando o programa arranca:" - Label44.Text = "O programa utilizará o diretório de rascunho fornecido pelo projeto, se tiver sido carregado um. Se estiver nos modos de gestão da instalação online ou offline, o programa utilizará o seu diretório de rascunho" - Label45.Text = "Estilo do painel de progresso secundário:" - Label46.Text = "Estas configurações não são aplicáveis a instalações não portáteis" - Label47.Text = "Este tipo de letra pode não ser legível em janelas de registo. Embora possa continuar a utilizá-lo, recomendamos tipos de letra monoespaçados para uma maior legibilidade." - Label48.Text = "Escolha as configurações que o programa deve considerar quando guardar informações de imagem:" - Button1.Text = "Navegar..." - Button2.Text = "Ver versões de componentes DISM" - Button3.Text = "Navegar..." - Button4.Text = "Navegar..." - Button9.Text = "Configurar associações de ficheiros" - Button10.Text = "Configurações avançadas" - Cancel_Button.Text = "Cancelar" - OK_Button.Text = "OK" - PrefReset.Text = "Repor preferências" - CheckBox2.Text = "Efetuar operações de imagem silenciosamente" - CheckBox3.Text = "Ignorar o reinício do sistema" - CheckBox4.Text = "Utilizar um diretório de rascunho" - CheckBox5.Text = "Mostrar a saída do comando em inglês" - CheckBox6.Text = "Notificar-me quando os processos em segundo plano tiverem iniciado" - CheckBox7.Text = "Mostrar a vista de registo no painel de progresso por predefinição" - CheckBox9.Text = "Utilizar menus em maiúsculas" - CheckBox10.Text = "Criar automaticamente registos para cada operação realizada" - CheckBox11.Text = "Configurar ícones de ficheiros personalizados para projectos DISMTools" - CheckBox12.Text = "Remontar imagens montadas que necessitem de um recarregamento da sessão de manutenção" - CheckBox13.Text = "Verificar se há actualizações" - CheckBox14.Text = "Guardar sempre informações completas sobre os seguintes elementos:" - CheckBox15.Text = "Pacotes instalados" - CheckBox16.Text = "Características" - CheckBox17.Text = "Pacotes AppX instalados" - CheckBox18.Text = " Capacidades" - CheckBox19.Text = "Controladores instalados" - CheckBox22.Text = "Limpar automaticamente os pontos de montagem (inicia um processo separado)" - DismOFD.Title = "Especificar o executável DISM a utilizar" - Label59.Text = "Personalização do registo" - Label60.Text = "Configurar as opções que gostaria de executar quando o programa fecha:" - Label61.Text = "Pré-visualização:" - Label9.Text = "Guardar informação da imagem" - LinkLabel1.Text = "O programa irá ativar ou desativar determinadas funcionalidades de acordo com o que a versão DISM suporta. Como é que isso vai afetar a minha utilização deste programa e que funcionalidades serão desactivadas em conformidade?" - LinkLabel1.LinkArea = New LinkArea(107, 118) - LinkLabel2.Text = "Saiba mais sobre os processos em segundo plano" - LogSFD.Title = "Especificar a localização do ficheiro de registo" - RadioButton3.Text = "Utilizar o diretório de rascunho do projeto ou do programa" - RadioButton4.Text = "Utilizar o diretório de rascunho especificado" - RadioButton5.Text = "Moderna" - RadioButton6.Text = "Clássico" - ScratchFBD.Description = "Especificar o diretório de rascunho que o programa deve utilizar:" - Label62.Text = "O registo DynaLog fornece um método para guardar registos de diagnóstico que podem ser utilizados para ajudar a corrigir problemas do programa, caso os encontre. Pode desativar o registo utilizando o botão abaixo, mas não é recomendado." & CrLf & CrLf & - "Desactive o registo apenas se este causar uma sobrecarga de desempenho no seu computador. Se clicar no botão de alternância, esta definição será aplicada automaticamente." - Label63.Text = "Por predefinição, os registos de operações são abertos com o Bloco de Notas em caso de erro de operação. No entanto, se pretender abri-los com um programa diferente, especifique-o abaixo:" - Label64.Text = "Controlo de registo DynaLog" - Label65.Text = "Editor para abrir ficheiros de registo com:" - Label66.Text = "Editor do sistema" - Button5.Text = "Procurar..." - EditorOFD.Title = "Especificar o editor a utilizar" - LinkLabel3.Text = "Mostre-me onde estes registos estão armazenados" - CheckBox20.Text = "Desativar o registo DynaLog" - Case 5 - Text = "Opzioni" - ImageTaskHeader1.ItemText = Text - Label49.Text = "Programma" - Label50.Text = "Personalizzazione" - Label51.Text = "Registri" - Label52.Text = "Operazioni di immagine" - Label53.Text = "Cartella temporanea" - Label54.Text = "Output del programma" - Label55.Text = "Processi in secondo piano" - Label57.Text = "Associazioni di file" - Label58.Text = "Opzioni di avvio" - Label34.Text = "Opzioni di spegnimento" - Label2.Text = "Percorso eseguibile DISM:" - Label3.Text = "Versione:" - Label5.Text = "Salva impostazioni su:" - Label7.Text = "Modalità colore:" - Label8.Text = "Lingua:" - Label9.Text = "Specificare le impostazioni per la finestra di log:" - Label10.Text = "Carattere della finestra di registro:" - Label11.Text = "Anteprima:" - Label12.Text = "File registro operazioni:" - Label13.Text = "Quando si eseguono operazioni di immagine nella riga di comando, specificare l'argomento " & Quote & "/LogPath" & Quote & " per salvare il registro delle operazioni di immagine nel file di registro di destinazione" - Label14.Text = "Livello del file di registro:" - Label18.Text = "Quando si eseguono tranquillamente le operazioni, il programma nasconde le informazioni e l'output di avanzamento. I messaggi di errore verranno comunque visualizzati." & CrLf & "Questa opzione non verrà utilizzata quando si ottengono informazioni, ad esempio, sui pacchetti o sulle funzioni." & CrLf & "Inoltre, quando si esegue la manutenzione delle immagini, il computer potrebbe riavviarsi automaticamente." - Label19.Text = "Quando questa opzione è selezionata, il computer non si riavvia automaticamente, anche quando si eseguono tranquillamente delle operazioni" - Label20.Text = "Specificare la cartella temporanea da utilizzare per le operazioni DISM:" - Label21.Text = "Cartella temporanea:" - Label22.Text = "Spazio rimanente nella cartella temporanea selezionata:" - Label25.Text = "Visualizzazione del registro:" - Label26.Text = "Esempio di rapporto:" - Label27.Text = "Alcuni rapporti non possono essere visualizzati come tabella" - Label28.Text = "Quando il programma dovrebbe notificare l'avvio dei processi in background?" - Label29.Text = "Il programma utilizza i processi in background per raccogliere informazioni complete sull'immagine, come le date di modifica, i pacchetti installati, le funzioni presenti e altro ancora" - Label40.Text = "Gestisci le associazioni dei file per i componenti di DISMTools:" - Label43.Text = "Impostare le opzioni che si desidera eseguire all'avvio del programma:" - Label44.Text = "Il programma utilizzerà la cartella temporanea fornita dal progetto, se ne è stata caricata una. Se ci si trova nelle modalità di gestione dell'installazione online o offline, il programma utilizzerà la sua directory scratch" - Label45.Text = "Stile del pannello di avanzamento secondario:" - Label46.Text = "Queste impostazioni non sono applicabili alle installazioni non portatili" - Label47.Text = "Questo carattere potrebbe non essere leggibile sulle finestre di registro. Anche se è possibile utilizzarlo, si consiglia di utilizzare caratteri monospaziati per una maggiore leggibilità." - Label48.Text = "Scegliere le impostazioni che il programma deve considerare quando salva le informazioni sull'immagine:" - Button1.Text = "Sfoglia..." - Button2.Text = "Visualizza le versioni dei componenti DISM" - Button3.Text = "Sfoglia..." - Button4.Text = "Sfoglia..." - Button9.Text = "Imposta associazioni file" - Button10.Text = "Impostazioni avanzate" - Cancel_Button.Text = "Annulla" - OK_Button.Text = "OK" - PrefReset.Text = "Reimpostare le preferenze" - CheckBox2.Text = "Esegui silenziosamente le operazioni sull'immagine" - CheckBox3.Text = "Salta il riavvio del sistema" - CheckBox4.Text = "Utilizza una directory scratch" - CheckBox5.Text = "Visualizza l'output del comando in inglese" - CheckBox6.Text = "Notifica l'avvio di processi in background" - CheckBox7.Text = "Abilita la visualizzazione del registro nel pannello di avanzamento per impostazione predefinita" - CheckBox9.Text = "Utilizza i menu in maiuscolo" - CheckBox10.Text = "Crea automaticamente i registri per ogni operazione eseguita" - CheckBox11.Text = "Imposta icone di file personalizzate per i progetti DISMTools" - CheckBox12.Text = "Rimonta le immagini montate che necessitano di un ricaricamento della sessione di assistenza" - CheckBox13.Text = "Controlla gli aggiornamenti" - CheckBox14.Text = "Salva sempre le informazioni complete per i seguenti elementi:" - CheckBox15.Text = "Pacchetti installati" - CheckBox16.Text = "Funzionalità" - CheckBox17.Text = "Pacchetti AppX installati" - CheckBox18.Text = "Capacità" - CheckBox19.Text = "Driver installati" - CheckBox22.Text = "Pulisci automaticamente i punti di montaggio (lancia un processo separato)" - DismOFD.Title = "Specificare l'eseguibile DISM da utilizzare" - Label59.Text = "Personalizzazione dei registri" - Label60.Text = "Impostare le opzioni che si desidera eseguire alla chiusura del programma:" - Label61.Text = "Anteprima:" - Label9.Text = "Salvataggio delle informazioni sull'immagine" - LinkLabel1.Text = "Il programma abilita o disabilita alcune funzioni in base alla versione di DISM supportata. Come influirà sull'uso di questo programma e quali funzioni saranno disabilitate di conseguenza?" - LinkLabel1.LinkArea = New LinkArea(92, 100) - LinkLabel2.Text = "Ulteriori informazioni sui processi in background" - LogSFD.Title = "Specificare la posizione del file di log" - RadioButton3.Text = "Utilizza la cartella temporanea del progetto o del programma" - RadioButton4.Text = "Utilizza la cartella temporanea specificata" - RadioButton5.Text = "Moderno" - RadioButton6.Text = "Classic" - ScratchFBD.Description = "Specifica la directory di scratch che il programma deve utilizzare:" - Label62.Text = "La registrazione DynaLog fornisce un metodo per salvare i registri diagnostici che possono essere utilizzati per risolvere i problemi del programma, nel caso in cui si verifichino. È possibile disattivare il logger utilizzando la levetta sottostante, ma non è consigliabile." & CrLf & CrLf & - "Disattivare il logging solo se causa un sovraccarico di prestazioni sul computer. Facendo clic sulla levetta, questa impostazione verrà applicata automaticamente." - Label63.Text = "Per impostazione predefinita, i registri delle operazioni vengono aperti con il Blocco note in caso di errore. Tuttavia, se si desidera aprirli con un altro programma, specificarlo di seguito:" - Label64.Text = "Controllo di registrazione DynaLog" - Label65.Text = "Editor con cui aprire i file di log:" - Label66.Text = "Editor di sistema" - Button5.Text = "Sfoglia..." - EditorOFD.Title = "Specificare l'editor da usare" - LinkLabel3.Text = "Mostrami dove sono archiviati i registri" - CheckBox20.Text = "Disabilita la registrazione di DynaLog" - End Select - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - SaveLocations(0) = "Settings file" - SaveLocations(1) = "Registry" - ColorModes(0) = "Use system setting" - ColorModes(1) = "Light mode" - ColorModes(2) = "Dark mode" - Languages(0) = "Use system language" - Languages(1) = "English" - Languages(2) = "Spanish" - Languages(3) = "French" - Languages(4) = "Portuguese" - Languages(5) = "Italian" - LogViews(0) = "list" - LogViews(1) = "table" - NotFreqs(0) = "Every time a project has been loaded successfully" - NotFreqs(1) = "Once" - Case "ESN" - SaveLocations(0) = "Archivo de configuración" - SaveLocations(1) = "Registro" - ColorModes(0) = "Usar configuración del sistema" - ColorModes(1) = "Modo claro" - ColorModes(2) = "Modo oscuro" - Languages(0) = "Usar idioma del sistema" - Languages(1) = "Inglés" - Languages(2) = "Español" - Languages(3) = "Francés" - Languages(4) = "Portugués" - Languages(5) = "Italiano" - LogViews(0) = "lista" - LogViews(1) = "tabla" - NotFreqs(0) = "Cada vez que un proyecto ha sido cargado satisfactoriamente" - NotFreqs(1) = "Una vez" - Case "FRA" - SaveLocations(0) = "Fichier des paramètres" - SaveLocations(1) = "Registre" - ColorModes(0) = "Utiliser les paramètres du système" - ColorModes(1) = "Mode lumineux" - ColorModes(2) = "Mode sombre" - Languages(0) = "Utiliser le langage du système" - Languages(1) = "Anglais" - Languages(2) = "Espagnol" - Languages(3) = "Français" - Languages(4) = "Portugais" - Languages(5) = "Italien" - LogViews(0) = "liste" - LogViews(1) = "tableau" - NotFreqs(0) = "Chaque fois qu'un projet a été chargé avec succès" - NotFreqs(1) = "Une fois" - Case "PTB", "PTG" - SaveLocations(0) = "Ficheiro de configurações" - SaveLocations(1) = "Registo" - ColorModes(0) = "Utilizar a configuração do sistema" - ColorModes(1) = "Modo claro" - ColorModes(2) = "Modo escuro" - Languages(0) = "Utilizar o idioma do sistema" - Languages(1) = "Inglês" - Languages(2) = "Espanhol" - Languages(3) = "Francês" - Languages(4) = "Português" - Languages(5) = "Italiano" - LogViews(0) = "lista" - LogViews(1) = "tabela" - NotFreqs(0) = "Sempre que um projeto tenha sido carregado com êxito" - NotFreqs(1) = "Uma vez" - Case "ITA" - SaveLocations(0) = "File impostazioni" - SaveLocations(1) = "Registro di sistema" - ColorModes(0) = "Usa le impostazioni di sistema" - ColorModes(1) = "Modalità chiara" - ColorModes(2) = "Modalità scura" - Languages(0) = "Usa la lingua di sistema" - Languages(1) = "Inglese" - Languages(2) = "Spagnolo" - Languages(3) = "Francese" - Languages(4) = "Portoghese" - Languages(5) = "Italiano" - LogViews(0) = "lista" - LogViews(1) = "tabella" - NotFreqs(0) = "Ogni volta che un progetto è stato caricato correttamente" - NotFreqs(1) = "Una volta" - End Select - Case 1 - SaveLocations(0) = "Settings file" - SaveLocations(1) = "Registry" - ColorModes(0) = "Use system setting" - ColorModes(1) = "Light mode" - ColorModes(2) = "Dark mode" - Languages(0) = "Use system language" - Languages(1) = "English" - Languages(2) = "Spanish" - Languages(3) = "French" - Languages(4) = "Portuguese" - Languages(5) = "Italian" - LogViews(0) = "list" - LogViews(1) = "table" - NotFreqs(0) = "Every time a project has been loaded successfully" - NotFreqs(1) = "Once" - Case 2 - SaveLocations(0) = "Archivo de configuración" - SaveLocations(1) = "Registro" - ColorModes(0) = "Usar configuración del sistema" - ColorModes(1) = "Modo claro" - ColorModes(2) = "Modo oscuro" - Languages(0) = "Usar idioma del sistema" - Languages(1) = "Inglés" - Languages(2) = "Español" - Languages(3) = "Francés" - Languages(4) = "Portugués" - Languages(5) = "Italiano" - LogViews(0) = "lista" - LogViews(1) = "tabla" - NotFreqs(0) = "Cada vez que un proyecto ha sido cargado satisfactoriamente" - NotFreqs(1) = "Una vez" - Case 3 - SaveLocations(0) = "Fichier des paramètres" - SaveLocations(1) = "Registre" - ColorModes(0) = "Utiliser les paramètres du système" - ColorModes(1) = "Mode lumineux" - ColorModes(2) = "Mode sombre" - Languages(0) = "Utiliser le langage du système" - Languages(1) = "Anglais" - Languages(2) = "Espagnol" - Languages(3) = "Français" - Languages(4) = "Portugais" - Languages(5) = "Italien" - LogViews(0) = "liste" - LogViews(1) = "tableau" - NotFreqs(0) = "Chaque fois qu'un projet a été chargé avec succès" - NotFreqs(1) = "Une fois" - Case 4 - SaveLocations(0) = "Ficheiro de configurações" - SaveLocations(1) = "Registo" - ColorModes(0) = "Utilizar a configuração do sistema" - ColorModes(1) = "Modo claro" - ColorModes(2) = "Modo escuro" - Languages(0) = "Utilizar o idioma do sistema" - Languages(1) = "Inglês" - Languages(2) = "Espanhol" - Languages(3) = "Francês" - Languages(4) = "Português" - Languages(5) = "Italiano" - LogViews(0) = "lista" - LogViews(1) = "tabela" - NotFreqs(0) = "Sempre que um projeto tenha sido carregado com êxito" - NotFreqs(1) = "Uma vez" - Case 5 - SaveLocations(0) = "File delle impostazioni" - SaveLocations(1) = "Registro di sistema" - ColorModes(0) = "Usa le impostazioni di sistema" - ColorModes(1) = "Modalità chiara" - ColorModes(2) = "Modalità scura" - Languages(0) = "Utilizza la lingua di sistema" - Languages(1) = "Inglese" - Languages(2) = "Spagnolo" - Languages(3) = "Francese" - Languages(4) = "Portoghese" - Languages(5) = "Italiano" - LogViews(0) = "lista" - LogViews(1) = "tabella" - NotFreqs(0) = "Ogni volta che un progetto è stato caricato con successo" - NotFreqs(1) = "Una volta" - End Select + Text = LocalizationService.ForSection("Options")("Title.Label") + ImageTaskHeader1.ItemText = Text + Label49.Text = LocalizationService.ForSection("Options")("Program.Label") + Label50.Text = LocalizationService.ForSection("Options")("Personalization.Label") + Label51.Text = LocalizationService.ForSection("Options")("Logs.Label") + Label52.Text = LocalizationService.ForSection("Options")("ImageOperations.Label") + Label53.Text = LocalizationService.ForSection("Options")("ScratchDirectory.Label") + Label54.Text = LocalizationService.ForSection("Options")("ProgramOutput.Label") + Label55.Text = LocalizationService.ForSection("Options")("BgProcesses.Label") + Label57.Text = LocalizationService.ForSection("Options")("FileAssociations.Label") + Label58.Text = LocalizationService.ForSection("Options")("StartupOptions.Label") + Label34.Text = LocalizationService.ForSection("Options")("ShutdownOptions.Label") + Label2.Text = LocalizationService.ForSection("Options")("Dismexecutable.Path.Label") + Label3.Text = LocalizationService.ForSection("Options")("Version.Label") + Label5.Text = LocalizationService.ForSection("Options")("SaveSettings.Label") + Label7.Text = LocalizationService.ForSection("Options")("ColorMode.Label") + Label8.Text = LocalizationService.ForSection("Options")("Language.Label") + Label9.Text = LocalizationService.ForSection("Options")("Settings.Log.Required.Label") + Label10.Text = LocalizationService.ForSection("Options")("Log.Window.Font.Label") + Label11.Text = LocalizationService.ForSection("Options")("Preview.Label") + Label12.Text = LocalizationService.ForSection("Options")("Operation.Log.File.Label") + Label13.Text = LocalizationService.ForSection("Options")("Image.Ops.Message") + Label14.Text = LocalizationService.ForSection("Options")("Log.File.Level.Label") + Label18.Text = LocalizationService.ForSection("Options")("QuietOperations.Message") + Label19.Text = LocalizationService.ForSection("Options")("Checked.Computer.Message") + Label20.Text = LocalizationService.ForSection("Options")("Scratch.Dir.Required.Label") + Label21.Text = LocalizationService.ForSection("Options")("ScratchDirectory.Input.Label") + Label22.Text = LocalizationService.ForSection("Options")("Space.Left.Selected.Label") + Label25.Text = LocalizationService.ForSection("Options")("LogView.Label") + Label26.Text = LocalizationService.ForSection("Options")("ExampleReport.Label") + Label27.Text = LocalizationService.ForSection("Options")("Reports.Allow.Shown.Label") + Label28.Text = LocalizationService.ForSection("Options")("Notify.Label") + Label29.Text = LocalizationService.ForSection("Options")("Uses.Bg.Procs.Message") + Label40.Text = LocalizationService.ForSection("Options")("Manage.File.Assoc.Label") + Label43.Text = LocalizationService.ForSection("Options")("Behavior.OnStartup.Label") + Label44.Text = LocalizationService.ForSection("Options")("Scratch.Dir.Message") + Label45.Text = LocalizationService.ForSection("Options")("Secondary.Progress.Label") + Label46.Text = LocalizationService.ForSection("Options")("Settings.Aren.Label") + Label47.Text = LocalizationService.ForSection("Options")("Font.Readable.Log.Message") + Label48.Text = LocalizationService.ForSection("Options")("SettingsConsider.Label") + Button1.Text = LocalizationService.ForSection("Options")("Browse.Button") + Button2.Text = LocalizationService.ForSection("Options")("View.DISM.Button") + Button3.Text = LocalizationService.ForSection("Options")("Browse.Button") + Button4.Text = LocalizationService.ForSection("Options")("Browse.Button") + Button9.Text = LocalizationService.ForSection("Options")("Set.File.Assoc.Button") + Button10.Text = LocalizationService.ForSection("Options")("AdvancedSettings.Button") + Cancel_Button.Text = LocalizationService.ForSection("Options")("Cancel.Button") + OK_Button.Text = LocalizationService.ForSection("Options")("Ok.Button") + PrefReset.Text = LocalizationService.ForSection("Options")("ResetPreferences.Label") + CheckBox2.Text = LocalizationService.ForSection("Options")("Quietly.Image.Ops.CheckBox") + CheckBox3.Text = LocalizationService.ForSection("Options")("Skip.System.Restart.CheckBox") + CheckBox4.Text = LocalizationService.ForSection("Options")("Scratch.Dir.CheckBox") + CheckBox5.Text = LocalizationService.ForSection("Options")("Show.Command.Output.CheckBox") + CheckBox6.Text = LocalizationService.ForSection("Options")("Notify.Me.CheckBox") + CheckBox7.Text = LocalizationService.ForSection("Options")("Show.Log.View.CheckBox") + CheckBox9.Text = LocalizationService.ForSection("Options")("Uppercase.Menus.CheckBox") + CheckBox10.Text = LocalizationService.ForSection("Options")("Auto.Create.Logs.CheckBox") + CheckBox11.Text = LocalizationService.ForSection("Options")("Set.Custom.File.CheckBox") + CheckBox12.Text = LocalizationService.ForSection("Options")("Remount.Mounted.CheckBox") + CheckBox13.Text = LocalizationService.ForSection("Options")("CheckUpdates.CheckBox") + CheckBox14.Text = LocalizationService.ForSection("Options")("Always.Save.CheckBox") + CheckBox15.Text = LocalizationService.ForSection("Options")("Installed.Packages.CheckBox") + CheckBox16.Text = LocalizationService.ForSection("Options")("Features.CheckBox") + CheckBox17.Text = LocalizationService.ForSection("Options")("Installed.AppX.CheckBox") + CheckBox18.Text = LocalizationService.ForSection("Options")("Capabilities.CheckBox") + CheckBox19.Text = LocalizationService.ForSection("Options")("InstalledDrivers.CheckBox") + CheckBox22.Text = LocalizationService.ForSection("Options")("Automatically.Clean.CheckBox") + DismOFD.Title = LocalizationService.ForSection("Options")("Dismexecutable.Title") + Label59.Text = LocalizationService.ForSection("Options")("LogCustomization.Label") + Label60.Text = LocalizationService.ForSection("Options")("Behavior.OnClose.Label") + Label61.Text = LocalizationService.ForSection("Options")("Preview.Label") + Label9.Text = LocalizationService.ForSection("Options")("Saving.Image.Item") + LinkLabel1.Text = LocalizationService.ForSection("Options")("Enable.Disable.Message") + LinkLabel1.LinkArea = LocalizationService.GetLinkArea(LinkLabel1.Text, LocalizationService.ForSection("Options")("Going.Affect.My")) + LinkLabel2.Text = LocalizationService.ForSection("Options")("Learn.Background.Link") + LogSFD.Title = LocalizationService.ForSection("Options")("Location.Log.File.Title") + RadioButton3.Text = LocalizationService.ForSection("Options")("Project.Scratch.RadioButton") + RadioButton4.Text = LocalizationService.ForSection("Options")("Custom.Scratch.RadioButton") + RadioButton5.Text = LocalizationService.ForSection("Options")("Modern.RadioButton") + RadioButton6.Text = LocalizationService.ForSection("Options")("Classic.RadioButton") + ScratchFBD.Description = LocalizationService.ForSection("Options")("ScratchDir.Description") + Label62.Text = LocalizationService.ForSection("Options")("Dyna.Log.Logging.Message") & LocalizationService.ForSection("Options")("Disable.Logging.Only.Message") + Label63.Text = LocalizationService.ForSection("Options")("Default.Op.Logs.Message") + Label64.Text = LocalizationService.ForSection("Options")("Dyna.Log.Logging.Label") + Label65.Text = LocalizationService.ForSection("Options")("Editor.Open.Log.Label") + Label66.Text = LocalizationService.ForSection("Options")("SystemEditor.Label") + Button5.Text = LocalizationService.ForSection("Options")("Browse.Button") + EditorOFD.Title = LocalizationService.ForSection("Options")("Editor.Title") + LinkLabel3.Text = LocalizationService.ForSection("Options")("Show.Me.Logs.Link") + LogPreview.Text = LocalizationService.ForSection("Options.LogPreview")("Packages.Add.Message") + ApplySecondaryProgressPreview() + CheckBox20.Text = LocalizationService.ForSection("Options")("Disable.Dyna.Log.CheckBox") + + Dim DesignerOptions = LocalizationService.ForSection("Designer.Options") + DismOFD.Filter = DesignerOptions("DISM.Executable.Filter") + LogSFD.Filter = DesignerOptions("LogSFD.Filter") + EditorOFD.Filter = DesignerOptions("ProgramsEXE.Filter") + DTSSEditAssocCB.Text = DesignerOptions("Open.Starter.Scripts.Label") + DTProjAssocCB.Text = DesignerOptions("Open.My.Projects.Label") + LinkLabel4.Text = DesignerOptions("Difference.Between.Link") + Label72.Text = DesignerOptions("PackageName.Label") + Label73.Text = DesignerOptions("RaymanJungle.Label") + Label74.Text = DesignerOptions("DisplayName.Label") + Label71.Text = DesignerOptions("Example.Label") + Label70.Text = DesignerOptions("Remove.AppX.Label") + Label32.Text = DesignerOptions("Only.Available.Message") + CheckBox23.Text = DesignerOptions("Map.System.Accounts.CheckBox") + CheckBox1.Text = DesignerOptions("Show.Dates.Human.CheckBox") + CheckBox8.Text = DesignerOptions("PreventSleep.CheckBox") + LinkLabel5.Text = DesignerOptions("Help.Me.Understand.Link") + Label76.Text = DesignerOptions("AIFeature.Label") + Label69.Text = DesignerOptions("Search.Engine.Web.Label") + Label67.Text = DesignerOptions("Searching.Image.Online.Label") + Label68.Text = DesignerOptions("Learn.Message") + Button14.Text = DesignerOptions("RunNow.Button") + Button7.Text = DesignerOptions("InstallService.Button") + Button11.Text = DesignerOptions("EnableService.Button") + Button12.Text = DesignerOptions("DisableService.Button") + Button13.Text = DesignerOptions("DeleteService.Button") + GroupBox2.Text = DesignerOptions("ServiceStatus.Group") + Label79.Text = DesignerOptions("Installed.Label") + Label81.Text = DesignerOptions("InstallationPath.Label") + Label77.Text = DesignerOptions("Automatic.Image.Reload.Label") + Label83.Text = DesignerOptions("Still.See.Standard.Message") + Label78.Text = DesignerOptions("Automatic.Image.Message") + GroupBox1.Text = DesignerOptions("ColorThemes.Group") + Button6.Text = DesignerOptions("DesignThemes.Button") + Label30.Text = DesignerOptions("LightMode.Label") + Label33.Text = DesignerOptions("Own.Themes.Label") + Label31.Text = DesignerOptions("Change.Color.Theme.Label") + Label17.Text = DesignerOptions("DarkMode.Label") + CheckBox21.Text = DesignerOptions("Show.Date.Time.CheckBox") + CheckBox24.Text = DesignerOptions("Set.Custom.CheckBox") + + SaveLocations(0) = LocalizationService.ForSection("Options")("SettingsFile.Item") + SaveLocations(1) = LocalizationService.ForSection("Options")("Registry.Item") + ColorModes(0) = LocalizationService.ForSection("Options")("System.Setting.Item") + ColorModes(1) = LocalizationService.ForSection("Options")("LightMode.Item") + ColorModes(2) = LocalizationService.ForSection("Options")("DarkMode.Item") + LogViews(0) = LocalizationService.ForSection("Options")("List.Item") + LogViews(1) = LocalizationService.ForSection("Options")("Table.Item") + NotFreqs(0) = LocalizationService.ForSection("Options")("Every.Time.Project.Item") + NotFreqs(1) = LocalizationService.ForSection("Options")("Freqs1.Item") ComboBox1.Items.AddRange(SaveLocations) ComboBox2.Items.AddRange(ColorModes) - ComboBox3.Items.AddRange(Languages) + PopulateLanguageComboBox(ComboBox3, selectedLanguageCode) ComboBox5.Items.AddRange(LogViews) ComboBox6.Items.AddRange(NotFreqs) ComboBox7.Items.AddRange(SearchEngineHelper.GetAllSearchEngines().Select(Function(engine) engine.Name).ToArray()) DynaLog.LogMessage("Checking if portable marker exists...") If File.Exists(Application.StartupPath & "\portable") Then ComboBox1.Items.RemoveAt(1) + RestoreComboBoxIndex(ComboBox1, selectedSaveLocation) + RestoreComboBoxIndex(ComboBox2, selectedColorMode) + PopulateLanguageComboBox(ComboBox3, selectedLanguageCode) + RestoreComboBoxIndex(ComboBox5, selectedLogView) + RestoreComboBoxIndex(ComboBox6, selectedNotificationFrequency) + If selectedSearchEngine IsNot Nothing AndAlso ComboBox7.Items.Contains(selectedSearchEngine) Then + ComboBox7.SelectedItem = selectedSearchEngine + End If + Finally + isApplyingLocalizedText = False + End Try + End Sub + + Private Sub Options_Load(sender As Object, e As EventArgs) Handles MyBase.Load + originalLanguage = LocalizationService.NormalizeCultureCode(MainForm.LanguageCode) + ApplyLocalizedText() + DynaLog.LogMessage("Getting system fonts...") GetSystemFonts() ' Set default values before loading custom ones @@ -1509,6 +907,8 @@ Public Class Options LightThemesCB.ForeColor = CurrentTheme.ForegroundColor NumericUpDown1.BackColor = CurrentTheme.SectionBackgroundColor NumericUpDown1.ForeColor = CurrentTheme.ForegroundColor + NumericUpDown2.BackColor = CurrentTheme.SectionBackgroundColor + NumericUpDown2.ForeColor = CurrentTheme.ForegroundColor GroupBox1.ForeColor = CurrentTheme.ForegroundColor GroupBox2.ForeColor = CurrentTheme.ForegroundColor TrackBar1.BackColor = CurrentTheme.SectionBackgroundColor @@ -1581,7 +981,7 @@ Public Class Options Case 2 ComboBox2.SelectedIndex = 2 End Select - ComboBox3.SelectedIndex = MainForm.Language + PopulateLanguageComboBox(ComboBox3, MainForm.LanguageCode) ComboBox4.Text = MainForm.LogFont NumericUpDown1.Value = MainForm.LogFontSize If MainForm.LogFontIsBold Then @@ -1669,37 +1069,46 @@ Public Class Options ComboBox8.SelectedIndex = MainForm.AppxDisplayNameFormatOnRemoval CheckBox8.Checked = MainForm.PreventSystemFromSleeping CheckBox1.Checked = MainForm.HumanizeDates + CheckBox25.Checked = MainForm.LockUnlockedVolumes + + NumericUpDown2.Value = MainForm.PEHelper_MaxConcurrentISO + End Sub + + Private Sub ComboBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox3.SelectedIndexChanged + If isInitializingForm OrElse isApplyingLocalizedText Then Return + If ComboBox3.SelectedIndex < 0 Then Return + + Dim previousLanguageCode As String = MainForm.LanguageCode + Dim selectedLanguageCode As String = GetSelectedLanguageCode(ComboBox3, previousLanguageCode) + Dim validationMessage As String = "" + If Not LocalizationService.ValidateLanguage(selectedLanguageCode, validationMessage) Then + MessageBox.Show(validationMessage, + "Incompatible or invalid DISMTools language file", + MessageBoxButtons.OK, + MessageBoxIcon.Error) + isApplyingLocalizedText = True + Try + PopulateLanguageComboBox(ComboBox3, previousLanguageCode) + Finally + isApplyingLocalizedText = False + End Try + Return + End If + + MainForm.LanguageCode = selectedLanguageCode + LocalizationService.SetLanguageByCultureCode(MainForm.LanguageCode) + ApplyLocalizedText() + MainForm.ApplyLanguage(MainForm.LanguageCode) + ChangeSections(SectionNum) + ImageTaskHeader1.ItemText = Text End Sub Private Sub ComboBox5_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox5.SelectedIndexChanged Select Case ComboBox5.SelectedIndex Case 0 - TextBox4.Text = "Image Version: 10.0.19045.2075" & CrLf & CrLf & _ - "Features listing for package : Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~10.0.19041.1" & CrLf & CrLf & _ - "Feature Name : TFTP" & CrLf & _ - "State : Disabled" & CrLf & CrLf & _ - "Feature Name : LegacyComponents" & CrLf & _ - "State : Enabled" & CrLf & CrLf & _ - "Feature Name : DirectPlay" & CrLf & _ - "State : Enabled" & CrLf & CrLf & _ - "Feature Name : SimpleTCP" & CrLf & _ - "State : Disabled" & CrLf & CrLf & _ - "Feature Name : Windows-Identity-Foundation" & CrLf & _ - "State : Disabled" & CrLf & CrLf & _ - "Feature Name : NetFx3" & CrLf & _ - "State : Enabled" + TextBox4.Text = LocalizationService.ForSection("Options")("Image.Version.Message") Case 1 - TextBox4.Text = "Image Version: 10.0.19045.2075" & CrLf & CrLf & _ - "Features listing for package : Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~10.0.19041.1" & CrLf & CrLf & CrLf & _ - "------------------------------------------- | --------" & CrLf & _ - "Feature Name | State" & CrLf & _ - "------------------------------------------- | --------" & CrLf & _ - "TFTP | Disabled" & CrLf & _ - "LegacyComponents | Enabled" & CrLf & _ - "DirectPlay | Enabled" & CrLf & _ - "SimpleTCP | Disabled" & CrLf & _ - "Windows-Identity-Foundation | Disabled" & CrLf & _ - "NetFx3 | Enabled" + TextBox4.Text = LocalizationService.ForSection("Options")("LogPreview.Message") End Select End Sub @@ -1741,31 +1150,7 @@ Public Class Options If Not Directory.Exists(Path.Combine(Path.GetDirectoryName(TextBox1.Text), "dism")) Then DynaLog.LogMessage("Said folder does not exist on the file system.") Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "The DISM components directory could not be found. If you have all components in the same folder of the DISM executable, please create a " & Quote & "dism" & Quote & " folder and try again." - Case "ESN" - msg = "La carpeta de componentes de DISM no pudo ser encontrada. Si tiene todos los componentes en la misma carpeta del ejecutable de DISM, cree una carpeta " & Quote & "dism" & Quote & " e inténtelo de nuevo." - Case "FRA" - msg = "Le répertoire des composants DISM n'a pas été trouvé. Si vous avez tous les composants dans le même dossier de l'exécutable DISM, veuillez créer un dossier " & Quote & "dism" & Quote & " et réessayer." - Case "PTB", "PTG" - msg = "Não foi possível encontrar o diretório de componentes do DISM. Se tiver todos os componentes na mesma pasta do executável DISM, crie uma pasta " & Quote & "dism" & Quote & " e tente novamente." - Case "ITA" - msg = "Non è stato possibile trovare la cartella dei componenti DISM. Se tutti i componenti si trovano nella stessa cartella dell'eseguibile DISM, creauna cartella " & Quote & "dism" & Quote & " e riprova." - End Select - Case 1 - msg = "The DISM components directory could not be found. If you have all components in the same folder of the DISM executable, please create a " & Quote & "dism" & Quote & " folder and try again." - Case 2 - msg = "La carpeta de componentes de DISM no pudo ser encontrada. Si tiene todos los componentes en la misma carpeta del ejecutable de DISM, cree una carpeta " & Quote & "dism" & Quote & " e inténtelo de nuevo." - Case 3 - msg = "Le répertoire des composants DISM n'a pas été trouvé. Si vous avez tous les composants dans le même dossier de l'exécutable DISM, veuillez créer un dossier " & Quote & "dism" & Quote & " et réessayer." - Case 4 - msg = "Não foi possível encontrar o diretório de componentes do DISM. Se tiver todos os componentes na mesma pasta do executável DISM, crie uma pasta " & Quote & "dism" & Quote & " e tente novamente." - Case 5 - msg = "Non è stato possibile trovare la cartella dei componenti DISM. Se tutti i componenti si trovano nella stessa cartella dell'eseguibile DISM, crea una cartella " & Quote & "dism" & Quote & " e riprova." - End Select + msg = LocalizationService.ForSection("Options.Actions")("DISM.Components.Message") MsgBox(msg, vbOKOnly + vbExclamation, ImageTaskHeader1.ItemText) Exit Sub End If @@ -1809,160 +1194,19 @@ Public Class Options Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll DynaLog.LogMessage("Log level (trackbar value + 1): " & (TrackBar1.Value + 1)) - Select Case MainForm.Language + Select Case TrackBar1.Value Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Select Case TrackBar1.Value - Case 0 - Label15.Text = "Errors (Log level 1)" - Label16.Text = "The log file should only display errors after performing an image operation." - Case 1 - Label15.Text = "Errors and warnings (Log level 2)" - Label16.Text = "The log file should display errors and warnings after performing an image operation." - Case 2 - Label15.Text = "Errors, warnings and information messages (Log level 3)" - Label16.Text = "The log file should display errors, warnings and information messages after performing an image operation." - Case 3 - Label15.Text = "Errors, warnings, information and debug messages (Log level 4)" - Label16.Text = "The log file should display errors, warnings, information and debug messages after performing an image operation." - End Select - Case "ESN" - Select Case TrackBar1.Value - Case 0 - Label15.Text = "Errores (Nivel 1)" - Label16.Text = "El archivo de registro solo debe mostrar errores tras realizar una operación." - Case 1 - Label15.Text = "Errores y advertencias (Nivel 2)" - Label16.Text = "El archivo de registro debe mostrar errores y advertencias tras realizar una operación." - Case 2 - Label15.Text = "Errores, advertencias y mensajes de información (Nivel 3)" - Label16.Text = "El archivo de registro debe mostrar errores, advertencias y mensajes de información tras realizar una operación." - Case 3 - Label15.Text = "Errores, advertencias, mensajes de información y de depuración (Nivel 4)" - Label16.Text = "El archivo de registro debe mostrar errores, advertencias, mensajes de información y de depuración tras realizar una operación." - End Select - Case "FRA" - Select Case TrackBar1.Value - Case 0 - Label15.Text = "Erreurs (niveau du journal 1)" - Label16.Text = "Le fichier journal ne doit afficher les erreurs qu'après l'exécution d'une opération d'image." - Case 1 - Label15.Text = "Erreurs et avertissements (niveau de journal 2)" - Label16.Text = "Le fichier journal doit afficher les erreurs et les avertissements après l'exécution d'une opération d'image." - Case 2 - Label15.Text = "Erreurs, avertissements et messages d'information (niveau du journal 3)" - Label16.Text = "Le fichier journal doit afficher les erreurs, les avertissements et les messages d'information après l'exécution d'une opération d'image." - Case 3 - Label15.Text = "Erreurs, avertissements, informations et messages de débogage (niveau du journal 4)" - Label16.Text = "Le fichier journal doit afficher les erreurs, les avertissements, les informations et les messages de débogage après l'exécution d'une opération d'image." - End Select - Case "PTB", "PTG" - Select Case TrackBar1.Value - Case 0 - Label15.Text = "Erros (nível de registo 1)" - Label16.Text = "O ficheiro de registo só deve apresentar erros depois de executar uma operação de imagem." - Case 1 - Label15.Text = "Erros e avisos (nível de registo 2)" - Label16.Text = "O ficheiro de registo deve apresentar erros e avisos após a realização de uma operação de imagem." - Case 2 - Label15.Text = "Erros, avisos e mensagens de informação (nível de registo 3)" - Label16.Text = "O ficheiro de registo deve apresentar erros, avisos e mensagens de informação após a realização de uma operação de imagem." - Case 3 - Label15.Text = "Erros, avisos, informações e mensagens de depuração (nível de registo 4)" - Label16.Text = "O ficheiro de registo deve apresentar erros, avisos, informações e mensagens de depuração após a realização de uma operação de imagem." - End Select - Case "ITA" - Select Case TrackBar1.Value - Case 0 - Label15.Text = "Errori (livello registro 1)" - Label16.Text = "Il file registro visualizzare gli errori solo dopo l'esecuzione di un'operazione sull'immagine" - Case 1 - Label15.Text = "Errori e avvisi (livello registro 2)" - Label16.Text = "Il file registro visualizza errori e avvisi dopo l'esecuzione di un'operazione sull'immagine" - Case 2 - Label15.Text = "Errori, avvisi e messaggi informativi (livello registro 3)" - Label16.Text = "Il file registro visualizza errori, avvisi e messaggi informativi dopo l'esecuzione di un'operazione sull'immagine." - Case 3 - Label15.Text = "Errori, avvisi, informazioni e messaggi di debug (livello registro 4)" - Label16.Text = "Il file registro visualizza errori, avvisi, informazioni e messaggi di debug dopo l'esecuzione di un'operazione sull'immagine." - End Select - End Select + Label15.Text = LocalizationService.ForSection("Options.LogLevel")("Level1.Label") + Label16.Text = LocalizationService.ForSection("Options.LogLevel")("Errors.Description.Label") Case 1 - Select Case TrackBar1.Value - Case 0 - Label15.Text = "Errors (Log level 1)" - Label16.Text = "The log file should only display errors after performing an image operation." - Case 1 - Label15.Text = "Errors and warnings (Log level 2)" - Label16.Text = "The log file should display errors and warnings after performing an image operation." - Case 2 - Label15.Text = "Errors, warnings and information messages (Log level 3)" - Label16.Text = "The log file should display errors, warnings and information messages after performing an image operation." - Case 3 - Label15.Text = "Errors, warnings, information and debug messages (Log level 4)" - Label16.Text = "The log file should display errors, warnings, information and debug messages after performing an image operation." - End Select + Label15.Text = LocalizationService.ForSection("Options.LogLevel")("Level2.Item") + Label16.Text = LocalizationService.ForSection("Options.LogLevel")("Level2.Description.Item") Case 2 - Select Case TrackBar1.Value - Case 0 - Label15.Text = "Errores (Nivel 1)" - Label16.Text = "El archivo de registro solo debe mostrar errores tras realizar una operación." - Case 1 - Label15.Text = "Errores y advertencias (Nivel 2)" - Label16.Text = "El archivo de registro debe mostrar errores y advertencias tras realizar una operación." - Case 2 - Label15.Text = "Errores, advertencias y mensajes de información (Nivel 3)" - Label16.Text = "El archivo de registro debe mostrar errores, advertencias y mensajes de información tras realizar una operación." - Case 3 - Label15.Text = "Errores, advertencias, mensajes de información y de depuración (Nivel 4)" - Label16.Text = "El archivo de registro debe mostrar errores, advertencias, mensajes de información y de depuración tras realizar una operación." - End Select + Label15.Text = LocalizationService.ForSection("Options.LogLevel")("Level2Messages.Item") + Label16.Text = LocalizationService.ForSection("Options.LogLevel")("Level3.Description.Message") Case 3 - Select Case TrackBar1.Value - Case 0 - Label15.Text = "Erreurs (niveau du journal 1)" - Label16.Text = "Le fichier journal ne doit afficher les erreurs qu'après l'exécution d'une opération d'image." - Case 1 - Label15.Text = "Erreurs et avertissements (niveau de journal 2)" - Label16.Text = "Le fichier journal doit afficher les erreurs et les avertissements après l'exécution d'une opération d'image." - Case 2 - Label15.Text = "Erreurs, avertissements et messages d'information (niveau du journal 3)" - Label16.Text = "Le fichier journal doit afficher les erreurs, les avertissements et les messages d'information après l'exécution d'une opération d'image." - Case 3 - Label15.Text = "Erreurs, avertissements, informations et messages de débogage (niveau du journal 4)" - Label16.Text = "Le fichier journal doit afficher les erreurs, les avertissements, les informations et les messages de débogage après l'exécution d'une opération d'image." - End Select - Case 4 - Select Case TrackBar1.Value - Case 0 - Label15.Text = "Erros (nível de registo 1)" - Label16.Text = "O ficheiro de registo só deve apresentar erros depois de executar uma operação de imagem." - Case 1 - Label15.Text = "Erros e avisos (nível de registo 2)" - Label16.Text = "O ficheiro de registo deve apresentar erros e avisos após a realização de uma operação de imagem." - Case 2 - Label15.Text = "Erros, avisos e mensagens de informação (nível de registo 3)" - Label16.Text = "O ficheiro de registo deve apresentar erros, avisos e mensagens de informação após a realização de uma operação de imagem." - Case 3 - Label15.Text = "Erros, avisos, informações e mensagens de depuração (nível de registo 4)" - Label16.Text = "O ficheiro de registo deve apresentar erros, avisos, informações e mensagens de depuração após a realização de uma operação de imagem." - End Select - Case 5 - Select Case TrackBar1.Value - Case 0 - Label15.Text = "Errori (livello registro 1)" - Label16.Text = "Il file di registro visualizza gli errori solo dopo l'esecuzione di un'operazione sull'immagine" - Case 1 - Label15.Text = "Errori e avvisi (livello registro 2)" - Label16.Text = "Il file registro visualizza errori e avvisi dopo l'esecuzione di un'operazione sull'immagine" - Case 2 - Label15.Text = "Errori, avvisi e messaggi informativi (livello registro 3)" - Label16.Text = "Il file registro visualizza errori, avvisi e messaggi informativi dopo l'esecuzione di un'operazione sull'immagine." - Case 3 - Label15.Text = "Errori, avvisi, informazioni e messaggi di debug (livello registro 4)" - Label16.Text = "Il file registro visualizza errori, avvisi, informazioni e messaggi di debug dopo l'esecuzione di un'operazione sull'immagine." - End Select + Label15.Text = LocalizationService.ForSection("Options.LogLevel")("Level2Debug.Item") + Label16.Text = LocalizationService.ForSection("Options.LogLevel")("Level4.Description.Message") End Select End Sub @@ -2001,391 +1245,43 @@ Public Class Options ''' The source scratch directory ''' Sub GetRootSpace(SourceDir As String) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - If SourceDir = "" Then - Label23.Text = "Please specify a scratch directory." - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "You have enough space on the selected scratch directory" - Else - Try - Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) - Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) - Label23.Text = Math.Round(FreeSpace, 2) & " GB" - Select Case Math.Round(FreeSpace, 0) - Case Is < 5 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.error_16px) - Label24.Text = "You don't have enough space on the selected scratch directory to perform image operations. Try freeing some space from the drive" - Case 5 To 19.989999999999998 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.warning_16px) - Label24.Text = "You may not have enough space on the selected scratch directory for some operations." - Case Is >= 20 - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "You have enough space on the selected scratch directory" - End Select - Catch ex As Exception - Label23.Text = "Could not get available free space. Continue at your own risk" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "You have enough space on the selected scratch directory" - Exit Sub - End Try - End If - Case "ESN" - If SourceDir = "" Then - Label23.Text = "Especifique un directorio temporal." - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Hay espacio suficiente en el directorio temporal seleccionado" - Else - Try - Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) - Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) - Label23.Text = Math.Round(FreeSpace, 2) & " GB" - Select Case Math.Round(FreeSpace, 0) - Case Is < 5 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.error_16px) - Label24.Text = "No hay espacio suficiente en el directorio temporal seleccionado para realizar operaciones con la imagen. Intente liberar algo de espacio en el disco" - Case 5 To 19.989999999999998 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.warning_16px) - Label24.Text = "Podría no tener espacio suficiente en el directorio temporal seleccionado para algunas operaciones." - Case Is >= 20 - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Tiene espacio suficiente en el directorio temporal seleccionado" - End Select - Catch ex As Exception - Label23.Text = "No pudimos obtener el espacio libre disponible. Continúe bajo su propio riesgo" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Tiene espacio suficiente en el directorio temporal seleccionado" - Exit Sub - End Try - End If - Case "FRA" - If SourceDir = "" Then - Label23.Text = "Veuillez indiquer un répertoire temporaire." - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Vous disposez de suffisamment d'espace dans le répertoire temporaire sélectionné." - Else - Try - Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) - Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) - Label23.Text = Math.Round(FreeSpace, 2) & " GB" - Select Case Math.Round(FreeSpace, 0) - Case Is < 5 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.error_16px) - Label24.Text = "Vous ne disposez pas de suffisamment d'espace sur le répertoire temporaire sélectionné pour effectuer des opérations sur les images. Essayez de libérer de l'espace sur le disque" - Case 5 To 19.989999999999998 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.warning_16px) - Label24.Text = "Il se peut que vous ne disposiez pas de suffisamment d'espace sur le répertoire temporaire sélectionné pour certaines opérations." - Case Is >= 20 - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Vous disposez de suffisamment d'espace dans le répertoire temporaire sélectionné." - End Select - Catch ex As Exception - Label23.Text = "Impossible d'obtenir l'espace libre disponible. Poursuivre à vos risques et périls" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Vous disposez de suffisamment d'espace dans le répertoire temporaire sélectionné." - Exit Sub - End Try - End If - Case "PTB", "PTG" - If SourceDir = "" Then - Label23.Text = "Especifique um diretório temporário." - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Há espaço suficiente no diretório temporário selecionado" - Else - Try - Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) - Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) - Label23.Text = Math.Round(FreeSpace, 2) & " GB" - Select Case Math.Round(FreeSpace, 0) - Case Is < 5 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.error_16px) - Label24.Text = "Não há espaço suficiente no diretório de rascunho selecionado para executar operações de imagem. Tente libertar algum espaço na unidade" - Case 5 To 19.989999999999998 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.warning_16px) - Label24.Text = "Pode não haver espaço suficiente no diretório de rascunho selecionado para algumas operações." - Case Is >= 20 - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Há espaço suficiente no diretório temporário selecionado" - End Select - Catch ex As Exception - Label23.Text = "Não foi possível obter espaço livre disponível. Continue por sua conta e risco" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Há espaço suficiente no diretório temporário selecionado" - Exit Sub - End Try - End If - Case "ITA" - If SourceDir = "" Then - Label23.Text = "Specifica una cartella temporanea" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Lo spazio disponibile nella cartella temporanea selezionata è sufficiente" - Else - Try - Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) - Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) - Label23.Text = Math.Round(FreeSpace, 2) & " GB" - Select Case Math.Round(FreeSpace, 0) - Case Is < 5 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.error_16px) - Label24.Text = "Nella cartella temporanea selezionata non c'è abbastanza spazio per eseguire operazioni sulle immagini. Provare a liberare spazio nell'unità" - Case 5 To 19.989999999999998 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.warning_16px) - Label24.Text = "È possibile che la cartella temporanea selezionata non disponga di spazio sufficiente per alcune operazioni" - Case Is >= 20 - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Lo spazio disponibile nella cartella temporanea selezionata è sufficiente" - End Select - Catch ex As Exception - Label23.Text = "Impossibile ottenere spazio libero disponibile. Continuare a proprio rischio" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Lo spazio disponibile nella directory temporanea selezionata è sufficiente" - Exit Sub - End Try - End If - End Select - Case 1 - If SourceDir = "" Then - Label23.Text = "Please specify a scratch directory." - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "You have enough space on the selected scratch directory" - Else - Try - Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) - Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) - Label23.Text = Math.Round(FreeSpace, 2) & " GB" - Select Case Math.Round(FreeSpace, 0) - Case Is < 5 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.error_16px) - Label24.Text = "You don't have enough space on the selected scratch directory to perform image operations. Try freeing some space from the drive" - Case 5 To 19.989999999999998 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.warning_16px) - Label24.Text = "You may not have enough space on the selected scratch directory for some operations." - Case Is >= 20 - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "You have enough space on the selected scratch directory" - End Select - Catch ex As Exception - Label23.Text = "Could not get available free space. Continue at your own risk" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "You have enough space on the selected scratch directory" - Exit Sub - End Try - End If - Case 2 - If SourceDir = "" Then - Label23.Text = "Especifique un directorio temporal." - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Hay espacio suficiente en el directorio temporal seleccionado" - Else - Try - Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) - Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) - Label23.Text = Math.Round(FreeSpace, 2) & " GB" - Select Case Math.Round(FreeSpace, 0) - Case Is < 5 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.error_16px) - Label24.Text = "No hay espacio suficiente en el directorio temporal seleccionado para realizar operaciones con la imagen. Intente liberar algo de espacio en el disco" - Case 5 To 19.989999999999998 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.warning_16px) - Label24.Text = "Podría no tener espacio suficiente en el directorio temporal seleccionado para algunas operaciones." - Case Is >= 20 - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Tiene espacio suficiente en el directorio temporal seleccionado" - End Select - Catch ex As Exception - Label23.Text = "No pudimos obtener el espacio libre disponible. Continúe bajo su propio riesgo" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Tiene espacio suficiente en el directorio temporal seleccionado" - Exit Sub - End Try - End If - Case 3 - If SourceDir = "" Then - Label23.Text = "Veuillez indiquer un répertoire temporaire." - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Vous disposez de suffisamment d'espace dans le répertoire temporaire sélectionné." - Else - Try - Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) - Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) - Label23.Text = Math.Round(FreeSpace, 2) & " GB" - Select Case Math.Round(FreeSpace, 0) - Case Is < 5 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.error_16px) - Label24.Text = "Vous ne disposez pas de suffisamment d'espace sur le répertoire temporaire sélectionné pour effectuer des opérations sur les images. Essayez de libérer de l'espace sur le disque" - Case 5 To 19.989999999999998 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.warning_16px) - Label24.Text = "Il se peut que vous ne disposiez pas de suffisamment d'espace sur le répertoire temporaire sélectionné pour certaines opérations." - Case Is >= 20 - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Vous disposez de suffisamment d'espace dans le répertoire temporaire sélectionné." - End Select - Catch ex As Exception - Label23.Text = "Impossible d'obtenir l'espace libre disponible. Poursuivre à vos risques et périls" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Vous disposez de suffisamment d'espace dans le répertoire temporaire sélectionné." - Exit Sub - End Try - End If - Case 4 - If SourceDir = "" Then - Label23.Text = "Especifique um diretório temporário." - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Há espaço suficiente no diretório temporário selecionado" - Else - Try - Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) - Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) - Label23.Text = Math.Round(FreeSpace, 2) & " GB" - Select Case Math.Round(FreeSpace, 0) - Case Is < 5 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.error_16px) - Label24.Text = "Não há espaço suficiente no diretório de rascunho selecionado para executar operações de imagem. Tente libertar algum espaço na unidade" - Case 5 To 19.989999999999998 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.warning_16px) - Label24.Text = "Pode não haver espaço suficiente no diretório de rascunho selecionado para algumas operações." - Case Is >= 20 - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Há espaço suficiente no diretório temporário selecionado" - End Select - Catch ex As Exception - Label23.Text = "Não foi possível obter espaço livre disponível. Continue por sua conta e risco" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Há espaço suficiente no diretório temporário selecionado" - Exit Sub - End Try - End If - Case 5 - If SourceDir = "" Then - Label23.Text = "Specificare una cartella temporanea" - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Lo spazio disponibile nella cartella temporanea selezionata è sufficiente" - Else - Try - Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) - Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) - Label23.Text = Math.Round(FreeSpace, 2) & " GB" - Select Case Math.Round(FreeSpace, 0) - Case Is < 5 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.error_16px) - Label24.Text = "Nella cartella temporanea selezionata non c'è abbastanza spazio per eseguire operazioni sulle immagini. Provare a liberare spazio nell'unità" - Case 5 To 19.989999999999998 - Label24.Visible = True - PictureBox5.Visible = True - PictureBox5.Image = New Bitmap(My.Resources.warning_16px) - Label24.Text = "È possibile che la cartella temporanea selezionata non disponga di spazio sufficiente per alcune operazioni" - Case Is >= 20 - Label24.Visible = False - PictureBox5.Visible = False - PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Lo spazio disponibile nella cartella temporanea selezionata è sufficiente" - End Select - Catch ex As Exception - Label23.Text = "Impossibile ottenere spazio libero disponibile. Continuare a proprio rischio" + If SourceDir = "" Then + Label23.Text = LocalizationService.ForSection("Options.GetRootSpace")("Scratch.Dir.Required.Label") + Label24.Visible = False + PictureBox5.Visible = False + PictureBox5.Image = New Bitmap(My.Resources.info_16px) + Label24.Text = LocalizationService.ForSection("Options.GetRootSpace")("EnoughSpace.Label") + Else + Try + Dim drInfo As New DriveInfo(Path.GetPathRoot(SourceDir)) + Dim FreeSpace As Double = drInfo.AvailableFreeSpace / (1024 ^ 3) + Label23.Text = LocalizationService.ForSection("Options.GetRootSpace").Format("GB.Item", Math.Round(FreeSpace, 2)) + Select Case Math.Round(FreeSpace, 0) + Case Is < 5 + Label24.Visible = True + PictureBox5.Visible = True + PictureBox5.Image = New Bitmap(My.Resources.error_16px) + Label24.Text = LocalizationService.ForSection("Options.GetRootSpace")("Enough.Message") + Case 5 To 19.989999999999998 + Label24.Visible = True + PictureBox5.Visible = True + PictureBox5.Image = New Bitmap(My.Resources.warning_16px) + Label24.Text = LocalizationService.ForSection("Options.GetRootSpace")("EnoughSpace.SomeOps.Item") + Case Is >= 20 Label24.Visible = False PictureBox5.Visible = False PictureBox5.Image = New Bitmap(My.Resources.info_16px) - Label24.Text = "Lo spazio disponibile nella directory temporanea selezionata è sufficiente" - Exit Sub - End Try - End If - End Select + Label24.Text = LocalizationService.ForSection("Options.GetRootSpace")("EnoughSpace.Directory.Item") + End Select + Catch ex As Exception + Label23.Text = LocalizationService.ForSection("Options.GetRootSpace")("Free.Unavailable.Item") + Label24.Visible = False + PictureBox5.Visible = False + PictureBox5.Image = New Bitmap(My.Resources.info_16px) + Label24.Text = LocalizationService.ForSection("Options.GetRootSpace")("Have.Enough.Item") + Exit Sub + End Try + End If End Sub Private Sub Toggle1_CheckedChanged(sender As Object, e As EventArgs) Handles Toggle1.CheckedChanged @@ -2471,12 +1367,51 @@ Public Class Options End If End Sub + + Private Sub ApplySecondaryProgressPreview() + Dim previewText As String = LocalizationService.ForSection("Options.ProgressPreview")("ImageIndexes.Message") + Dim waitText As String = LocalizationService.ForSection("Options.ProgressPreview")("Wait.Label") + SecProgressStylePreview.Image = RenderSecondaryProgressPreview(RadioButton5.Checked, waitText, previewText) + End Sub + + Private Function RenderSecondaryProgressPreview(modernStyle As Boolean, waitText As String, previewText As String) As Bitmap + Dim image As Bitmap = New Bitmap(If(modernStyle, My.Resources.secprogress_modern, My.Resources.secprogress_classic)) + + Using graphics As Graphics = Graphics.FromImage(image) + graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias + graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit + + Using backgroundBrush As New SolidBrush(Color.FromArgb(32, 32, 32)) + If modernStyle Then + graphics.FillRectangle(backgroundBrush, 1, 1, image.Width - 2, image.Height - 2) + Else + graphics.FillRectangle(backgroundBrush, 55, 1, image.Width - 56, image.Height - 2) + End If + End Using + + Using textBrush As New SolidBrush(Color.White) + If modernStyle Then + Using previewFont As New Font("Segoe UI", 9.0F, FontStyle.Regular) + Using format As New StringFormat() With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center} + graphics.DrawString(previewText, previewFont, textBrush, New RectangleF(0, 0, image.Width, image.Height), format) + End Using + End Using + Else + Using waitFont As New Font("Segoe UI", 8.25F, FontStyle.Bold) + Using previewFont As New Font("Segoe UI", 8.25F, FontStyle.Regular) + graphics.DrawString(waitText, waitFont, textBrush, New PointF(56.0F, 13.0F)) + graphics.DrawString(previewText, previewFont, textBrush, New PointF(56.0F, 29.0F)) + End Using + End Using + End If + End Using + End Using + + Return image + End Function + Private Sub RadioButton5_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton5.CheckedChanged - If RadioButton5.Checked Then - SecProgressStylePreview.Image = My.Resources.secprogress_modern - Else - SecProgressStylePreview.Image = My.Resources.secprogress_classic - End If + ApplySecondaryProgressPreview() End Sub Private Sub PrefReset_Click(sender As Object, e As EventArgs) Handles PrefReset.Click @@ -2602,16 +1537,12 @@ Public Class Options Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click If File.Exists(Path.Combine(Application.StartupPath, "tools", "ThemeDesigner", "DT_ThemeDesigner.exe")) Then Process.Start(Path.Combine(Application.StartupPath, "tools", "ThemeDesigner", "DT_ThemeDesigner.exe"), - String.Format("/userdata={0}", ControlChars.Quote & Path.Combine(Application.StartupPath, "userdata", "themes") & ControlChars.Quote)) + String.Format("/userdata={0} {1}", ControlChars.Quote & Path.Combine(Application.StartupPath, "userdata", "themes") & ControlChars.Quote, LocalizationService.GetLanguageCommandLineArgument())) End If End Sub Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked - Dim qhMessage As String = String.Format("DISMTools will enable and/or disable certain features if they are not compatible with either the specified DISM executable, or the current Windows image, or both.{0}{0}" & - "For instance, if DISMTools detects that you are working with either a Windows 7 image, or with a Windows 7 version of DISM, or both; it will disable all features related to AppX package " & - "and capability servicing because they are incompatible with the target platform and the tooling used.{0}{0}" & - "DISMTools can also disable certain features based on other parameters of the Windows image you are servicing, such as the edition. This usually happens " & - "with Windows PE images.", Environment.NewLine) + Dim qhMessage As String = LocalizationService.ForSection("Options.QuickHelp").Format("DISM.Tools.Enable.Message", Environment.NewLine) ShowQuickHelp(qhMessage) End Sub @@ -2630,47 +1561,34 @@ Public Class Options End Sub Private Sub LinkLabel4_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel4.LinkClicked - Dim qhMessage As String = String.Format("AppX package display names are a portion of package family names that don't contain package-specific application information, such as architectures, versions, or the per-publisher hash.{0}{0}" & - "AppX package {1}friendly display names{1} are the names that you see when looking at them in your Start menu. These are derived from either application identity information in an application's manifest, " & - "or from embedded strings in an application's resources file (resources.pri).{0}{0}" & - "If DISMTools can't get the friendly display name, it will display the application's display name.", Environment.NewLine, Quote) + Dim qhMessage As String = LocalizationService.ForSection("Options.QuickHelp").Format("AppX.Package.Display.Message", Environment.NewLine, Quote) QuickHelpModule.ShowQuickHelp(qhMessage) End Sub Private Sub ComboBox7_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox7.SelectedIndexChanged If SearchEngineHelper.GetAllSearchEngines().ElementAt(ComboBox7.SelectedIndex).AIPermission > ComboBox9.SelectedIndex Then ' The user has selected a search engine with a higher AI tolerance level. - If MessageBox.Show(String.Format("The selected search engine, {1}{2}{1}, exceeds the current AI tolerance setting, {1}{3}{1}. " & - "If you continue with this search engine, AI tolerance will be increased after applying the settings.{0}{0}" & - "If you decide not to continue with this search engine, DISMTools will use the first search engine that stays " & - "within tolerance boundaries.{0}{0}" & - "Do you want to continue with this search engine?", Environment.NewLine, Quote, ComboBox7.SelectedItem, ComboBox9.SelectedItem), - "AI Tolerance Exceeded", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then + If MessageBox.Show(LocalizationService.ForSection("Options").Format("Selected.Search.Message", Environment.NewLine, Quote, ComboBox7.SelectedItem, ComboBox9.SelectedItem), + LocalizationService.ForSection("Options")("Aitolerance.Exceeded.Title"), MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then ComboBox7.SelectedItem = SearchEngineHelper.GetAllSearchEngines().First(Function(engine) engine.AIPermission = ComboBox9.SelectedIndex).Name End If End If End Sub Private Sub LinkLabel5_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel5.LinkClicked - Dim qhMessage As String = String.Format("When specifying search engine settings, you can specify the amount of tolerance of artificial intelligence (AI) features in a search engine.{0}{0}" & - "- {1}Turn off as many AI features as possible{1} will let you pick from a selection of search engines that have AI features disabled, or not implemented, by default{0}" & - "- {1}Let me control the AI features in my search engine{1} will let you pick from the former selection, plus search engines that do have AI features turned on by default, but configured via URL parameters or other engine settings{0}" & - "- {1}Turn on as many AI features as possible{1} will let you pick from all available search engines, including those that are based on AI or have dedicated modes for AI that are being advertised too much.{0}{0}" & - "Normally, the second option is what you can go with, as it gives you greater control. If you prefer a more privacy-focused experience, you can turn these features off.", Environment.NewLine, Quote) + Dim qhMessage As String = LocalizationService.ForSection("Options.QuickHelp").Format("Configure.Search.Message", Environment.NewLine, Quote) QuickHelpModule.ShowQuickHelp(qhMessage) End Sub Private Sub LinkLabel2_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel2.LinkClicked - Dim qhMessage As String = String.Format("Background processes allow DISMTools to get information about the Windows image that you are working on and let you perform the majority of tasks. " & - "Examples of such information are the operating system packages, or features in a Windows image.{0}{0}" & - "These processes are not just run when getting information about image files, but when managing online, or offline, installations as well.", Environment.NewLine) + Dim qhMessage As String = LocalizationService.ForSection("Options.QuickHelp").Format("Bg.Procs.Allow.Message", Environment.NewLine) QuickHelpModule.ShowQuickHelp(qhMessage) End Sub Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click Try If WindowsServiceHelper.InstallService(New WindowsService("DT_AutoReload", - "DISMTools Automatic Image Reload service", "", "", + LocalizationService.ForSection("Options.AutoReloadService")("DISM.Tools.Automatic.Label"), "", "", Path.Combine(Application.StartupPath, "AutoReload", "AutoReloadSvc.exe"), "", WindowsService.ServiceStartType.Automatic, False, WindowsService.ServiceType.WindowsApplication, @@ -2678,11 +1596,11 @@ Public Class Options {}.Cast(Of NTSecurityPrivilegeConstant).ToList(), {"EventLog"}, New WindowsService.ServiceFailureActions(), Integer.MinValue)) Then ' Set the description manually - WindowsServiceHelper.SetOnlineServiceDescription("DT_AutoReload", "This service automatically reloads the servicing sessions of all mounted images on this computer. Feel free to disable this service if you don't need it.") + WindowsServiceHelper.SetOnlineServiceDescription("DT_AutoReload", LocalizationService.ForSection("Options.AutoReloadService")("AutoReload.Description")) GetAIRServiceInformation() Else - Throw New Exception("The service could not be installed.") + Throw New Exception(LocalizationService.ForSection("Options.AutoReloadService")("ServiceInstalled.Label")) End If Catch ex As Exception MessageBox.Show(ex.Message, ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) @@ -2693,7 +1611,7 @@ Public Class Options If WindowsServiceHelper.EnableOnlineService("DT_AutoReload") Then GetAIRServiceInformation() Else - MessageBox.Show("The service could not be enabled.", ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) + MessageBox.Show(LocalizationService.ForSection("Options.Messages")("ServiceEnabled.Label"), ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If End Sub @@ -2701,7 +1619,7 @@ Public Class Options If WindowsServiceHelper.DisableOnlineService("DT_AutoReload") Then GetAIRServiceInformation() Else - MessageBox.Show("The service could not be disabled.", ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) + MessageBox.Show(LocalizationService.ForSection("Options.Messages")("ServiceDisabled.Label"), ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If End Sub @@ -2709,7 +1627,7 @@ Public Class Options If WindowsServiceHelper.DeleteService("DT_AutoReload") Then GetAIRServiceInformation() Else - MessageBox.Show("The service could not be removed.", ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) + MessageBox.Show(LocalizationService.ForSection("Options.Messages")("ServiceRemoved.Label"), ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End If End Sub @@ -2721,4 +1639,28 @@ Public Class Options Private Sub DTProjAssocCB_CheckedChanged(sender As Object, e As EventArgs) Handles DTProjAssocCB.CheckedChanged CheckBox11.Enabled = DTProjAssocCB.Checked End Sub + + Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click + ' Compare by processor family + Try + Dim processorFamilyMOC As ManagementObjectCollection = WMIHelper.GetResultsFromManagementQuery("SELECT Family FROM Win32_Processor") + If processorFamilyMOC IsNot Nothing Then + Dim processorFamily As Integer = WMIHelper.GetObjectValue(processorFamilyMOC(0), "Family") + Dim processorDetails As ProcessorFamilyCategory = SpecialProcessorFamilies.FirstOrDefault(Function(procFamily) procFamily.Family = processorFamily) + + If processorDetails IsNot Nothing Then + Select Case processorDetails.Beefiness + Case ProcessorFamilyBeefiness.Potato : NumericUpDown2.Value = 2 + Case ProcessorFamilyBeefiness.Average : NumericUpDown2.Value = 5 + Case ProcessorFamilyBeefiness.Beefy : NumericUpDown2.Value = 10 + End Select + + MessageBox.Show(String.Format("Based on your processor's specifications, the program has been configured to support up to {1} concurrent ISO creation tasks.{0}{0}" & + "Apart from your processor, consider other specifications in your system that may become bottlenecks, such as disk I/O, or memory bandwidth.", Environment.NewLine, NumericUpDown2.Value), ImageTaskHeader1.ItemText, MessageBoxButtons.OK, MessageBoxIcon.Information) + End If + End If + Catch ex As Exception + + End Try + End Sub End Class diff --git a/Panels/Exe_Ops/PrgAbout.Designer.vb b/Panels/Exe_Ops/PrgAbout.Designer.vb index e66d45b76..88c1cb912 100644 --- a/Panels/Exe_Ops/PrgAbout.Designer.vb +++ b/Panels/Exe_Ops/PrgAbout.Designer.vb @@ -128,12 +128,10 @@ Partial Class PrgAbout Me.Label2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Label2.BackColor = System.Drawing.Color.Transparent - Me.Label2.Location = New System.Drawing.Point(23, 144) + Me.Label2.Location = New System.Drawing.Point(23, 119) Me.Label2.Name = "Label2" Me.Label2.Size = New System.Drawing.Size(377, 41) Me.Label2.TabIndex = 4 - Me.Label2.Text = "DISMTools lets you deploy, manage, and service Windows images with ease, thanks t" & _ - "o a GUI." ' 'Label15 ' diff --git a/Panels/Exe_Ops/PrgAbout.vb b/Panels/Exe_Ops/PrgAbout.vb index 779326e63..5df8431f1 100644 --- a/Panels/Exe_Ops/PrgAbout.vb +++ b/Panels/Exe_Ops/PrgAbout.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports System.IO Imports Microsoft.VisualBasic.ControlChars Imports System.Net @@ -14,332 +14,43 @@ Public Class PrgAbout Private Sub PrgAbout_Load(sender As Object, e As EventArgs) Handles MyBase.Load If Not resized Then ResizeImage() - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "About this program" - Label1.Text = "DISMTools - version " & My.Application.Info.Version.ToString() & If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "") - Label2.Text = "DISMTools lets you deploy, manage, and service Windows images with ease, thanks to a GUI" - Label3.Text = "These resources and components were used in the creation of this program:" - Label4.Text = "Resources" - Label5.Text = "Fluency" - Label6.Text = "SQL Server icon (Color)" - Label7.Text = "Utilities" - Label8.Text = "7-Zip" - Label10.Text = "Help documentation" - Label11.Text = "Command Help source" - Label13.Text = "Scintilla.NET (NuGet package)" - If Not MainForm.dtBranch.Contains("pre") Then - Label15.Text = "Built on " & RetrieveLinkerTimestamp() & " by msbuild" - Label15.Visible = True - End If - Label16.Text = "ManagedDism (NuGet package)" - Label17.Text = "Branding assets" - Label18.Text = "Windows Home Server 2011" - LinkLabel1.Text = "CREDITS" - LinkLabel2.Text = "LICENSES" - LinkLabel3.Text = "WHAT'S NEW" - LinkLabel4.Text = "Icons8" - LinkLabel5.Text = "Visit website" - LinkLabel7.Text = "Microsoft" - LinkLabel9.Text = "Visit website" - LinkLabel10.Text = "Visit website" - LinkLabel11.Text = "Microsoft" - LinkLabel12.Text = "Visit website" - OK_Button.Text = "OK" - Case "ESN" - Text = "Acerca de este programa" - Label1.Text = "DISMTools - versión " & My.Application.Info.Version.ToString() & If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "") - Label2.Text = "DISMTools le permite implementar, administrar, y ofrecer servicio a imágenes de Windows con facilidad, gracias a una GUI" - Label3.Text = "Estos recursos y componentes fueron utilizados en la creación de este programa:" - Label4.Text = "Recursos" - Label5.Text = "Fluency" - Label6.Text = "Icono de SQL Server (Color)" - Label7.Text = "Utilidades" - Label8.Text = "7-Zip" - Label10.Text = "Documentación de ayuda" - Label11.Text = "Fuente de ayuda de comandos" - Label13.Text = "Scintilla.NET (paquete NuGet)" - If Not MainForm.dtBranch.Contains("pre") Then - Label15.Text = "Compilado el " & RetrieveLinkerTimestamp() & " por msbuild" - Label15.Visible = True - End If - Label16.Text = "ManagedDism (paquete NuGet)" - Label17.Text = "Recursos publicitarios" - Label18.Text = "Windows Home Server 2011" - LinkLabel1.Text = "CRÉDITOS" - LinkLabel2.Text = "LICENCIAS" - LinkLabel3.Text = "NOVEDADES" - LinkLabel4.Text = "Icons8" - LinkLabel5.Text = "Visitar sitio" - LinkLabel7.Text = "Microsoft" - LinkLabel9.Text = "Visitar sitio" - LinkLabel10.Text = "Visitar sitio" - LinkLabel11.Text = "Microsoft" - LinkLabel12.Text = "Visitar sitio" - OK_Button.Text = "Aceptar" - UpdCheckBtn.Text = "Comprobar actualizaciones" - Case "FRA" - Text = "À propos de ce programme" - Label1.Text = "DISMTools - version " & My.Application.Info.Version.ToString() & If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "") - Label2.Text = "DISMTools vous permet de déployer, de gérer et d'entretenir des images Windows en toute simplicité, grâce à une interface graphique." - Label3.Text = "Ces ressources et éléments ont été utilisés pour la création de ce programme :" - Label4.Text = "Ressources" - Label5.Text = "Fluency" - Label6.Text = "Icône SQL Server (Color)" - Label7.Text = "Outils" - Label8.Text = "7-Zip" - Label10.Text = "Documentation d'aide" - Label11.Text = "Source d'aide à la commande" - Label13.Text = "Scintilla.NET (paquet NuGet)" - If Not MainForm.dtBranch.Contains("pre") Then - Label15.Text = "Construit le " & RetrieveLinkerTimestamp() & " par msbuild" - Label15.Visible = True - End If - Label16.Text = "ManagedDism (paquet NuGet)" - Label17.Text = "Les atouts de la marque" - Label18.Text = "Windows Home Server 2011" - LinkLabel1.Text = "CRÉDITS" - LinkLabel2.Text = "LICENCES" - LinkLabel3.Text = "QUOI DE NEUF" - LinkLabel4.Text = "Icons8" - LinkLabel5.Text = "Site web" - LinkLabel7.Text = "Microsoft" - LinkLabel9.Text = "Site web" - LinkLabel10.Text = "Site web" - LinkLabel11.Text = "Microsoft" - LinkLabel12.Text = "Site web" - OK_Button.Text = "OK" - UpdCheckBtn.Text = "Vérifier les mises à jour" - Case "PTB", "PTG" - Text = "Acerca deste programa" - Label1.Text = "DISMTools - versão " & My.Application.Info.Version.ToString() & If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "") - Label2.Text = "DISMTools permite-lhe implementar, gerir e efetuar a manutenção de imagens do Windows com facilidade, graças a uma GUI" - Label3.Text = "Estes recursos e componentes foram utilizados na criação deste programa:" - Label4.Text = "Recursos" - Label5.Text = "Fluency" - Label6.Text = "Ícone do SQL Server (Cor)" - Label7.Text = "Utilitários" - Label8.Text = "7-Zip" - Label10.Text = "Documentação de ajuda" - Label11.Text = "Fonte da Ajuda do Comando" - Label13.Text = "Scintilla.NET (pacote NuGet)" - If Not MainForm.dtBranch.Contains("pre") Then - Label15.Text = "Construído em " & RetrieveLinkerTimestamp() & " por msbuild" - Label15.Visible = True - End If - Label16.Text = "ManagedDism (pacote NuGet)" - Label17.Text = "Activos de marca" - Label18.Text = "Windows Home Server 2011" - LinkLabel1.Text = "CRÉDITOS" - LinkLabel2.Text = "LICENÇAS" - LinkLabel3.Text = "O QUE HÁ DE NOVO" - LinkLabel4.Text = "Ícones8" - LinkLabel5.Text = "Sítio Web" - LinkLabel7.Text = "Microsoft" - LinkLabel9.Text = "Sítio Web" - LinkLabel10.Text = "Sítio Web" - LinkLabel11.Text = "Microsoft" - LinkLabel12.Text = "Sítio Web" - OK_Button.Text = "OK" - UpdCheckBtn.Text = "Verificar actualizações" - Case "ITA" - Text = "Informazioni su questo programma" - Label1.Text = "DISMTools - versione " & My.Application.Info.Version.ToString() & If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "") - Label2.Text = "DISMTools consente di distribuire, gestire e riparare le immagini di Windows con facilità, grazie ad un'interfaccia grafica" - Label3.Text = "Per la creazione di questo programma sono stati usate queste risorse e componenti:" - Label4.Text = "Risorse" - Label5.Text = "Fluency" - Label6.Text = "Icona SQL Server (Color)" - Label7.Text = "Utilità" - Label8.Text = "7-Zip" - Label10.Text = "Documentazione guida in linea" - Label11.Text = "Sorgente guida comandi" - Label13.Text = "Scintilla.NET (pacchetto NuGet)" - If Not MainForm.dtBranch.Contains("pre") Then - Label15.Text = "Creato con " & RetrieveLinkerTimestamp() & " da msbuild" - Label15.Visible = True - End If - Label16.Text = "ManagedDism (pacchetto NuGet)" - Label17.Text = "Risorse branding" - Label18.Text = "Windows Home Server 2011" - LinkLabel1.Text = "CREDITI" - LinkLabel2.Text = "LICENZE" - LinkLabel3.Text = "NOVITA'" - LinkLabel4.Text = "Icons8" - LinkLabel5.Text = "Sito web" - LinkLabel7.Text = "Microsoft" - LinkLabel9.Text = "Sito web" - LinkLabel10.Text = "Sito web" - LinkLabel11.Text = "Microsoft" - LinkLabel12.Text = "Sito web" - OK_Button.Text = "OK" - UpdCheckBtn.Text = "Controlla aggiornamenti" - End Select - Case 1 - Text = "About this program" - Label1.Text = "DISMTools - version " & My.Application.Info.Version.ToString() & If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "") - Label2.Text = "DISMTools lets you deploy, manage, and service Windows images with ease, thanks to a GUI" - Label3.Text = "These resources and components were used in the creation of this program:" - Label4.Text = "Resources" - Label5.Text = "Fluency" - Label6.Text = "SQL Server icon (Color)" - Label7.Text = "Utilities" - Label8.Text = "7-Zip" - Label10.Text = "Help documentation" - Label11.Text = "Command Help source" - Label13.Text = "Scintilla.NET (NuGet package)" - If Not MainForm.dtBranch.Contains("pre") Then - Label15.Text = "Built on " & RetrieveLinkerTimestamp() & " by msbuild" - Label15.Visible = True - End If - Label16.Text = "ManagedDism (NuGet package)" - Label17.Text = "Branding assets" - Label18.Text = "Windows Home Server 2011" - LinkLabel1.Text = "CREDITS" - LinkLabel2.Text = "LICENSES" - LinkLabel3.Text = "WHAT'S NEW" - LinkLabel4.Text = "Icons8" - LinkLabel5.Text = "Visit website" - LinkLabel7.Text = "Microsoft" - LinkLabel9.Text = "Visit website" - LinkLabel10.Text = "Visit website" - LinkLabel11.Text = "Microsoft" - LinkLabel12.Text = "Visit website" - OK_Button.Text = "OK" - UpdCheckBtn.Text = "Check for updates" - Case 2 - Text = "Acerca de este programa" - Label1.Text = "DISMTools - versión " & My.Application.Info.Version.ToString() & If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "") - Label2.Text = "DISMTools le permite implementar, administrar, y ofrecer servicio a imágenes de Windows con facilidad, gracias a una GUI" - Label3.Text = "Estos recursos y componentes fueron utilizados en la creación de este programa:" - Label4.Text = "Recursos" - Label5.Text = "Fluency" - Label6.Text = "Icono de SQL Server (Color)" - Label7.Text = "Utilidades" - Label8.Text = "7-Zip" - Label10.Text = "Documentación de ayuda" - Label11.Text = "Fuente de ayuda de comandos" - Label13.Text = "Scintilla.NET (paquete NuGet)" - If Not MainForm.dtBranch.Contains("pre") Then - Label15.Text = "Compilado el " & RetrieveLinkerTimestamp() & " por msbuild" - Label15.Visible = True - End If - Label16.Text = "ManagedDism (paquete NuGet)" - Label17.Text = "Recursos publicitarios" - Label18.Text = "Windows Home Server 2011" - LinkLabel1.Text = "CRÉDITOS" - LinkLabel2.Text = "LICENCIAS" - LinkLabel3.Text = "NOVEDADES" - LinkLabel4.Text = "Icons8" - LinkLabel5.Text = "Visitar sitio" - LinkLabel7.Text = "Microsoft" - LinkLabel9.Text = "Visitar sitio" - LinkLabel10.Text = "Visitar sitio" - LinkLabel11.Text = "Microsoft" - LinkLabel12.Text = "Visitar sitio" - OK_Button.Text = "Aceptar" - UpdCheckBtn.Text = "Comprobar actualizaciones" - Case 3 - Text = "À propos de ce programme" - Label1.Text = "DISMTools - version " & My.Application.Info.Version.ToString() & If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "") - Label2.Text = "DISMTools vous permet de déployer, de gérer et d'entretenir des images Windows en toute simplicité, grâce à une interface graphique." - Label3.Text = "Ces ressources et éléments ont été utilisés pour la création de ce programme :" - Label4.Text = "Ressources" - Label5.Text = "Fluency" - Label6.Text = "Icône SQL Server (Color)" - Label7.Text = "Outils" - Label8.Text = "7-Zip" - Label10.Text = "Documentation d'aide" - Label11.Text = "Source d'aide à la commande" - Label13.Text = "Scintilla.NET (paquet NuGet)" - If Not MainForm.dtBranch.Contains("pre") Then - Label15.Text = "Construit le " & RetrieveLinkerTimestamp() & " par msbuild" - Label15.Visible = True - End If - Label16.Text = "ManagedDism (paquet NuGet)" - Label17.Text = "Les atouts de la marque" - Label18.Text = "Windows Home Server 2011" - LinkLabel1.Text = "CRÉDITS" - LinkLabel2.Text = "LICENCES" - LinkLabel3.Text = "QUOI DE NEUF" - LinkLabel4.Text = "Icons8" - LinkLabel5.Text = "Site web" - LinkLabel7.Text = "Microsoft" - LinkLabel9.Text = "Site web" - LinkLabel10.Text = "Site web" - LinkLabel11.Text = "Microsoft" - LinkLabel12.Text = "Site web" - OK_Button.Text = "OK" - UpdCheckBtn.Text = "Vérifier les mises à jour" - Case 4 - Text = "Acerca deste programa" - Label1.Text = "DISMTools - versão " & My.Application.Info.Version.ToString() & If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "") - Label2.Text = "DISMTools permite-lhe implementar, gerir e efetuar a manutenção de imagens do Windows com facilidade, graças a uma GUI" - Label3.Text = "Estes recursos e componentes foram utilizados na criação deste programa:" - Label4.Text = "Recursos" - Label5.Text = "Fluency" - Label6.Text = "Ícone do SQL Server (Cor)" - Label7.Text = "Utilitários" - Label8.Text = "7-Zip" - Label10.Text = "Documentação de ajuda" - Label11.Text = "Fonte da Ajuda do Comando" - Label13.Text = "Scintilla.NET (pacote NuGet)" - If Not MainForm.dtBranch.Contains("pre") Then - Label15.Text = "Construído em " & RetrieveLinkerTimestamp() & " por msbuild" - Label15.Visible = True - End If - Label16.Text = "ManagedDism (pacote NuGet)" - Label17.Text = "Activos de marca" - Label18.Text = "Windows Home Server 2011" - LinkLabel1.Text = "CRÉDITOS" - LinkLabel2.Text = "LICENÇAS" - LinkLabel3.Text = "O QUE HÁ DE NOVO" - LinkLabel4.Text = "Ícones8" - LinkLabel5.Text = "Sítio Web" - LinkLabel7.Text = "Microsoft" - LinkLabel9.Text = "Sítio Web" - LinkLabel10.Text = "Sítio Web" - LinkLabel11.Text = "Microsoft" - LinkLabel12.Text = "Sítio Web" - OK_Button.Text = "OK" - UpdCheckBtn.Text = "Verificar actualizações" - Case 5 - Text = "Informazioni su questo programma" - Label1.Text = "DISMTools - versione " & My.Application.Info.Version.ToString() & If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "") - Label2.Text = "DISMTools consente di distribuire, gestire e riparare le immagini di Windows con facilità, grazie a un'interfaccia grafica" - Label3.Text = "Per la creazione di questo programma sono stati usate queste risorse e componenti:" - Label4.Text = "Risorse" - Label5.Text = "Fluency" - Label6.Text = "Icona SQL Server (Color)" - Label7.Text = "Utilità" - Label8.Text = "7-Zip" - Label10.Text = "Documentazione guida in linea" - Label11.Text = "Sorgente guida comandi" - Label13.Text = "Scintilla.NET (pacchetto NuGet)" - If Not MainForm.dtBranch.Contains("pre") Then - Label15.Text = "Creato con " & RetrieveLinkerTimestamp() & " da msbuild" - Label15.Visible = True - End If - Label16.Text = "ManagedDism (pacchetto NuGet)" - Label17.Text = "Risorse branding" - Label18.Text = "Windows Home Server 2011" - LinkLabel1.Text = "CREDITI" - LinkLabel2.Text = "LICENZE" - LinkLabel3.Text = "COSA C'È DI NUOVO" - LinkLabel4.Text = "Icons8" - LinkLabel5.Text = "Sito web" - LinkLabel7.Text = "Microsoft" - LinkLabel9.Text = "Sito web" - LinkLabel10.Text = "Sito web" - LinkLabel11.Text = "Microsoft" - LinkLabel12.Text = "Sito web" - OK_Button.Text = "OK" - UpdCheckBtn.Text = "Controlla aggiornamenti" - End Select - RichTextBox1.Text = My.Resources.LicenseOverview - RichTextBox2.Text = My.Resources.WhatsNew + Text = LocalizationService.ForSection("PrgAbout")("AboutProgram.Label") + Label1.Text = LocalizationService.ForSection("PrgAbout").Format("DISM.Tools.Version.Label", My.Application.Info.Version.ToString(), If(MainForm.dtBranch.Contains("pre"), "." & MainForm.dtBranch & "." & RetrieveLinkerTimestamp().ToString("yyMMdd-HHmm"), "")) + Label2.Text = LocalizationService.ForSection("PrgAbout").Format("Copyright.Label", My.Application.Info.Copyright) + Dim anniversaryLinkText As String = LocalizationService.ForSection("PrgAbout")("Anniversary.Link") + LinkLabel6.Text = LocalizationService.ForSection("PrgAbout").Format("Anniversary.Message", anniversaryLinkText) + Dim anniversaryLinkStart As Integer = LinkLabel6.Text.LastIndexOf(anniversaryLinkText, StringComparison.Ordinal) + If anniversaryLinkStart >= 0 Then LinkLabel6.LinkArea = New LinkArea(anniversaryLinkStart, anniversaryLinkText.Length) + Label3.Text = LocalizationService.ForSection("PrgAbout")("ResourcesUsed.Label") + Label4.Text = LocalizationService.ForSection("PrgAbout")("Resources.Label") + Label5.Text = LocalizationService.ForSection("PrgAbout")("Fluency.Label") + Label6.Text = LocalizationService.ForSection("PrgAbout")("Sqlserver.Icon.Color.Label") + Label7.Text = LocalizationService.ForSection("PrgAbout")("Utilities.Label") + Label8.Text = LocalizationService.ForSection("PrgAbout")("Zip.Label") + Label10.Text = LocalizationService.ForSection("PrgAbout")("Help.Documentation.Label") + Label11.Text = LocalizationService.ForSection("PrgAbout")("Command.Help.Source.Label") + Label13.Text = LocalizationService.ForSection("PrgAbout")("Scintilla.Netnu.Get.Label") + If Not MainForm.dtBranch.Contains(LocalizationService.ForSection("PrgAbout")("Pre.Label")) Then + Label15.Text = LocalizationService.ForSection("PrgAbout").Format("BuiltMsbuild.Label", RetrieveLinkerTimestamp()) + Label15.Visible = True + End If + Label16.Text = LocalizationService.ForSection("PrgAbout")("Managed.Dismnu.Get.Label") + Label17.Text = LocalizationService.ForSection("PrgAbout")("BrandingAssets.Label") + Label18.Text = LocalizationService.ForSection("PrgAbout")("Windows.Label") + LinkLabel1.Text = LocalizationService.ForSection("PrgAbout")("Credits.Link") + LinkLabel2.Text = LocalizationService.ForSection("PrgAbout")("Licenses.Link") + LinkLabel3.Text = LocalizationService.ForSection("PrgAbout")("Whatsnew.Link") + LinkLabel4.Text = LocalizationService.ForSection("PrgAbout")("Icons.Link") + LinkLabel5.Text = LocalizationService.ForSection("PrgAbout")("VisitWebsite.Link") + LinkLabel7.Text = LocalizationService.ForSection("PrgAbout")("Microsoft.Link") + LinkLabel9.Text = LocalizationService.ForSection("PrgAbout")("VisitWebsite.Link") + LinkLabel10.Text = LocalizationService.ForSection("PrgAbout")("VisitWebsite.Link") + LinkLabel11.Text = LocalizationService.ForSection("PrgAbout")("Microsoft.Link") + LinkLabel12.Text = LocalizationService.ForSection("PrgAbout")("VisitWebsite.Link") + OK_Button.Text = LocalizationService.ForSection("PrgAbout")("Ok.Button") + UpdCheckBtn.Text = LocalizationService.ForSection("PrgAbout")("CheckUpdates.Label") + RichTextBox1.Text = LocalizationService.ForSection("PrgAbout.Resources")("DISM.Tools.Free.Message") + RichTextBox2.Text = LocalizationService.ForSection("PrgAbout.Resources")("PreviewChanges.Message") ForeColor = Color.White Label15.ForeColor = Color.Black PictureBox1.Image = If(MainForm.dtBranch.Contains("pre"), My.Resources.logo_preview, My.Resources.logo_aboutdlg_dark) @@ -530,87 +241,15 @@ Public Class PrgAbout End Sub Private Sub PictureBox2_MouseHover(sender As Object, e As EventArgs) Handles PictureBox2.MouseHover - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - WindowHelper.DisplayToolTip(sender, "Check out the project's repository on GitHub") - Case "ESN" - WindowHelper.DisplayToolTip(sender, "Consulte el repositorio del proyecto en GitHub") - Case "FRA" - WindowHelper.DisplayToolTip(sender, "Consultez le dépôt du projet sur GitHub") - Case "PTB", "PTG" - WindowHelper.DisplayToolTip(sender, "Consulte o repositório do projeto no GitHub") - Case "ITA" - WindowHelper.DisplayToolTip(sender, "Controlla il repository del progetto su GitHub") - End Select - Case 1 - WindowHelper.DisplayToolTip(sender, "Check out the project's repository on GitHub") - Case 2 - WindowHelper.DisplayToolTip(sender, "Consulte el repositorio del proyecto en GitHub") - Case 3 - WindowHelper.DisplayToolTip(sender, "Consultez le dépôt du projet sur GitHub") - Case 4 - WindowHelper.DisplayToolTip(sender, "Consulte o repositório do projeto no GitHub") - Case 5 - WindowHelper.DisplayToolTip(sender, "Controlla il repository del progetto su GitHub") - End Select + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("PrgAbout.Tooltip")("Project.GitHub.Label")) End Sub Private Sub PictureBox3_MouseHover(sender As Object, e As EventArgs) Handles PictureBox3.MouseHover - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - WindowHelper.DisplayToolTip(sender, "Check out the project's official subreddit") - Case "ESN" - WindowHelper.DisplayToolTip(sender, "Consulte el subreddit oficial del proyecto") - Case "FRA" - WindowHelper.DisplayToolTip(sender, "Consultez le subreddit officiel du projet") - Case "PTB", "PTG" - WindowHelper.DisplayToolTip(sender, "Consulte o subreddit oficial do projeto") - Case "ITA" - WindowHelper.DisplayToolTip(sender, "Controlla il subreddit ufficiale del progetto") - End Select - Case 1 - WindowHelper.DisplayToolTip(sender, "Check out the project's official subreddit") - Case 2 - WindowHelper.DisplayToolTip(sender, "Consulte el subreddit oficial del proyecto") - Case 3 - WindowHelper.DisplayToolTip(sender, "Consultez le subreddit officiel du projet") - Case 4 - WindowHelper.DisplayToolTip(sender, "Consulte o subreddit oficial do projeto") - Case 5 - WindowHelper.DisplayToolTip(sender, "Controlla il subreddit ufficiale del progetto") - End Select + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("PrgAbout.Tooltip")("Text1.Label")) End Sub Private Sub PictureBox4_MouseHover(sender As Object, e As EventArgs) Handles PictureBox4.MouseHover - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - WindowHelper.DisplayToolTip(sender, "Check out the project's discussion on the My Digital Life forums") - Case "ESN" - WindowHelper.DisplayToolTip(sender, "Consulte la discusión del proyecto en los foros de My Digital Life") - Case "FRA" - WindowHelper.DisplayToolTip(sender, "Consultez les discussions sur le projet sur les forums de My Digital Life") - Case "PTB", "PTG" - WindowHelper.DisplayToolTip(sender, "Consulte o debate sobre o projeto nos fóruns do My Digital Life") - Case "ITA" - WindowHelper.DisplayToolTip(sender, "Controlla la discussione del progetto nei forum di My Digital Life") - End Select - Case 1 - WindowHelper.DisplayToolTip(sender, "Check out the project's discussion on the My Digital Life forums") - Case 2 - WindowHelper.DisplayToolTip(sender, "Consulte la discusión del proyecto en los foros de My Digital Life") - Case 3 - WindowHelper.DisplayToolTip(sender, "Consultez les discussions sur le projet sur les forums de My Digital Life") - Case 4 - WindowHelper.DisplayToolTip(sender, "Consulte o debate sobre o projeto nos fóruns do My Digital Life") - Case 5 - WindowHelper.DisplayToolTip(sender, "Controlla la discussione del progetto nei forum di My Digital Life") - End Select + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("PrgAbout.Tooltip")("Project.MDL.Label")) End Sub Private Sub UpdCheckBtn_Click(sender As Object, e As EventArgs) Handles UpdCheckBtn.Click @@ -626,62 +265,15 @@ Public Class PrgAbout client.DownloadFile("https://github.com/CodingWonders/DISMTools/raw/stable/Updater/DISMTools-UCS/update-bin/update.exe", Application.StartupPath & "\update.exe") End Using Catch ex As WebException - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("We couldn't download the update checker. Reason:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, UpdCheckBtn.Text) - Case "ESN" - MsgBox("No pudimos descargar el comprobador de actualizaciones. Razón:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, UpdCheckBtn.Text) - Case "FRA" - MsgBox("Nous n'avons pas pu télécharger le vérificateur de mise à jour. Raison :" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, UpdCheckBtn.Text) - Case "PTB", "PTG" - MsgBox("Não foi possível descarregar o verificador de actualizações. Motivo:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, UpdCheckBtn.Text) - Case "ITA" - MsgBox("Non è stato possibile scaricare il programma di controllo degli aggiornamenti. Motivo:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, UpdCheckBtn.Text) - End Select - Case 1 - MsgBox("We couldn't download the update checker. Reason:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, UpdCheckBtn.Text) - Case 2 - MsgBox("No pudimos descargar el comprobador de actualizaciones. Razón:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, UpdCheckBtn.Text) - Case 3 - MsgBox("Nous n'avons pas pu télécharger le vérificateur de mise à jour. Raison :" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, UpdCheckBtn.Text) - Case 4 - MsgBox("Não foi possível descarregar o verificador de actualizações. Motivo:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, UpdCheckBtn.Text) - Case 5 - MsgBox("Non è stato possibile scaricare il programma di controllo degli aggiornamenti. Motivo:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, UpdCheckBtn.Text) - End Select + MsgBox(LocalizationService.ForSection("PrgAbout.UpdateCheck").Format("Couldn.Tdownload.Message", ex.Status.ToString()), vbOKOnly + vbCritical, UpdCheckBtn.Text) Exit Sub End Try If File.Exists(Application.StartupPath & "\update.exe") Then Process.Start(Application.StartupPath & "\update.exe", "/" & MainForm.dtBranch & " /pid=" & Process.GetCurrentProcess().Id) + OK_Button.PerformClick() End Sub Private Sub PictureBox5_MouseHover(sender As Object, e As EventArgs) Handles PictureBox5.MouseHover - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - WindowHelper.DisplayToolTip(sender, "Join the CodingWonders Software Discord server") - Case "ESN" - WindowHelper.DisplayToolTip(sender, "Unirse al servidor Discord de CodingWonders Software") - Case "FRA" - WindowHelper.DisplayToolTip(sender, "Inscrivez-vous au serveur Discord de CodingWonders Software") - Case "PTB", "PTG" - WindowHelper.DisplayToolTip(sender, "Entre no servidor Discord da CodingWonders Software") - Case "ITA" - WindowHelper.DisplayToolTip(sender, "Unisciti al server Discord di CodingWonders Software") - End Select - Case 1 - WindowHelper.DisplayToolTip(sender, "Join the CodingWonders Software Discord server") - Case 2 - WindowHelper.DisplayToolTip(sender, "Unirse al servidor Discord de CodingWonders Software") - Case 3 - WindowHelper.DisplayToolTip(sender, "Inscrivez-vous au serveur Discord de CodingWonders Software") - Case 4 - WindowHelper.DisplayToolTip(sender, "Entre no servidor Discord da CodingWonders Software") - Case 5 - WindowHelper.DisplayToolTip(sender, "Unisciti al server Discord di CodingWonders Software") - End Select + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("PrgAbout.Tooltip")("Join.Coding.Wonders.Label")) End Sub Private Sub PictureBox5_Click(sender As Object, e As EventArgs) Handles PictureBox5.Click diff --git a/Panels/Exe_Ops/SettingsResetDlg.vb b/Panels/Exe_Ops/SettingsResetDlg.vb index fcbfadbcf..576208009 100644 --- a/Panels/Exe_Ops/SettingsResetDlg.vb +++ b/Panels/Exe_Ops/SettingsResetDlg.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports Microsoft.VisualBasic.ControlChars Public Class SettingsResetDlg @@ -16,61 +16,10 @@ Public Class SettingsResetDlg Private Sub SettingsResetDlg_Load(sender As Object, e As EventArgs) Handles MyBase.Load BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Reset preferences" - Label1.Text = "If you proceed, the settings will be reset to their default values. Once this process is complete, you'll return to the main program window." & CrLf & CrLf & "Do you want to proceed?" - OK_Button.Text = "Yes" - Cancel_Button.Text = "No" - Case "ESN" - Text = "Restablecer preferencias" - Label1.Text = "Si continúa, las configuraciones serán restablecidas a sus valores predeterminados. Cuando este proceso haya completado, regresará a la ventana principal." & CrLf & CrLf & "¿Desea continuar?" - OK_Button.Text = "Sí" - Cancel_Button.Text = "No" - Case "FRA" - Text = "Réinitialiser les préférences" - Label1.Text = "Si vous continuez, les paramètres seront réinitialisés à leurs valeurs par défaut. Une fois ce processus terminé, vous reviendrez à la fenêtre principale du programme." & CrLf & CrLf & "Voulez-vous continuer ?" - OK_Button.Text = "Oui" - Cancel_Button.Text = "Non" - Case "PTB", "PTG" - Text = "Repor preferências" - Label1.Text = "Se prosseguir, as configurações serão repostas para os valores predefinidos. Quando este processo estiver concluído, regressará à janela principal do programa." & CrLf & CrLf & "Deseja continuar?" - OK_Button.Text = "Sim" - Cancel_Button.Text = "Não" - Case "ITA" - Text = "Ripristina preferenze" - Label1.Text = "Se procedi, le impostazioni verranno ripristinate ai valori predefiniti. Al termine di questo processo, si tornerà alla finestra principale del programma." & CrLf & CrLf & "Vuoi procedere?" - OK_Button.Text = "Sì" - Cancel_Button.Text = "No" - End Select - Case 1 - Text = "Reset preferences" - Label1.Text = "If you proceed, the settings will be reset to their default values. Once this process is complete, you'll return to the main program window." & CrLf & CrLf & "Do you want to proceed?" - OK_Button.Text = "Yes" - Cancel_Button.Text = "No" - Case 2 - Text = "Restablecer preferencias" - Label1.Text = "Si continúa, las configuraciones serán restablecidas a sus valores predeterminados. Cuando este proceso haya completado, regresará a la ventana principal." & CrLf & CrLf & "¿Desea continuar?" - OK_Button.Text = "Sí" - Cancel_Button.Text = "No" - Case 3 - Text = "Réinitialiser les préférences" - Label1.Text = "Si vous continuez, les paramètres seront réinitialisés à leurs valeurs par défaut. Une fois ce processus terminé, vous reviendrez à la fenêtre principale du programme." & CrLf & CrLf & "Voulez-vous continuer ?" - OK_Button.Text = "Oui" - Cancel_Button.Text = "Non" - Case 4 - Text = "Repor preferências" - Label1.Text = "Se prosseguir, as configurações serão repostas para os valores predefinidos. Quando este processo estiver concluído, regressará à janela principal do programa." & CrLf & CrLf & "Deseja continuar?" - OK_Button.Text = "Sim" - Cancel_Button.Text = "Não" - Case 5 - Text = "Ripristino preferenze" - Label1.Text = "Se procedi, le impostazioni verranno ripristinate ai valori predefiniti. Al termine di questo processo, si tornerà alla finestra principale del programma." & CrLf & CrLf & "Vuoi procedere?" - OK_Button.Text = "Sì" - Cancel_Button.Text = "No" - End Select + Text = LocalizationService.ForSection("SettingsReset")("ResetPreferences.Label") + Label1.Text = LocalizationService.ForSection("SettingsReset")("ProceedReset.Message") + OK_Button.Text = LocalizationService.ForSection("SettingsReset")("Yes.Button") + Cancel_Button.Text = LocalizationService.ForSection("SettingsReset")("No.Button") Dim handle As IntPtr = WindowHelper.GetWindowHandle(Me) WindowHelper.ToggleDarkTitleBar(handle, CurrentTheme.IsDark) ThemeHelper.UpdateLinkLabelColors(Me, Color.DodgerBlue, CurrentTheme.AccentColors(0)) diff --git a/Panels/FirstUse/IncompleteSetupDlg.vb b/Panels/FirstUse/IncompleteSetupDlg.vb index fdd6aa5d8..0cb46debe 100644 --- a/Panels/FirstUse/IncompleteSetupDlg.vb +++ b/Panels/FirstUse/IncompleteSetupDlg.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports Microsoft.VisualBasic.ControlChars Public Class IncompleteSetupDlg @@ -14,28 +14,9 @@ Public Class IncompleteSetupDlg End Sub Private Sub IncompleteSetupDlg_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label1.Text = "Setup is not complete yet, and your custom settings will not be saved. Proceeding will make the program use default settings." & CrLf & CrLf & "Do you want to proceed?" - OK_Button.Text = "Yes" - Cancel_Button.Text = "No" - Case "ESN" - Label1.Text = "No ha terminado de configurar el programa, y sus preferencias no serán guardadas. Si continúa, el programa utilizará configuraciones predeterminadas." & CrLf & CrLf & "¿Desea continuar?" - OK_Button.Text = "Sí" - Cancel_Button.Text = "No" - Case "FRA" - Label1.Text = "L'installation n'est pas encore terminée et vos paramètres personnalisés ne seront pas sauvegardés. Si vous continuez, le programme utilisera les paramètres par défaut." & CrLf & CrLf & "Voulez-vous continuer ?" - OK_Button.Text = "Oui" - Cancel_Button.Text = "Non" - Case "PTB", "PTG" - Label1.Text = "O assistente de configuração ainda não está concluído e as suas configurações personalizadas não serão guardadas. Se prosseguir, o programa utilizará as configurações predefinidas." & CrLf & CrLf & "Pretende prosseguir?" - OK_Button.Text = "Sim" - Cancel_Button.Text = "Não" - Case "ITA" - Label1.Text = "L'impostazione non è ancora stata completata e le impostazioni personalizzate non verranno salvate. Procedendo, il programma userà le impostazioni predefinite." & CrLf & CrLf & "Vuoi procedere?" - OK_Button.Text = "Sì" - Cancel_Button.Text = "No" - End Select + Label1.Text = LocalizationService.ForSection("IncompleteSetup")("SetupIncomplete.Message") + OK_Button.Text = LocalizationService.ForSection("IncompleteSetup")("Yes.Button") + Cancel_Button.Text = LocalizationService.ForSection("IncompleteSetup")("No.Button") WindowHelper.ToggleDarkTitleBar(Handle, CurrentTheme.IsDark) ThemeHelper.UpdateLinkLabelColors(Me, Color.DodgerBlue, CurrentTheme.AccentColors(0)) BackColor = CurrentTheme.SectionBackgroundColor diff --git a/Panels/FirstUse/PrgSetup.vb b/Panels/FirstUse/PrgSetup.vb index 21159d15b..c74535553 100644 --- a/Panels/FirstUse/PrgSetup.vb +++ b/Panels/FirstUse/PrgSetup.vb @@ -1,18 +1,17 @@ -Imports System.Drawing.Drawing2D +Imports System.Drawing.Drawing2D Imports System.IO Imports Microsoft.VisualBasic.ControlChars Imports System.Net Public Class PrgSetup - Dim ColorModes() As String = New String(2) {"Use system setting", "Light mode", "Dark mode"} - Dim Languages() As String = New String(5) {"Use system language", "English", "Spanish", "French", "Portuguese", "Italian"} - Dim SupportedLangCodes() As String = New String(6) {"ENU", "ENG", "ESN", "FRA", "PTB", "PTG", "ITA"} + Dim ColorModes() As String = New String(2) {String.Empty, String.Empty, String.Empty} Dim btnToolTip As New ToolTip() Private isMouseDown As Boolean = False Private mouseOffset As Point Dim pageInt As Integer = 0 + Private isApplyingLocalizedText As Boolean = False Private Sub minBox_MouseEnter(sender As Object, e As EventArgs) Handles minBox.MouseEnter minBox.Image = My.Resources.minBox_focus @@ -31,19 +30,7 @@ Public Class PrgSetup End Sub Private Sub minBox_MouseHover(sender As Object, e As EventArgs) Handles minBox.MouseHover - Dim msg As String = "" - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Minimize" - Case "ESN" - msg = "Minimizar" - Case "FRA" - msg = "Minimiser" - Case "PTB", "PTG" - msg = "Minimizar" - Case "ITA" - msg = "Minimizza" - End Select + Dim msg As String = LocalizationService.ForSection("PrgSetup.ToolTip")("Minimize.Label") btnToolTip.SetToolTip(sender, msg) End Sub @@ -68,19 +55,7 @@ Public Class PrgSetup End Sub Private Sub closeBox_MouseHover(sender As Object, e As EventArgs) Handles closeBox.MouseHover - Dim msg As String = "" - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Close" - Case "ESN" - msg = "Cerrar" - Case "FRA" - msg = "Fermer" - Case "PTB", "PTG" - msg = "Fechar" - Case "ITA" - msg = "Chiudi" - End Select + Dim msg As String = LocalizationService.ForSection("PrgSetup.ToolTip")("Close.Label") btnToolTip.SetToolTip(sender, msg) End Sub @@ -108,19 +83,7 @@ Public Class PrgSetup End Sub Private Sub backBox_MouseHover(sender As Object, e As EventArgs) Handles backBox.MouseHover - Dim msg As String = "" - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Go back" - Case "ESN" - msg = "Atrás" - Case "FRA" - msg = "Retourner" - Case "PTB", "PTG" - msg = "Voltar atrás" - Case "ITA" - msg = "Indietro" - End Select + Dim msg As String = LocalizationService.ForSection("PrgSetup.ToolTip")("GoBack.Label") btnToolTip.SetToolTip(sender, msg) End Sub @@ -150,8 +113,7 @@ Public Class PrgSetup Private Sub Next_Button_Click(sender As Object, e As EventArgs) Handles Next_Button.Click If pageInt = 4 Then - ' Set program to English if the system language is not supported - If Not SupportedLangCodes.Contains(My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName) Then MainForm.Language = 1 + MainForm.LanguageCode = LocalizationService.NormalizeCultureCode(MainForm.LanguageCode) MainForm.SaveDTSettings() Close() End If @@ -171,7 +133,7 @@ Public Class PrgSetup FinishPanel.Visible = False Case 2 MainForm.ColorMode = ComboBox1.SelectedIndex - MainForm.Language = ComboBox2.SelectedIndex + MainForm.LanguageCode = GetSelectedLanguageCode(ComboBox2, MainForm.LanguageCode) MainForm.LogFont = ComboBox3.SelectedItem MainForm.LogFontSize = NumericUpDown1.Value MainForm.LogFontIsBold = Toggle1.Checked @@ -185,19 +147,7 @@ Public Class PrgSetup Case 3 MainForm.AutoLogs = CheckBox1.Checked If Not CheckBox1.Checked And Not Directory.Exists(Path.GetDirectoryName(TextBox2.Text)) Then - Dim msg As String = "" - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "The folder the log file will be stored on doesn't exist. Make sure it exists and try again." - Case "ESN" - msg = "La carpeta donde se almacenará el archivo de registro no existe. Asegúrese de que exista e inténtelo de nuevo." - Case "FRA" - msg = "Le dossier dans lequel le fichier journal sera stocké n'existe pas. Assurez-vous qu'il existe et réessayez." - Case "PTB", "PTG" - msg = "A pasta onde o ficheiro de registo será guardado não existe. Certifique-se de que existe e tente novamente." - Case "ITA" - msg = "La cartella in cui verrà memorizzato il file registro non esiste. Assicurati che esista e riprovare." - End Select + Dim msg As String = LocalizationService.ForSection("PrgSetup.Next.Actions")("Folder.Log.File.Message") MsgBox(msg, vbOKOnly + vbCritical, Text) Exit Sub End If @@ -217,33 +167,11 @@ Public Class PrgSetup FinishPanel.Visible = True End Select If pageInt = 4 Then - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Next_Button.Text = "Finish" - Case "ESN" - Next_Button.Text = "Finalizar" - Case "FRA" - Next_Button.Text = "Finir" - Case "PTB", "PTG" - Next_Button.Text = "Terminar" - Case "ITA" - Next_Button.Text = "Fine" - End Select + Next_Button.Text = LocalizationService.ForSection("PrgSetup.Next")("Finish.Label") Cancel_Button.Enabled = False closeBox.Enabled = False Else - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Next_Button.Text = "Next" - Case "ESN" - Next_Button.Text = "Siguiente" - Case "FRA" - Next_Button.Text = "Suivant" - Case "PTB", "PTG" - Next_Button.Text = "Seguinte" - Case "ITA" - Next_Button.Text = "Avanti" - End Select + Next_Button.Text = LocalizationService.ForSection("PrgSetup.Next.Actions")("Next.Button") Cancel_Button.Enabled = True closeBox.Enabled = True End If @@ -300,33 +228,11 @@ Public Class PrgSetup FinishPanel.Visible = True End Select If pageInt = 4 Then - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Next_Button.Text = "Finish" - Case "ESN" - Next_Button.Text = "Finalizar" - Case "FRA" - Next_Button.Text = "Finir" - Case "PTB", "PTG" - Next_Button.Text = "Terminar" - Case "ITA" - Next_Button.Text = "Fine" - End Select + Next_Button.Text = LocalizationService.ForSection("PrgSetup.Next")("Finish.Label") Cancel_Button.Enabled = False closeBox.Enabled = False Else - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Next_Button.Text = "Next" - Case "ESN" - Next_Button.Text = "Siguiente" - Case "FRA" - Next_Button.Text = "Suivant" - Case "PTB", "PTG" - Next_Button.Text = "Seguinte" - Case "ITA" - Next_Button.Text = "Avanti" - End Select + Next_Button.Text = LocalizationService.ForSection("PrgSetup.Next.Actions")("Next.Button") Cancel_Button.Enabled = True closeBox.Enabled = True End If @@ -348,6 +254,10 @@ Public Class PrgSetup End Sub Private Sub PrgSetup_Load(sender As Object, e As EventArgs) Handles MyBase.Load + ' The first-use setup always starts in English. + MainForm.LanguageCode = LocalizationService.DefaultCultureCode + LocalizationService.SetLanguageByCultureCode(MainForm.LanguageCode) + ' Generate new settings file and load it MainForm.GenerateDTSettings() MainForm.LoadDTSettings(1) @@ -390,266 +300,11 @@ Public Class PrgSetup ComboBox1.SelectedText = "" ComboBox2.SelectedText = "" - ' Set translations (follow system language) - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Set up DISMTools" - Label1.Text = Text - Label2.Text = "Welcome to DISMTools" - Label3.Text = "DISMTools is a free and open-source, project-driven GUI for DISM operations. To begin setting things up, click Next." - Label5.Text = "Make it yours. Customize this program to your liking and click Next. These settings can be configured at any time in the " & Quote & "Personalization" & Quote & " section in the Options window" - Label6.Text = "Customize this program" - Label7.Text = "Color mode:" - Label8.Text = "Language:" - Label9.Text = "Log window font:" - Label10.Text = "Log file:" - ' Since we start with log level 3, manually show that option - Label11.Text = "Errors, warnings and information messages (Log level 3)" - Label13.Text = "Specify the log settings and click Next. Depending on the content level you specify, we will log more or less information. This setting can be configured at any time in the " & Quote & "Logs" & Quote & " section in the Options window" - Label14.Text = "What should we log when you perform an operation?" - ' Same here - Label16.Text = "The log file should display errors, warnings and information messages after performing an image operation." - Label20.Text = "Is there anything else you would like to configure?" - Label21.Text = "The settings available to you are more than what you've just configured. If you wish to change more of these, click the button below. We'll also make those settings persistent." - Label22.Text = "You can perform these steps at any time." - Label23.Text = "You have finished setting up the basics to use DISMTools the way you wanted. Click " & Quote & "Finish" & Quote & ", and we'll make your settings persistent." - Label24.Text = "Setup is complete" - Label25.Text = "Now that you've set things up, we recommend you do the following things:" - Label26.Text = "Stay up to date to receive new features and an improved experience" - Label27.Text = "Get started with DISMTools and image servicing, so you can get around quicker" - Label28.Text = "Secondary progress panel style:" - Label29.Text = "This font may not be readable on log windows. While you can still use it, we recommend monospaced fonts for increased readability." - Back_Button.Text = "Back" - Next_Button.Text = "Next" - Cancel_Button.Text = "Cancel" - Button1.Text = "Browse..." - Button2.Text = "Use default log file" - Button5.Text = "Configure more settings" - Button6.Text = "Get started" - Button7.Text = "Check for updates" - CheckBox1.Text = "Automatically create logs in the program's log directory" - RadioButton1.Text = "Modern" - RadioButton2.Text = "Classic" - SaveFileDialog1.Title = "Specify the log file" - - ' Configure string arrays to put them in the comboboxes - ColorModes(0) = "Use system setting" - ColorModes(1) = "Light mode" - ColorModes(2) = "Dark mode" - Languages(0) = "Use system language" - Languages(1) = "English" - Languages(2) = "Spanish" - Languages(3) = "French" - Languages(4) = "Portuguese" - Languages(5) = "Italian" - Case "ESN" - Text = "Configurar DISMTools" - Label1.Text = Text - Label2.Text = "Bienvenido a DISMTools" - Label3.Text = "DISMTools es una interfaz gráfica basada en proyectos, gratuita y de código abierto. Para comenzar a configurar el programa, haga clic en Siguiente." - Label5.Text = "Hágalo suyo. Personalice este programa a su gusto y haga clic en Siguiente. Estas opciones pueden ser configuradas en cualquier momento en la sección " & Quote & "Personalización" & Quote & " de la ventana Opciones" - Label6.Text = "Personalice este programa" - Label7.Text = "Modo de color:" - Label8.Text = "Idioma:" - Label9.Text = "Fuente de la ventana de registro:" - Label10.Text = "Archivo de registro:" - ' Since we start with log level 3, manually show that option - Label11.Text = "Errores, advertencias y mensajes de información (Nivel 3)" - Label13.Text = "Especifique las opciones del registro y haga clic en Siguiente. Dependiendo del nivel de contenido que especifique, registraremos más o menos información. Esta opción puede ser configurada en cualquier momento en la sección " & Quote & "Registro" & Quote & " de la ventana Opciones" - Label14.Text = "¿Qué deberíamos registrar cuando realice una operación?" - ' Same here - Label16.Text = "El archivo de registro debe mostrar errores, advertencias y mensajes de información tras realizar una operación." - Label20.Text = "¿Hay algo más que quiera configurar?" - Label21.Text = "Las opciones disponibles son más de las que acaba de configurar. Si desea cambiarlas, haga clic en el botón de abajo. También guardaremos esas preferencias." - Label22.Text = "Puede realizar estos pasos en cualquier momento." - Label23.Text = "Ha terminado de configurar las opciones básicas para utilizar DISMTools como quiso. Haga clic en " & Quote & "Finalizar" & Quote & ", y guardaremos sus preferencias." - Label24.Text = "Configuración completa" - Label25.Text = "Ahora que ha configurado el programa, le recomendamos que haga lo siguiente:" - Label26.Text = "Manténgase al día para recibir nuevas características y una experiencia mejorada" - Label27.Text = "Aprenda DISMTools y el servicio de imágenes para poder manejarse mejor" - Label28.Text = "Estilo del panel de progreso secundario:" - Label29.Text = "Esta fuente podría no ser legible en ventanas de registro. Aunque todavía pueda utilizarla, le recomendamos fuentes monoespaciadas para una legibilidad aumentada." - Back_Button.Text = "Atrás" - Next_Button.Text = "Siguiente" - Cancel_Button.Text = "Cancelar" - Button1.Text = "Examinar..." - Button2.Text = "Utilizar archivo de registro predeterminado" - Button5.Text = "Configurar más opciones" - Button6.Text = "Comenzar" - Button7.Text = "Comprobar actualizaciones" - CheckBox1.Text = "Crear archivos de registro automáticamente en la carpeta de registros del programa" - RadioButton1.Text = "Moderno" - RadioButton2.Text = "Clásico" - SaveFileDialog1.Title = "Especifique el archivo de registro" - - ' Configure string arrays to put them in the comboboxes - ColorModes(0) = "Usar configuración del sistema" - ColorModes(1) = "Modo claro" - ColorModes(2) = "Modo oscuro" - Languages(0) = "Usar idioma del sistema" - Languages(1) = "Inglés" - Languages(2) = "Español" - Languages(3) = "Francés" - Languages(4) = "Portugués" - Languages(5) = "Italiano" - Case "FRA" - Text = "Configurer DISMTools" - Label1.Text = Text - Label2.Text = "Bienvenue à DISMTools" - Label3.Text = "DISMTools est une interface graphique libre et gratuite pour les opérations DISM. Pour commencer à configurer les choses, cliquez sur Suivant." - Label5.Text = "Faites-le vôtre. Personnalisez ce programme à votre guise et cliquez sur Suivant. Ces paramètres peuvent être configurés à tout moment dans la section " & Quote & "Personnalisation" & Quote & " de la fenêtre des paramètres." - Label6.Text = "Personnaliser ce programme" - Label7.Text = "Mode couleur :" - Label8.Text = "Langue :" - Label9.Text = "Fonte de la fenêtre du journal :" - Label10.Text = "Fichier journal :" - ' Since we start with log level 3, manually show that option - Label11.Text = "Erreurs, avertissements et messages d'information (niveau du journal 3)" - Label13.Text = "Spécifiez les paramètres du journal et cliquez sur Suivant. En fonction du niveau de contenu spécifié, nous enregistrerons plus ou moins d'informations. Ce paramètre peut être configuré à tout moment dans la section " & Quote & "Journaux" & Quote & " de la fenêtre des paramètres." - Label14.Text = "Que devons-nous enregistrer lorsque vous effectuez une opération ?" - ' Same here - Label16.Text = "Le fichier journal doit afficher les erreurs, les avertissements et les messages d'information après l'exécution d'une opération d'image." - Label20.Text = "Souhaitez-vous configurer autre chose ?" - Label21.Text = "Les paramètres disponibles sont plus nombreux que ceux que vous venez de configurer. Si vous souhaitez en modifier d'autres, cliquez sur le bouton ci-dessous. Nous rendrons également ces paramètres persistants." - Label22.Text = "Vous pouvez effectuer ces démarches à tout moment." - Label23.Text = "Vous avez fini de configurer les bases pour utiliser DISMTools comme vous le souhaitiez. Cliquez sur " & Quote & "Finir" & Quote & ", et nous rendrons vos paramètres persistants." - Label24.Text = "La configuration est terminée" - Label25.Text = "Maintenant que vous avez tout configuré, nous vous recommandons de procéder aux opérations suivantes :" - Label26.Text = "Restez à jour pour recevoir de nouvelles caractéristiques et une expérience améliorée." - Label27.Text = "Commencez à utiliser DISMTools et le service d'images, afin de vous déplacer plus rapidement." - Label28.Text = "Style du panneau de progression secondaire :" - Label29.Text = "Cette police peut ne pas être lisible sur les fenêtres logiques. Bien que vous puissiez encore l'utiliser, nous recommandons les polices monospaces pour une meilleure lisibilité." - Back_Button.Text = "Retour" - Next_Button.Text = "Suivant" - Cancel_Button.Text = "Annuler" - Button1.Text = "Parcourir..." - Button2.Text = "Utiliser le fichier journal par défaut" - Button5.Text = "Configurer d'autres paramètres" - Button6.Text = "Commencer" - Button7.Text = "Mettre à jour les données" - CheckBox1.Text = "Créer automatiquement des journaux dans le répertoire des journaux du programme" - RadioButton1.Text = "Moderne" - RadioButton2.Text = "Classique" - SaveFileDialog1.Title = "Spécifier le fichier journal" - - ' Configure string arrays to put them in the comboboxes - ColorModes(0) = "Utiliser les paramètres du système" - ColorModes(1) = "Mode lumineux" - ColorModes(2) = "Mode sombre" - Languages(0) = "Utiliser la langue du système" - Languages(1) = "Anglais" - Languages(2) = "Espagnol" - Languages(3) = "Français" - Languages(4) = "Portugais" - Languages(5) = "Italien" - Case "PTB", "PTG" - Text = "Configurar DISMTools" - Label1.Text = Text - Label2.Text = "Bem-vindo ao DISMTools" - Label3.Text = "DISMTools é uma GUI gratuita e de código aberto, orientada para projectos, para operações DISM. Para iniciar a configuração, clique em Seguinte." - Label5.Text = "Torne-o seu. Personalize este programa a seu gosto e clique em Next. Estas configurações podem ser feitas a qualquer momento na secção " & Quote & "Personalização" & Quote & " da janela Opções" - Label6.Text = "Personalizar este programa" - Label7.Text = "Modo de cor:" - Label8.Text = "Idioma:" - Label9.Text = "Tipo de letra da janela de registo:" - Label10.Text = "Ficheiro de registo:" - ' Since we start with log level 3, manually show that option - Label11.Text = "Erros, avisos e mensagens de informação (nível de registo 3)" - Label13.Text = "Especifique as configurações de registo e clique em Seguinte. Dependendo do nível de conteúdo que especificar, registaremos mais ou menos informações. Esta configuração pode ser feita a qualquer momento na secção " & Quote & "Logs" & Quote & " da janela Opções" - Label14.Text = "O que devemos registar quando executa uma operação?" - ' Same here - Label16.Text = "O ficheiro de registo deve apresentar erros, avisos e mensagens de informação após a execução de uma operação de imagem." - Label20.Text = "Há mais alguma coisa que gostaria de configurar?" - Label21.Text = "As configurações disponíveis são mais do que as que acabou de configurar. Se pretender alterar mais definições, clique no botão abaixo. Também vamos tornar essas configurações persistentes." - Label22.Text = "Pode executar estes passos em qualquer altura." - Label23.Text = "Terminou a configuração básica para usar o DISMTools da forma desejada. Clique em " & Quote & "Finish" & Quote & ", e as configurações serão mantidas." - Label24.Text = "A configuração está concluída" - Label25.Text = "Agora que já configurou tudo, recomendamos que efectue as seguintes acções:" - Label26.Text = "Mantenha-se atualizado para receber novas funcionalidades e uma experiência melhorada" - Label27.Text = "Começar a utilizar o DISMTools e o serviço de manutenção de imagens, para obter mais rapidamente" - Label28.Text = "Estilo do painel de progresso secundário:" - Label29.Text = "Esta fonte pode não ser legível em janelas de registo. Embora possa continuar a utilizá-lo, recomendamos tipos de letra monoespaçados para maior legibilidade." - Back_Button.Text = "Voltar" - Next_Button.Text = "Seguinte" - Cancel_Button.Text = "Cancelar" - Button1.Text = "Navegar..." - Button2.Text = "Utilizar ficheiro de registo predefinido" - Button5.Text = "Configurar mais definições" - Button6.Text = "Obter" - Button7.Text = "Verificar se há actualizações" - CheckBox1.Text = "Criar automaticamente registos no diretório de registos do programa" - RadioButton1.Text = "Moderno" - RadioButton2.Text = "Clássico" - SaveFileDialog1.Title = "Especificar o ficheiro de registo" - - ' Configure string arrays to put them in the comboboxes - ColorModes(0) = "Utilizar a configuração do sistema" - ColorModes(1) = "Modo de luz" - ColorModes(2) = "Modo escuro" - Languages(0) = "Utilizar o idioma do sistema" - Languages(1) = "Inglês" - Languages(2) = "Espanhol" - Languages(3) = "Francês" - Languages(4) = "Português" - Languages(5) = "Italiano" - Case "ITA" - Text = "Impostare DISMTools" - Label1.Text = Text - Label2.Text = "Benvenuto in DISMTools" - Label3.Text = "DISMTools è un'interfaccia grafica gratuita e open source, basata su progetti, per le operazioni DISM. Per iniziare a configurare le operazioni, seleziona 'Avanti'" - Label5.Text = "Personalizza questo programma a piacimento e seleziona 'Avanti'. Queste impostazioni possono essere configurate in qualsiasi momento in 'Opzioni' -> 'Personalizzazione'." - Label6.Text = "Personalizzazione di DISMTools" - Label7.Text = "Modalità colore:" - Label8.Text = "Lingua:" - Label9.Text = "Font finestra registro:" - Label10.Text = "File registro:" - ' Since we start with log level 3, manually show that option - Label11.Text = "Errori, avvisi e messaggi informativi (livello registro 3)" - Label13.Text = "Imposta il livello di registrazione e seleziona 'Avanti'. A seconda del livello specificato, verranno registrate più o meno informazioni. Questa impostazione può essere configurata in qualsiasi momento in 'Opzioni' -> 'Registri'." - Label14.Text = "Quali attività registrare quando si esegue un'operazione?" - ' Same here - Label16.Text = "Il file registro visualizza gli errori, le avvertenze e i messaggi informativi dopo l'esecuzione di un'operazione sull'immagine." - Label20.Text = "Vuoi configurare altre impostazioni?" - Label21.Text = "Le impostazioni disponibili sono più di quelle appena configurate. Se vuoi modificarne altre, seleziona il pulsante sottostante. Inoltre, queste impostazioni diventeranno permanenti." - Label22.Text = "È possibile eseguire questi passaggi in qualsiasi momento." - Label23.Text = "Hai completato l'impostazione degli elementi base per usare DISMTools nel modo desiderato. Seleziona 'Fine' e le impostazioni diventeranno permanenti." - Label24.Text = "L'impostazione è stata completa" - Label25.Text = "Ora che hai configurato il programma, ti consigliamo di:" - Label26.Text = "rimani aggiornato per ricevere nuove funzionalità e un'esperienza migliorata." - Label27.Text = "inizia ad usare DISMTools e il servizio di assistenza immagini, in modo da muoverti più rapidamente." - Label28.Text = "Stile pannello avanzamento secondario:" - Label29.Text = "Questo font potrebbe non essere leggibile nelle finestre registro. Anche se è possibile usarla, per una maggiore leggibilità ti consigliamo di usare font mono spaziati." - Back_Button.Text = "Indietro" - Next_Button.Text = "Avanti" - Cancel_Button.Text = "Annulla" - Button1.Text = "Sfoglia..." - Button2.Text = "Usa file registro predefinito" - Button5.Text = "Configura altre impostazioni" - Button6.Text = "Inizia" - Button7.Text = "Controlla aggiornamenti" - CheckBox1.Text = "Crea automaticamente i registri nella cartella registri del programma" - RadioButton1.Text = "Moderno" - RadioButton2.Text = "Classico" - SaveFileDialog1.Title = "Specifica file registro" - - ' Configure string arrays to put them in the comboboxes - ColorModes(0) = "Usa impostazioni sistema" - ColorModes(1) = "Modalità chiara" - ColorModes(2) = "Modalità scura" - Languages(0) = "Usa lingua sistema" - Languages(1) = "Inglese" - Languages(2) = "Spagnolo" - Languages(3) = "Francese" - Languages(4) = "Portoghese" - Languages(5) = "Italiano" - End Select - ' Add new items to the comboboxes - ComboBox1.Items.AddRange(ColorModes) - ComboBox2.Items.AddRange(Languages) + ApplyLocalizedText() - ' Since we default to the system deciding the aforementioned settings, choose the first items + ' English is the default language when no saved language is available. ComboBox1.SelectedIndex = 0 - ComboBox2.SelectedIndex = 0 + SelectLanguageComboBox(ComboBox2, MainForm.LanguageCode) If Not Environment.OSVersion.Version.Major >= 10 Or Not (DetectFont("Segoe UI Variable Display Semib") Or DetectFont("Segoe UI Variable Semib")) Then Label2.Font = New Font("Segoe UI", Label2.Font.Size, FontStyle.Regular) @@ -659,6 +314,182 @@ Public Class PrgSetup End If End Sub + Private Function GetSelectedLanguageCode(comboBox As ComboBox, fallbackCultureCode As String) As String + If comboBox.SelectedItem IsNot Nothing AndAlso TypeOf comboBox.SelectedItem Is LocalizationLanguageInfo Then + Return DirectCast(comboBox.SelectedItem, LocalizationLanguageInfo).Code + End If + + If comboBox.SelectedValue IsNot Nothing Then + Return comboBox.SelectedValue.ToString() + End If + + Return LocalizationService.NormalizeCultureCode(fallbackCultureCode) + End Function + + Private Sub PopulateLanguageComboBox(comboBox As ComboBox, selectedCultureCode As String) + comboBox.Items.Clear() + For Each languageInfo As LocalizationLanguageInfo In LocalizationService.GetAvailableLanguages() + comboBox.Items.Add(languageInfo) + Next + SelectLanguageComboBox(comboBox, selectedCultureCode) + End Sub + + Private Sub SelectLanguageComboBox(comboBox As ComboBox, selectedCultureCode As String) + Dim normalizedCultureCode As String = LocalizationService.NormalizeCultureCode(selectedCultureCode) + Dim selectedIndex As Integer = -1 + + For index As Integer = 0 To comboBox.Items.Count - 1 + Dim languageInfo As LocalizationLanguageInfo = TryCast(comboBox.Items(index), LocalizationLanguageInfo) + If languageInfo IsNot Nothing AndAlso languageInfo.Code.Equals(normalizedCultureCode, StringComparison.OrdinalIgnoreCase) Then + selectedIndex = index + Exit For + End If + Next + + If selectedIndex < 0 Then + For index As Integer = 0 To comboBox.Items.Count - 1 + Dim languageInfo As LocalizationLanguageInfo = TryCast(comboBox.Items(index), LocalizationLanguageInfo) + If languageInfo IsNot Nothing AndAlso languageInfo.Code.Equals(LocalizationService.DefaultCultureCode, StringComparison.OrdinalIgnoreCase) Then + selectedIndex = index + Exit For + End If + Next + End If + + If selectedIndex >= 0 Then comboBox.SelectedIndex = selectedIndex + End Sub + + Private Sub ApplyLocalizedText() + Dim selectedColorMode As Integer = ComboBox1.SelectedIndex + Dim selectedLanguageCode As String = GetSelectedLanguageCode(ComboBox2, MainForm.LanguageCode) + + If selectedColorMode < 0 Then selectedColorMode = 0 + + isApplyingLocalizedText = True + Try + Text = LocalizationService.ForSection("PrgSetup")("Set.Up.DISM.Label") + Label1.Text = Text + Label2.Text = LocalizationService.ForSection("PrgSetup")("Welcome.DISM.Tools.Label") + Label3.Text = LocalizationService.ForSection("PrgSetup")("DISM.Tools.Free.Message") + Label5.Text = LocalizationService.ForSection("PrgSetup")("Yours.Customize.Message") + Label6.Text = LocalizationService.ForSection("PrgSetup")("CustomizeProgram.Label") + Label7.Text = LocalizationService.ForSection("PrgSetup")("ColorMode.Label") + Label8.Text = LocalizationService.ForSection("PrgSetup")("Language.Label") + Label9.Text = LocalizationService.ForSection("PrgSetup")("Log.Window.Font.Label") + Label10.Text = LocalizationService.ForSection("PrgSetup")("LogFile.Label") + Label13.Text = LocalizationService.ForSection("PrgSetup")("Log.Settings.Message") + Label14.Text = LocalizationService.ForSection("PrgSetup")("Log.Label") + Label20.Text = LocalizationService.ForSection("PrgSetup")("Anything.Like.Label") + Label21.Text = LocalizationService.ForSection("PrgSetup")("Settings.Available.Message") + Label22.Text = LocalizationService.ForSection("PrgSetup")("Perform.Steps.Time.Label") + Label23.Text = LocalizationService.ForSection("PrgSetup")("Done.Setting.Up.Message") + Label24.Text = LocalizationService.ForSection("PrgSetup")("SetupComplete.Label") + Label25.Text = LocalizationService.ForSection("PrgSetup")("Ve.Set.Things.Label") + Label26.Text = LocalizationService.ForSection("PrgSetup")("Stay.Up.Date.Label") + Label27.Text = LocalizationService.ForSection("PrgSetup")("Get.Started.DISM.Label") + Label28.Text = LocalizationService.ForSection("PrgSetup")("Secondary.Progress.Label") + Label29.Text = LocalizationService.ForSection("PrgSetup")("Font.Readable.Log.Message") + TextBox1.Text = LocalizationService.ForSection("PrgSetup.LogPreview")("Packages.Add.Message") + ApplySecondaryProgressPreview() + Back_Button.Text = LocalizationService.ForSection("PrgSetup")("Back.Button") + Cancel_Button.Text = LocalizationService.ForSection("PrgSetup")("Cancel.Button") + Button1.Text = LocalizationService.ForSection("PrgSetup")("Browse.Button") + Button2.Text = LocalizationService.ForSection("PrgSetup")("Default.Log.File.Button") + Button5.Text = LocalizationService.ForSection("PrgSetup")("Configure.Settings.Button") + Button6.Text = LocalizationService.ForSection("PrgSetup")("GetStarted.Button") + Button7.Text = LocalizationService.ForSection("PrgSetup")("CheckUpdates.Button") + CheckBox1.Text = LocalizationService.ForSection("PrgSetup")("Auto.Create.Logs.CheckBox") + RadioButton1.Text = LocalizationService.ForSection("PrgSetup")("Modern.RadioButton") + RadioButton2.Text = LocalizationService.ForSection("PrgSetup")("Classic.RadioButton") + SaveFileDialog1.Title = LocalizationService.ForSection("PrgSetup")("Log.File.Title") + SaveFileDialog1.Filter = LocalizationService.ForSection("PrgSetup.Dialogs")("SaveFile.Filter") + + ColorModes(0) = LocalizationService.ForSection("PrgSetup")("System.Setting.Item") + ColorModes(1) = LocalizationService.ForSection("PrgSetup")("LightMode.Item") + ColorModes(2) = LocalizationService.ForSection("PrgSetup")("DarkMode.Item") + ComboBox1.Items.Clear() + ComboBox2.Items.Clear() + ComboBox1.Items.AddRange(ColorModes) + PopulateLanguageComboBox(ComboBox2, selectedLanguageCode) + + ComboBox1.SelectedIndex = Math.Min(selectedColorMode, ComboBox1.Items.Count - 1) + SelectLanguageComboBox(ComboBox2, selectedLanguageCode) + Finally + isApplyingLocalizedText = False + End Try + + ApplyTrackBarText() + ApplyNavigationText() + End Sub + + Private Sub ApplyNavigationText() + If pageInt = 4 Then + Next_Button.Text = LocalizationService.ForSection("PrgSetup.Next")("Finish.Label") + Else + Next_Button.Text = LocalizationService.ForSection("PrgSetup.Next.Actions")("Next.Button") + End If + End Sub + + Private Sub ApplyTrackBarText() + Select Case TrackBar1.Value + Case 0 + Label11.Text = LocalizationService.ForSection("PrgSetup.LogLevel")("Errors.Label") + Label16.Text = LocalizationService.ForSection("PrgSetup.LogLevel")("File.Only.Display.Label") + Case 1 + Label11.Text = LocalizationService.ForSection("PrgSetup.LogLevel")("Errors.Warnings.Label") + Label16.Text = LocalizationService.ForSection("PrgSetup.LogLevel")("File.Display.Errors.Label") + Case 2 + Label11.Text = LocalizationService.ForSection("PrgSetup.LogLevel")("Errors.Messages.Label") + Label16.Text = LocalizationService.ForSection("PrgSetup.LogLevel")("File.Display.Errors.Message") + Case 3 + Label11.Text = LocalizationService.ForSection("PrgSetup.LogLevel")("Errors.Warnings.Debug.Label") + Label16.Text = LocalizationService.ForSection("PrgSetup.LogLevel")("Level3.Message") + End Select + End Sub + + + Private Sub ApplySecondaryProgressPreview() + Dim previewText As String = LocalizationService.ForSection("PrgSetup.ProgressPreview")("ImageIndexes.Message") + Dim waitText As String = LocalizationService.ForSection("PrgSetup.ProgressPreview")("Wait.Label") + SecProgressStylePreview.Image = RenderSecondaryProgressPreview(RadioButton1.Checked, waitText, previewText) + End Sub + + Private Function RenderSecondaryProgressPreview(modernStyle As Boolean, waitText As String, previewText As String) As Bitmap + Dim image As Bitmap = New Bitmap(If(modernStyle, My.Resources.secprogress_modern, My.Resources.secprogress_classic)) + + Using graphics As Graphics = Graphics.FromImage(image) + graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias + graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit + + Using backgroundBrush As New SolidBrush(Color.FromArgb(32, 32, 32)) + If modernStyle Then + graphics.FillRectangle(backgroundBrush, 1, 1, image.Width - 2, image.Height - 2) + Else + graphics.FillRectangle(backgroundBrush, 55, 1, image.Width - 56, image.Height - 2) + End If + End Using + + Using textBrush As New SolidBrush(Color.White) + If modernStyle Then + Using previewFont As New Font("Segoe UI", 9.0F, FontStyle.Regular) + Using format As New StringFormat() With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Center} + graphics.DrawString(previewText, previewFont, textBrush, New RectangleF(0, 0, image.Width, image.Height), format) + End Using + End Using + Else + Using waitFont As New Font("Segoe UI", 8.25F, FontStyle.Bold) + Using previewFont As New Font("Segoe UI", 8.25F, FontStyle.Regular) + graphics.DrawString(waitText, waitFont, textBrush, New PointF(56.0F, 13.0F)) + graphics.DrawString(previewText, previewFont, textBrush, New PointF(56.0F, 29.0F)) + End Using + End Using + End If + End Using + End Using + + Return image + End Function + Function DetectFont(FontName As String) As Boolean DynaLog.LogMessage("Detecting if specified font is installed in this computer...") DynaLog.LogMessage("Font to test: " & FontName) @@ -731,88 +562,34 @@ Public Class PrgSetup End Sub Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged - MainForm.Language = ComboBox2.SelectedIndex + If isApplyingLocalizedText Then Return + If ComboBox2.SelectedIndex < 0 Then Return + + Dim previousLanguageCode As String = MainForm.LanguageCode + Dim selectedLanguageCode As String = GetSelectedLanguageCode(ComboBox2, previousLanguageCode) + Dim validationMessage As String = "" + If Not LocalizationService.ValidateLanguage(selectedLanguageCode, validationMessage) Then + MessageBox.Show(validationMessage, + "Incompatible or invalid DISMTools language file", + MessageBoxButtons.OK, + MessageBoxIcon.Error) + isApplyingLocalizedText = True + Try + SelectLanguageComboBox(ComboBox2, previousLanguageCode) + Finally + isApplyingLocalizedText = False + End Try + Return + End If + + MainForm.LanguageCode = selectedLanguageCode + LocalizationService.SetLanguageByCultureCode(MainForm.LanguageCode) + ApplyLocalizedText() End Sub Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll DynaLog.LogMessage("Value of log level trackbar: " & TrackBar1.Value) - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Select Case TrackBar1.Value - Case 0 - Label11.Text = "Errors (Log level 1)" - Label16.Text = "The log file should only display errors after performing an image operation." - Case 1 - Label11.Text = "Errors and warnings (Log level 2)" - Label16.Text = "The log file should display errors and warnings after performing an image operation." - Case 2 - Label11.Text = "Errors, warnings and information messages (Log level 3)" - Label16.Text = "The log file should display errors, warnings and information messages after performing an image operation." - Case 3 - Label11.Text = "Errors, warnings, information and debug messages (Log level 4)" - Label16.Text = "The log file should display errors, warnings, information and debug messages after performing an image operation." - End Select - Case "ESN" - Select Case TrackBar1.Value - Case 0 - Label11.Text = "Errores (Nivel 1)" - Label16.Text = "El archivo de registro solo debe mostrar errores tras realizar una operación." - Case 1 - Label11.Text = "Errores y advertencias (Nivel 2)" - Label16.Text = "El archivo de registro debe mostrar errores y advertencias tras realizar una operación." - Case 2 - Label11.Text = "Errores, advertencias y mensajes de información (Nivel 3)" - Label16.Text = "El archivo de registro debe mostrar errores, advertencias y mensajes de información tras realizar una operación." - Case 3 - Label11.Text = "Errores, advertencias, mensajes de información y de depuración (Nivel 4)" - Label16.Text = "El archivo de registro debe mostrar errores, advertencias, mensajes de información y de depuración tras realizar una operación." - End Select - Case "FRA" - Select Case TrackBar1.Value - Case 0 - Label11.Text = "Erreurs (niveau du journal 1)" - Label16.Text = "Le fichier journal ne doit afficher les erreurs qu'après l'exécution d'une opération d'image." - Case 1 - Label11.Text = "Erreurs et avertissements (niveau de journal 2)" - Label16.Text = "Le fichier journal doit afficher les erreurs et les avertissements après l'exécution d'une opération d'image." - Case 2 - Label11.Text = "Erreurs, avertissements et messages d'information (niveau du journal 3)" - Label16.Text = "Le fichier journal doit afficher les erreurs, les avertissements et les messages d'information après l'exécution d'une opération d'image." - Case 3 - Label11.Text = "Erreurs, avertissements, informations et messages de débogage (niveau du journal 4)" - Label16.Text = "Le fichier journal doit afficher les erreurs, les avertissements, les informations et les messages de débogage après l'exécution d'une opération d'image." - End Select - Case "PTB", "PTG" - Select Case TrackBar1.Value - Case 0 - Label11.Text = "Erros (nível de registo 1)" - Label16.Text = "O ficheiro de registo só deve apresentar erros depois de executar uma operação de imagem." - Case 1 - Label11.Text = "Erros e avisos (nível de registo 2)" - Label16.Text = "O ficheiro de registo deve apresentar erros e avisos após a realização de uma operação de imagem." - Case 2 - Label11.Text = "Erros, avisos e mensagens de informação (nível de registo 3)" - Label16.Text = "O ficheiro de registo deve apresentar erros, avisos e mensagens de informação após a realização de uma operação de imagem." - Case 3 - Label11.Text = "Erros, avisos, informações e mensagens de depuração (nível de registo 4)" - Label16.Text = "O ficheiro de registo deve apresentar erros, avisos, informações e mensagens de depuração após a realização de uma operação de imagem." - End Select - Case "ITA" - Select Case TrackBar1.Value - Case 0 - Label11.Text = "Errori (livello di log 1)" - Label16.Text = "Il file di registro dovrebbe visualizzare gli errori solo dopo l'esecuzione di un'operazione di immagine" - Case 1 - Label11.Text = "Errori e avvisi (livello di registro 2)" - Label16.Text = "Il file di log deve visualizzare errori e avvisi dopo l'esecuzione di un'operazione di immagine" - Case 2 - Label11.Text = "Errori, avvisi e messaggi informativi (livello di registro 3)" - Label16.Text = "Il file di log deve visualizzare errori, avvisi e messaggi informativi dopo l'esecuzione di un'operazione di immagine." - Case 3 - Label11.Text = "Errori, avvisi, informazioni e messaggi di debug (livello di registro 4)" - Label16.Text = "Il file di log deve visualizzare errori, avvisi, informazioni e messaggi di debug dopo l'esecuzione di un'operazione di immagine." - End Select - End Select + ApplyTrackBarText() MainForm.LogLevel = TrackBar1.Value + 1 End Sub @@ -824,11 +601,7 @@ Public Class PrgSetup End Sub Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged - If RadioButton1.Checked Then - SecProgressStylePreview.Image = My.Resources.secprogress_modern - Else - SecProgressStylePreview.Image = My.Resources.secprogress_classic - End If + ApplySecondaryProgressPreview() End Sub Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged @@ -863,25 +636,14 @@ Public Class PrgSetup End Using Catch ex As WebException DynaLog.LogMessage("Could not get updater. Error message: " & ex.Status.ToString()) - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - MsgBox("We couldn't download the update checker. Reason:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Check for updates") - Case "ESN" - MsgBox("No pudimos descargar el comprobador de actualizaciones. Razón:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Comprobar actualizaciones") - Case "FRA" - MsgBox("Nous n'avons pas pu télécharger le vérificateur de mise à jour. Raison :" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Mettre à jour les données") - Case "PTB", "PTG" - MsgBox("Não foi possível descarregar o verificador de actualizações. Motivo:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Verificar actualizações") - Case "ITA" - MsgBox("Non è stato possibile scaricare il programma di controllo degli aggiornamenti. Motivo:" & CrLf & ex.Status.ToString(), vbOKOnly + vbCritical, "Verifica aggiornamenti") - End Select + MsgBox(LocalizationService.ForSection("PrgSetup.Validation").Format("DownloadFailure.Message", ex.Status.ToString()), vbOKOnly + vbCritical, LocalizationService.ForSection("PrgSetup.Actions")("UpdateChecker.Title")) Exit Sub End Try DynaLog.LogMessage("Information to pass to updater:") DynaLog.LogMessage("- Branch: " & MainForm.dtBranch) DynaLog.LogMessage("- Process ID (PID): " & Process.GetCurrentProcess().Id) If File.Exists(Application.StartupPath & "\update.exe") Then - Process.Start(Application.StartupPath & "\update.exe", "/" & MainForm.dtBranch & " /pid=" & Process.GetCurrentProcess().Id) + Process.Start(Application.StartupPath & "\update.exe", "/" & MainForm.dtBranch & " /pid=" & Process.GetCurrentProcess().Id & " " & LocalizationService.GetLanguageCommandLineArgument()) Next_Button.PerformClick() End If End Sub @@ -895,4 +657,4 @@ Public Class PrgSetup WindowState = FormWindowState.Normal End If End Sub -End Class \ No newline at end of file +End Class diff --git a/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.Designer.vb b/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.Designer.vb index 7c5ca5636..41ceb74ee 100644 --- a/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.Designer.vb +++ b/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.Designer.vb @@ -63,6 +63,7 @@ Partial Class GetAppxPkgInfoDlg Me.FlowLayoutPanel4 = New System.Windows.Forms.FlowLayoutPanel() Me.Button2 = New System.Windows.Forms.Button() Me.ImageTaskHeader1 = New DISMTools.ImageTaskHeader() + Me.WizardBtn = New System.Windows.Forms.Button() Me.FeatureInfoPanel.SuspendLayout() CType(Me.SplitContainer2, System.ComponentModel.ISupportInitialize).BeginInit() Me.SplitContainer2.Panel1.SuspendLayout() @@ -132,6 +133,7 @@ Partial Class GetAppxPkgInfoDlg 'SearchPanel ' Me.SearchPanel.Controls.Add(Me.Panel1) + Me.SearchPanel.Controls.Add(Me.WizardBtn) Me.SearchPanel.Controls.Add(Me.SearchPic) Me.SearchPanel.Dock = System.Windows.Forms.DockStyle.Bottom Me.SearchPanel.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) @@ -146,7 +148,7 @@ Partial Class GetAppxPkgInfoDlg Me.Panel1.Dock = System.Windows.Forms.DockStyle.Fill Me.Panel1.Location = New System.Drawing.Point(24, 0) Me.Panel1.Name = "Panel1" - Me.Panel1.Size = New System.Drawing.Size(416, 24) + Me.Panel1.Size = New System.Drawing.Size(392, 24) Me.Panel1.TabIndex = 3 ' 'SearchBox1 @@ -156,7 +158,7 @@ Partial Class GetAppxPkgInfoDlg Me.SearchBox1.Font = New System.Drawing.Font("Segoe UI", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.SearchBox1.Location = New System.Drawing.Point(8, 3) Me.SearchBox1.Name = "SearchBox1" - Me.SearchBox1.Size = New System.Drawing.Size(405, 18) + Me.SearchBox1.Size = New System.Drawing.Size(381, 18) Me.SearchBox1.TabIndex = 1 ' 'SearchPic @@ -549,6 +551,19 @@ Partial Class GetAppxPkgInfoDlg Me.ImageTaskHeader1.Size = New System.Drawing.Size(1008, 48) Me.ImageTaskHeader1.TabIndex = 13 ' + 'WizardBtn + ' + Me.WizardBtn.Dock = System.Windows.Forms.DockStyle.Right + Me.WizardBtn.FlatAppearance.MouseDownBackColor = System.Drawing.Color.DimGray + Me.WizardBtn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.DarkGray + Me.WizardBtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat + Me.WizardBtn.Image = Global.DISMTools.My.Resources.Resources.assistant_light + Me.WizardBtn.Location = New System.Drawing.Point(416, 0) + Me.WizardBtn.Name = "WizardBtn" + Me.WizardBtn.Size = New System.Drawing.Size(24, 24) + Me.WizardBtn.TabIndex = 5 + Me.WizardBtn.UseVisualStyleBackColor = True + ' 'GetAppxPkgInfoDlg ' Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) @@ -626,5 +641,6 @@ Partial Class GetAppxPkgInfoDlg Friend WithEvents SearchBox1 As DISMTools.SearchBox Friend WithEvents SearchPic As System.Windows.Forms.PictureBox Friend WithEvents ImageTaskHeader1 As DISMTools.ImageTaskHeader + Friend WithEvents WizardBtn As System.Windows.Forms.Button End Class diff --git a/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb b/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb index e817daab4..f368b2601 100644 --- a/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb +++ b/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports System.IO Imports Microsoft.Dism Imports DISMTools.Utilities @@ -14,202 +14,36 @@ Public Class GetAppxPkgInfoDlg Private FilteredAppxPackages As IEnumerable(Of DismAppxPackage) Private FilteredAppxPackages_Backup As IEnumerable(Of ImageAppxPackage) + Private SidInformation As New Dictionary(Of String, Dictionary(Of String, String)) + + Enum SearchMode As Integer + None + RegisteredToNoOne + RegisteredToAnyone + RegisteredToMe + RegisteredToSid + RegisteredToName + End Enum + Private Sub GetAppxPkgInfoDlg_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Get AppX package information" - ImageTaskHeader1.ItemText = Text - Label36.Text = "AppX package information" - Label37.Text = "Select an installed AppX package on the left to view its information here" - Label22.Text = "Package name:" - Label24.Text = "Application display name:" - Label26.Text = "Architecture:" - Label31.Text = "Resource ID:" - Label41.Text = "Version:" - Label43.Text = "Is registered to any user?" - Label4.Text = "Installation directory:" - Label6.Text = "Package manifest location:" - Label8.Text = "Store logo asset directory:" - Label9.Text = "Main store logo asset:" - Label10.Text = "This asset has been guessed by DISMTools based on its size, which can lead to an incorrect result. If that happens, please report an issue on the GitHub repository" - LinkLabel1.Text = "This asset is not the one I'm looking for" - Button2.Text = "Save..." - SearchBox1.cueBanner = "Type here to search for an application..." - Case "ESN" - Text = "Obtener información de paquetes AppX" - ImageTaskHeader1.ItemText = Text - Label36.Text = "Información de paquete AppX" - Label37.Text = "Seleccione un paquete AppX instalado en la izquierda para ver su información aquí" - Label22.Text = "Nombre de paquete:" - Label24.Text = "Nombre de aplicación a mostrar:" - Label26.Text = "Arquitectura:" - Label31.Text = "ID de recurso:" - Label41.Text = "Versión:" - Label43.Text = "¿Está registrado a algún usuario?" - Label4.Text = "Directorio de instalación:" - Label6.Text = "Ubicación del manifiesto del paquete:" - Label8.Text = "Directorio de recursos de logotipos de Tienda:" - Label9.Text = "Recurso de logotipos de Tienda principal:" - Label10.Text = "Este recurso ha sido averiguado por DISMTools por su tamaño, lo que puede llevar a un resultado incorrecto. Si eso ocurre, informe de un problema en el repositorio de GitHub" - LinkLabel1.Text = "Este recurso no es el que estaba buscando" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Escriba aquí para buscar una aplicación..." - Case "FRA" - Text = "Obtenir des informations sur les paquets AppX" - ImageTaskHeader1.ItemText = Text - Label36.Text = "Informations sur le paquet AppX" - Label37.Text = "Sélectionnez un paquet AppX installé sur la gauche pour afficher son information ici." - Label22.Text = "Nom du paquet :" - Label24.Text = "Nom d'affichage de l'application :" - Label26.Text = "Architecture :" - Label31.Text = "ID de la ressource :" - Label41.Text = "Version :" - Label43.Text = "Est-il enregistré au nom d'un utilisateur ?" - Label4.Text = "Répertoire d'installation :" - Label6.Text = "Emplacement du manifeste du paquet :" - Label8.Text = "Répertoire du logo du magasin :" - Label9.Text = "Logo du magasin principal :" - Label10.Text = "Ce bien a été deviné par DISMTools sur la base de sa taille, ce qui peut conduire à un résultat incorrect. Si cela se produit, veuillez signaler un problème sur le dépôt GitHub." - LinkLabel1.Text = "Cette ressource n'est pas celle que je recherche" - Button2.Text = "Sauvegarder..." - SearchBox1.cueBanner = "Tapez ici pour rechercher une application..." - Case "PTB", "PTG" - Text = "Obter informações do pacote AppX" - ImageTaskHeader1.ItemText = Text - Label36.Text = "Informações do pacote AppX" - Label37.Text = "Seleccione um pacote AppX instalado à esquerda para ver as suas informações aqui" - Label22.Text = "Nome do pacote:" - Label24.Text = "Nome de apresentação da aplicação:" - Label26.Text = "Arquitetura:" - Label31.Text = "ID do recurso:" - Label41.Text = "Versão:" - Label43.Text = "Está registada para algum utilizador?" - Label4.Text = "Diretório de instalação:" - Label6.Text = "Localização do manifesto do pacote:" - Label8.Text = "Diretório de activos do logótipo da loja:" - Label9.Text = "Ativo do logótipo principal da loja:" - Label10.Text = "Este ativo foi adivinhado pelo DISMTools com base no seu tamanho, o que pode conduzir a um resultado incorreto. Se isso acontecer, comunique um problema no repositório do GitHub" - LinkLabel1.Text = "Este recurso não é o que estou à procura" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Digite aqui para pesquisar uma aplicação..." - Case "ITA" - Text = "Verifica informazioni pacchetto AppX" - ImageTaskHeader1.ItemText = Text - Label36.Text = "Informazioni pacchetti AppX" - Label37.Text = "Seleziona un pacchetto AppX installato a sinistra per visualizzarne qui le informazioni" - Label22.Text = "Nome pacchetto:" - Label24.Text = "Nome applicazione visualizzato:" - Label26.Text = "Architettura:" - Label31.Text = "ID risorsa:" - Label41.Text = "Versione:" - Label43.Text = "È registrato a qualche utente?" - Label4.Text = "Cartella installazione:" - Label6.Text = "Percorso manifesto pacchetto:" - Label8.Text = "Cartella risorse logo negozio:" - Label9.Text = "Asset principale logo negozio:" - Label10.Text = "Questa risorsa è stata rilevata da DISMTools in base alle sue dimensioni, il che può portare ad un risultato errato. Se ciò accade, segnala il problema nel repository GitHub" - LinkLabel1.Text = "Questa risorsa non è quella cercata" - Button2.Text = "Salva..." - SearchBox1.cueBanner = "Digita qui per cercare un'applicazione..." - End Select - Case 1 - Text = "Get AppX package information" - ImageTaskHeader1.ItemText = Text - Label36.Text = "AppX package information" - Label37.Text = "Select an installed AppX package on the left to view its information here" - Label22.Text = "Package name:" - Label24.Text = "Application display name:" - Label26.Text = "Architecture:" - Label31.Text = "Resource ID:" - Label41.Text = "Version:" - Label43.Text = "Is registered to any user?" - Label4.Text = "Installation directory:" - Label6.Text = "Package manifest location:" - Label8.Text = "Store logo asset directory:" - Label9.Text = "Main store logo asset:" - Label10.Text = "This asset has been guessed by DISMTools based on its size, which can lead to an incorrect result. If that happens, please report an issue on the GitHub repository" - LinkLabel1.Text = "This asset is not the one I'm looking for" - Button2.Text = "Save..." - SearchBox1.cueBanner = "Type here to search for an application..." - Case 2 - Text = "Obtener información de paquetes AppX" - ImageTaskHeader1.ItemText = Text - Label36.Text = "Información de paquete AppX" - Label37.Text = "Seleccione un paquete AppX instalado en la izquierda para ver su información aquí" - Label22.Text = "Nombre de paquete:" - Label24.Text = "Nombre de aplicación a mostrar:" - Label26.Text = "Arquitectura:" - Label31.Text = "ID de recurso:" - Label41.Text = "Versión:" - Label43.Text = "¿Está registrado a algún usuario?" - Label4.Text = "Directorio de instalación:" - Label6.Text = "Ubicación del manifiesto del paquete:" - Label8.Text = "Directorio de recursos de logotipos de Tienda:" - Label9.Text = "Recurso de logotipos de Tienda principal:" - Label10.Text = "Este recurso ha sido averiguado por DISMTools por su tamaño, lo que puede llevar a un resultado incorrecto. Si eso ocurre, informe de un problema en el repositorio de GitHub" - LinkLabel1.Text = "Este recurso no es el que estaba buscando" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Escriba aquí para buscar una aplicación..." - Case 3 - Text = "Obtenir des informations sur les paquets AppX" - ImageTaskHeader1.ItemText = Text - Label36.Text = "Informations sur le paquet AppX" - Label37.Text = "Sélectionnez un paquet AppX installé sur la gauche pour afficher son information ici." - Label22.Text = "Nom du paquet :" - Label24.Text = "Nom d'affichage de l'application :" - Label26.Text = "Architecture :" - Label31.Text = "ID de la ressource :" - Label41.Text = "Version :" - Label43.Text = "Est-il enregistré au nom d'un utilisateur ?" - Label4.Text = "Répertoire d'installation :" - Label6.Text = "Emplacement du manifeste du paquet :" - Label8.Text = "Répertoire du logo du magasin :" - Label9.Text = "Logo du magasin principal :" - Label10.Text = "Ce bien a été deviné par DISMTools sur la base de sa taille, ce qui peut conduire à un résultat incorrect. Si cela se produit, veuillez signaler un problème sur le dépôt GitHub." - LinkLabel1.Text = "Cette ressource n'est pas celle que je recherche" - Button2.Text = "Sauvegarder..." - SearchBox1.cueBanner = "Tapez ici pour rechercher une application..." - Case 4 - Text = "Obter informações do pacote AppX" - ImageTaskHeader1.ItemText = Text - Label36.Text = "Informações do pacote AppX" - Label37.Text = "Seleccione um pacote AppX instalado à esquerda para ver as suas informações aqui" - Label22.Text = "Nome do pacote:" - Label24.Text = "Nome de apresentação da aplicação:" - Label26.Text = "Arquitetura:" - Label31.Text = "ID do recurso:" - Label41.Text = "Versão:" - Label43.Text = "Está registada para algum utilizador?" - Label4.Text = "Diretório de instalação:" - Label6.Text = "Localização do manifesto do pacote:" - Label8.Text = "Diretório de activos do logótipo da loja:" - Label9.Text = "Ativo do logótipo principal da loja:" - Label10.Text = "Este ativo foi adivinhado pelo DISMTools com base no seu tamanho, o que pode conduzir a um resultado incorreto. Se isso acontecer, comunique um problema no repositório do GitHub" - LinkLabel1.Text = "Este recurso não é o que estou à procura" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Digite aqui para pesquisar uma aplicação..." - Case 5 - Text = "Verifica informazioni sul pacchetto AppX" - ImageTaskHeader1.ItemText = Text - Label36.Text = "Informazioni pacchetti AppX" - Label37.Text = "Seleziona un pacchetto AppX installato a sinistra per visualizzarne qui le informazioni" - Label22.Text = "Nome pacchetto:" - Label24.Text = "Nome applicazione visualizzato:" - Label26.Text = "Architettura:" - Label31.Text = "ID risorsa:" - Label41.Text = "Versione:" - Label43.Text = "È registrato a qualche utente?" - Label4.Text = "Cartella installazione:" - Label6.Text = "Percorso manifesto pacchetto:" - Label8.Text = "Cartella risorse logo negozio:" - Label9.Text = "Asset principale logo negozio:" - Label10.Text = "Questa risorsa è stata rilevata da DISMTools in base alle sue dimensioni, il che può portare ad un risultato errato. Se ciò accade, segnala il problema nel repository GitHub" - LinkLabel1.Text = "Questa risorsa non è quella cercata" - Button2.Text = "Salva..." - SearchBox1.cueBanner = "Digita qui per cercare un'applicazione..." - End Select + Text = LocalizationService.ForSection("Get.AppX")("AppX.Package.Label") + ImageTaskHeader1.ItemText = LocalizationService.ForSection("Get.AppX").Format("Image.Task.Header.Label", Text) + Label36.Text = LocalizationService.ForSection("Get.AppX")("AppX.Package.Label.Label") + Label37.Text = LocalizationService.ForSection("Get.AppX")("Installed.AppX.Label") + Label22.Text = LocalizationService.ForSection("Get.AppX")("PackageName.Label") + Label24.Text = LocalizationService.ForSection("Get.AppX")("Display.Name.Label") + Label26.Text = LocalizationService.ForSection("Get.AppX")("Architecture.Label") + Label31.Text = LocalizationService.ForSection("Get.AppX")("ResourceID.Label") + Label41.Text = LocalizationService.ForSection("Get.AppX")("Version.Label") + Label43.Text = LocalizationService.ForSection("Get.AppX")("Registered.User.Label") + Label4.Text = LocalizationService.ForSection("Get.AppX")("Install.Dir.Label") + Label6.Text = LocalizationService.ForSection("Get.AppX")("Package.Manifest.Label") + Label8.Text = LocalizationService.ForSection("Get.AppX")("StoreLogo.Asset.Dir.Label") + Label9.Text = LocalizationService.ForSection("Get.AppX")("Main.StoreLogo.Asset.Label") + Label10.Text = LocalizationService.ForSection("Get.AppX")("Asset.Guessed.DISM.Message") + LinkLabel1.Text = LocalizationService.ForSection("Get.AppX")("Asset.One.IM.Link") + Button2.Text = LocalizationService.ForSection("Get.AppX")("Save.Button") + SearchBox1.cueBanner = LocalizationService.ForSection("Get.AppX")("Type.Search.Label") ImageTaskHeader1.SetColors() BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor @@ -218,6 +52,7 @@ Public Class GetAppxPkgInfoDlg SearchBox1.BackColor = BackColor SearchBox1.ForeColor = ForeColor SearchPic.Image = GetGlyphResource("search") + WizardBtn.Image = GetGlyphResource("assistant") If SplitContainer2.SplitterDistance = 440 Then SplitContainer2.SplitterDistance = WindowHelper.ScaleLogical(SplitContainer2.SplitterDistance) End If @@ -251,9 +86,24 @@ Public Class GetAppxPkgInfoDlg End If SearchBox1.Text = "" + SidInformation.Clear() + If MainForm.OnlineManagement Then + If Not Debugger.IsAttached Then DynaLog.DisableLogging() + For Each ListItem In ListBox1.Items + SidInformation.Add(ListItem, AppxHelper.GetRegistrationPckgdepSidInfo(MainForm.MountDir, + If(MainForm.CurrentImage.ImageAppxPackages_Backup.Count > MainForm.CurrentImage.ImageAppxPackages.Count, + MainForm.CurrentImage.ImageAppxPackages_Backup.ElementAtOrDefault(ListBox1.Items.IndexOf(ListItem)), + MainForm.CurrentImage.ImageAppxPackages.ElementAtOrDefault(ListBox1.Items.IndexOf(ListItem))))) + + Next + If Not Debugger.IsAttached Then DynaLog.EnableLogging() + End If + AppxHelper.ClearRootPaths() AppxHelper.SetRootPaths(MainForm.MountDir) ImageTaskHeader1.HideWindowTitle(handle) + + WizardBtn.Enabled = MainForm.OnlineManagement End Sub Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged @@ -385,37 +235,15 @@ Public Class GetAppxPkgInfoDlg ' Get exclusive things that can't be obtained with the DISM API Dim IsPackageRegistered As Boolean If MainForm.CurrentImage.ImageAppxPackages Is Nothing OrElse MainForm.CurrentImage.ImageAppxPackages_Backup.Count > MainForm.CurrentImage.ImageAppxPackages.Count Then - IsPackageRegistered = AppxHelper.IsPackageRegistered(MainForm.MountDir, MainForm.CurrentImage.ImageAppxPackages_Backup.ElementAtOrDefault(ListBox1.SelectedIndex)) + IsPackageRegistered = AppxHelper.IsPackageRegistered(MainForm.MountDir, + If(SearchBox1.Text <> "", FilteredAppxPackages_Backup.ElementAtOrDefault(ListBox1.SelectedIndex), MainForm.CurrentImage.ImageAppxPackages_Backup.ElementAtOrDefault(ListBox1.SelectedIndex))) Else - IsPackageRegistered = AppxHelper.IsPackageRegistered(MainForm.MountDir, MainForm.CurrentImage.ImageAppxPackages.ElementAtOrDefault(ListBox1.SelectedIndex)) + IsPackageRegistered = AppxHelper.IsPackageRegistered(MainForm.MountDir, + If(SearchBox1.Text <> "", FilteredAppxPackages.ElementAtOrDefault(ListBox1.SelectedIndex), MainForm.CurrentImage.ImageAppxPackages.ElementAtOrDefault(ListBox1.SelectedIndex))) End If If IsPackageRegistered Then - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label42.Text = "Yes" - Case "ESN" - Label42.Text = "Sí" - Case "FRA" - Label42.Text = "Oui" - Case "PTB", "PTG" - Label42.Text = "Sim" - Case "ITA" - Label42.Text = "Sì" - End Select - Case 1 - Label42.Text = "Yes" - Case 2 - Label42.Text = "Sí" - Case 3 - Label42.Text = "Oui" - Case 4 - Label42.Text = "Sim" - Case 5 - Label42.Text = "Sì" - End Select + Label42.Text = LocalizationService.ForSection("Get.AppX.PackageList")("Yes.Button") If MainForm.OnlineManagement AndAlso Not MainForm.NoNTSamMappings Then DynaLog.LogMessage("Online installation management mode has been detected and we're expected to map SAM information. Proceeding...") Try @@ -429,31 +257,7 @@ Public Class GetAppxPkgInfoDlg End Try End If Else - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label42.Text = "No" - Case "ESN" - Label42.Text = "No" - Case "FRA" - Label42.Text = "Non" - Case "PTB", "PTG" - Label42.Text = "Não" - Case "ITA" - Label42.Text = "No" - End Select - Case 1 - Label42.Text = "No" - Case 2 - Label42.Text = "No" - Case 3 - Label42.Text = "Non" - Case 4 - Label42.Text = "Não" - Case 5 - Label42.Text = "No" - End Select + Label42.Text = LocalizationService.ForSection("Get.AppX.PackageList")("No.Button") End If DynaLog.LogMessage("Getting AppX main Store logo asset...") @@ -491,10 +295,8 @@ Public Class GetAppxPkgInfoDlg If assetDir <> "" Then DynaLog.LogMessage("Getting full asset directory...") If File.Exists(assetDir & "\AppxManifest.xml") Then - Dim ManFile As New RichTextBox() With { - .Text = File.ReadAllText(assetDir & "\AppxManifest.xml") - } - For Each line In ManFile.Lines + Dim ManFileLines As String() = File.ReadAllLines(assetDir & "\AppxManifest.xml") + For Each line In ManFileLines If line.Contains("") Then Dim SplitPaths As New List(Of String) SplitPaths = line.Replace(" ", "").Trim().Replace("/", "").Trim().Replace("", "").Trim().Split("\").ToList() @@ -508,10 +310,8 @@ Public Class GetAppxPkgInfoDlg Else DynaLog.LogMessage("Getting full asset directory...") If File.Exists(If(MainForm.OnlineManagement, Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)), MainForm.MountDir) & "\Program Files\WindowsApps\" & Label23.Text & "\AppxManifest.xml") Then - Dim ManFile As New RichTextBox() With { - .Text = File.ReadAllText(If(MainForm.OnlineManagement, Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)), MainForm.MountDir) & "\Program Files\WindowsApps\" & Label23.Text & "\AppxManifest.xml") - } - For Each line In ManFile.Lines + Dim ManFileLines As String() = File.ReadAllLines(If(MainForm.OnlineManagement, Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)), MainForm.MountDir) & "\Program Files\WindowsApps\" & Label23.Text & "\AppxManifest.xml") + For Each line In ManFileLines If line.Contains("") Then Dim SplitPaths As New List(Of String) SplitPaths = line.Replace(" ", "").Trim().Replace("/", "").Trim().Replace("", "").Trim().Split("\").ToList() @@ -546,7 +346,7 @@ Public Class GetAppxPkgInfoDlg End If Catch ex As Exception DynaLog.LogMessage("Could not get some information about this application. Error message: " & ex.Message) - MsgBox("Could not get some information about this application.", vbOKOnly + vbCritical, ImageTaskHeader1.ItemText) + MsgBox(LocalizationService.ForSection("AppxPackages.Info.Messages")("Get.Label"), vbOKOnly + vbCritical, ImageTaskHeader1.ItemText) End Try Panel4.Visible = True Panel7.Visible = False @@ -587,23 +387,59 @@ Public Class GetAppxPkgInfoDlg Process.Start("https://github.com/CodingWonders/DISMTools/issues/new?assignees=CodingWonders&labels=bug&projects=&template=store-logo-asset-preview-issue.md&title=") End Sub - Sub SearchPackages(sQuery As String) + Sub SearchPackages(sQuery As String, Optional appxSearchMode As SearchMode = SearchMode.None) DynaLog.LogMessage("Search query: " & sQuery) - If MainForm.CurrentImage.ImageAppxPackages Is Nothing OrElse MainForm.CurrentImage.ImageAppxPackages.Count = 0 OrElse - MainForm.CurrentImage.ImageAppxPackages_Backup.Count > MainForm.CurrentImage.ImageAppxPackages.Count Then - FilteredAppxPackages_Backup = MainForm.CurrentImage.ImageAppxPackages_Backup.Where(Function(AppxPackage) AppxPackage.PackageFullName.ToLower().Contains(sQuery.ToLower())) - ListBox1.Items.AddRange(FilteredAppxPackages_Backup.Select(Function(AppxPackage) AppxPackage.PackageFullName).ToArray()) + Dim IsBackupCollectionUsed As Boolean = False + + If appxSearchMode > SearchMode.RegisteredToAnyone AndAlso MainForm.NoNTSamMappings Then appxSearchMode = SearchMode.None + + If MainForm.CurrentImage.ImageAppxPackages Is Nothing OrElse MainForm.CurrentImage.ImageAppxPackages.Count = 0 OrElse MainForm.CurrentImage.ImageAppxPackages_Backup.Count > MainForm.CurrentImage.ImageAppxPackages.Count Then + IsBackupCollectionUsed = True + + ' If we need the information from the system when it comes to user account names and security identifiers, + ' we'll grab it. + Select Case appxSearchMode + Case SearchMode.RegisteredToAnyone : FilteredAppxPackages_Backup = MainForm.CurrentImage.ImageAppxPackages_Backup.Where(Function(AppxPackage) AppxHelper.IsPackageRegistered(MainForm.MountDir, AppxPackage)) + Case SearchMode.RegisteredToNoOne : FilteredAppxPackages_Backup = MainForm.CurrentImage.ImageAppxPackages_Backup.Where(Function(AppxPackage) Not AppxHelper.IsPackageRegistered(MainForm.MountDir, AppxPackage)) + Case SearchMode.RegisteredToMe : FilteredAppxPackages_Backup = MainForm.CurrentImage.ImageAppxPackages_Backup.Where(Function(AppxPackage) SidInformation(AppxPackage.PackageFullName).Values.Any(Function(val) val IsNot Nothing AndAlso val.Equals(Environment.UserName, StringComparison.OrdinalIgnoreCase))) + Case SearchMode.RegisteredToSid : FilteredAppxPackages_Backup = MainForm.CurrentImage.ImageAppxPackages_Backup.Where(Function(AppxPackage) SidInformation(AppxPackage.PackageFullName).Keys.Any(Function(key) key IsNot Nothing AndAlso key.Equals(sQuery.Split(":")(1), StringComparison.OrdinalIgnoreCase))) + Case SearchMode.RegisteredToName : FilteredAppxPackages_Backup = MainForm.CurrentImage.ImageAppxPackages_Backup.Where(Function(AppxPackage) SidInformation(AppxPackage.PackageFullName).Values.Any(Function(val) val IsNot Nothing AndAlso val.Equals(sQuery.Split(":")(1), StringComparison.OrdinalIgnoreCase))) + Case SearchMode.None : FilteredAppxPackages_Backup = MainForm.CurrentImage.ImageAppxPackages_Backup.Where(Function(AppxPackage) AppxPackage.PackageFullName.ToLower().Contains(sQuery.ToLower())) + End Select Else - FilteredAppxPackages = MainForm.CurrentImage.ImageAppxPackages.Where(Function(AppxPackage) AppxPackage.PackageName.ToLower().Contains(sQuery.ToLower())) + IsBackupCollectionUsed = False + + Select Case appxSearchMode + Case SearchMode.RegisteredToAnyone : FilteredAppxPackages = MainForm.CurrentImage.ImageAppxPackages.Where(Function(AppxPackage) AppxHelper.IsPackageRegistered(MainForm.MountDir, AppxPackage)) + Case SearchMode.RegisteredToNoOne : FilteredAppxPackages = MainForm.CurrentImage.ImageAppxPackages.Where(Function(AppxPackage) Not AppxHelper.IsPackageRegistered(MainForm.MountDir, AppxPackage)) + Case SearchMode.RegisteredToMe : FilteredAppxPackages = MainForm.CurrentImage.ImageAppxPackages.Where(Function(AppxPackage) SidInformation(AppxPackage.PackageName).Values.Any(Function(val) val IsNot Nothing AndAlso val.Equals(Environment.UserName, StringComparison.OrdinalIgnoreCase))) + Case SearchMode.RegisteredToSid : FilteredAppxPackages = MainForm.CurrentImage.ImageAppxPackages.Where(Function(AppxPackage) SidInformation(AppxPackage.PackageName).Keys.Any(Function(key) key IsNot Nothing AndAlso key.Equals(sQuery.Split(":")(1), StringComparison.OrdinalIgnoreCase))) + Case SearchMode.RegisteredToName : FilteredAppxPackages = MainForm.CurrentImage.ImageAppxPackages.Where(Function(AppxPackage) SidInformation(AppxPackage.PackageName).Values.Any(Function(val) val IsNot Nothing AndAlso val.Equals(sQuery.Split(":")(1), StringComparison.OrdinalIgnoreCase))) + Case SearchMode.None : FilteredAppxPackages = MainForm.CurrentImage.ImageAppxPackages.Where(Function(AppxPackage) AppxPackage.PackageName.ToLower().Contains(sQuery.ToLower())) + End Select + FilteredAppxPackages_Backup = Enumerable.Repeat(Of ImageAppxPackage)(Nothing, FilteredAppxPackages.Count) - ListBox1.Items.AddRange(FilteredAppxPackages.Select(Function(AppxPackage) AppxPackage.PackageName).ToArray()) End If + + ListBox1.Items.AddRange(If(IsBackupCollectionUsed, FilteredAppxPackages_Backup.Select(Function(AppxPackage) AppxPackage.PackageFullName), FilteredAppxPackages.Select(Function(AppxPackage) AppxPackage.PackageName)).ToArray()) End Sub Private Sub SearchBox1_TextChanged(sender As Object, e As EventArgs) Handles SearchBox1.TextChanged ListBox1.Items.Clear() If SearchBox1.Text <> "" Then - SearchPackages(SearchBox1.Text) + Dim modeToUse As SearchMode = SearchMode.None + If SearchBox1.Text.StartsWith("regto:", StringComparison.OrdinalIgnoreCase) AndAlso MainForm.OnlineManagement Then + ' Determine based on second field + Dim RegistrationParts As String() = SearchBox1.Text.Split(":") + Select Case RegistrationParts(1) + Case "anyone" : modeToUse = SearchMode.RegisteredToAnyone + Case "me" : modeToUse = SearchMode.RegisteredToMe + Case "noone" : modeToUse = SearchMode.RegisteredToNoOne + Case Else : modeToUse = If(RegistrationParts(1).StartsWith("S-1-5", StringComparison.OrdinalIgnoreCase), + SearchMode.RegisteredToSid, SearchMode.RegisteredToName) + End Select + End If + SearchPackages(SearchBox1.Text, modeToUse) Else DynaLog.LogMessage("No search query has been specified. Showing all items...") If MainForm.CurrentImage.ImageAppxPackages IsNot Nothing Then @@ -631,4 +467,14 @@ Public Class GetAppxPkgInfoDlg SearchBox1.SelectionStart = SearchBox1.TextLength End If End Sub + + Private Sub WizardBtn_Click(sender As Object, e As EventArgs) Handles WizardBtn.Click + If AppxFilterAssistantDialog.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then + SearchBox1.Text = AppxFilterAssistantDialog.AppliedQuery + End If + End Sub + + Private Sub WizardBtn_MouseHover(sender As Object, e As EventArgs) Handles WizardBtn.MouseHover + WindowHelper.DisplayToolTip(sender, "Build query with the Assistant...") + End Sub End Class diff --git a/Panels/Get_Ops/Capabilities/GetCapabilityInfo.vb b/Panels/Get_Ops/Capabilities/GetCapabilityInfo.vb index 3e5b4f5bb..fa9835b53 100644 --- a/Panels/Get_Ops/Capabilities/GetCapabilityInfo.vb +++ b/Panels/Get_Ops/Capabilities/GetCapabilityInfo.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports System.Threading Imports Microsoft.VisualBasic.ControlChars Imports Microsoft.Dism @@ -18,171 +18,21 @@ Public Class GetCapabilityInfoDlg ListView1.ForeColor = ForeColor SearchPic.Image = GetGlyphResource("search") WizardBtn.Image = GetGlyphResource("assistant") - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Get capability information" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Ready" - Label22.Text = "Capability identity:" - Label24.Text = "Capability name:" - Label26.Text = "Capability state:" - Label31.Text = "Display name:" - Label36.Text = "Capability information" - Label37.Text = "Select an installed capability on the left to view its information here" - Label41.Text = "Capability description:" - Label43.Text = "Sizes:" - ListView1.Columns(0).Text = "Capability identity" - ListView1.Columns(1).Text = "State" - Button2.Text = "Save..." - SearchBox1.cueBanner = "Type here to search for a capability..." - Case "ESN" - Text = "Obtener información de funcionalidades" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Listo" - Label22.Text = "Identidad de la funcionalidad:" - Label24.Text = "Nombre de la funcionalidad:" - Label26.Text = "Estado de la funcionalidad:" - Label31.Text = "Nombre para mostrar" - Label36.Text = "Información de la funcionalidad" - Label37.Text = "Seleccione una funcionalidad instalada en la izquierda para ver su información aquí" - Label41.Text = "Descripción de la funcionalidad" - Label43.Text = "Tamaños:" - ListView1.Columns(0).Text = "Identidad de funcionalidad" - ListView1.Columns(1).Text = "Estado" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Escriba aquí para buscar una funcionalidad..." - Case "FRA" - Text = "Obtenir des informations sur les capacités" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Prêt" - Label22.Text = "Identité de la capacité :" - Label24.Text = "Nom de la capacité :" - Label26.Text = "État de la capacité :" - Label31.Text = "Nom d'affichage :" - Label36.Text = "Informations sur la capacité" - Label37.Text = "Sélectionnez une capacité installée sur la gauche pour afficher les informations correspondantes ici." - Label41.Text = "Description de la capacité :" - Label43.Text = "Tailles :" - ListView1.Columns(0).Text = "Identité de la capacité" - ListView1.Columns(1).Text = "État" - Button2.Text = "Sauvegarder..." - SearchBox1.cueBanner = "Tapez ici pour rechercher une capacité..." - Case "PTB", "PTG" - Text = "Obter informações sobre as capacidades" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Pronto" - Label22.Text = "Identidade da capacidade:" - Label24.Text = "Nome da capacidade:" - Label26.Text = "Estado da capacidade:" - Label31.Text = "Nome de apresentação:" - Label36.Text = "Informação sobre a capacidade" - Label37.Text = "Seleccione uma capacidade instalada à esquerda para ver a sua informação aqui" - Label41.Text = "Descrição da capacidade:" - Label43.Text = "Tamanhos:" - ListView1.Columns(0).Text = "Identidade da capacidade" - ListView1.Columns(1).Text = "Estado" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Digite aqui para pesquisar uma capacidade..." - Case "ITA" - Text = "Verifica informazioni capacità" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Pronto" - Label22.Text = "Identità capacità:" - Label24.Text = "Nome capacità:" - Label26.Text = "Stato capacità:" - Label31.Text = "Nome visualizzato:" - Label36.Text = "Informazioni sulla capacità" - Label37.Text = "Seleziona una capacità installata a sinistra per visualizzarne qui le informazioni" - Label41.Text = "Descrizione capacità:" - Label43.Text = "Dimensioni:" - ListView1.Columns(0).Text = "Identità capacità" - ListView1.Columns(1).Text = "Stato" - Button2.Text = "Salva..." - SearchBox1.cueBanner = "Digita qui per cercare una capacità..." - End Select - Case 1 - Text = "Get capability information" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Ready" - Label22.Text = "Capability identity:" - Label24.Text = "Capability name:" - Label26.Text = "Capability state:" - Label31.Text = "Display name:" - Label36.Text = "Capability information" - Label37.Text = "Select an installed capability on the left to view its information here" - Label41.Text = "Capability description:" - Label43.Text = "Sizes:" - ListView1.Columns(0).Text = "Capability identity" - ListView1.Columns(1).Text = "State" - Button2.Text = "Save..." - SearchBox1.cueBanner = "Type here to search for a capability..." - Case 2 - Text = "Obtener información de funcionalidades" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Listo" - Label22.Text = "Identidad de la funcionalidad:" - Label24.Text = "Nombre de la funcionalidad:" - Label26.Text = "Estado de la funcionalidad:" - Label31.Text = "Nombre para mostrar" - Label36.Text = "Información de la funcionalidad" - Label37.Text = "Seleccione una funcionalidad instalada en la izquierda para ver su información aquí" - Label41.Text = "Descripción de la funcionalidad" - Label43.Text = "Tamaños:" - ListView1.Columns(0).Text = "Identidad de funcionalidad" - ListView1.Columns(1).Text = "Estado" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Escriba aquí para buscar una funcionalidad..." - Case 3 - Text = "Obtenir des informations sur les capacités" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Prêt" - Label22.Text = "Identité de la capacité :" - Label24.Text = "Nom de la capacité :" - Label26.Text = "État de la capacité :" - Label31.Text = "Nom d'affichage :" - Label36.Text = "Informations sur la capacité" - Label37.Text = "Sélectionnez une capacité installée sur la gauche pour afficher les informations correspondantes ici." - Label41.Text = "Description de la capacité :" - Label43.Text = "Tailles :" - ListView1.Columns(0).Text = "Identité de la capacité" - ListView1.Columns(1).Text = "État" - Button2.Text = "Sauvegarder..." - SearchBox1.cueBanner = "Tapez ici pour rechercher une capacité..." - Case 4 - Text = "Obter informações sobre as capacidades" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Pronto" - Label22.Text = "Identidade da capacidade:" - Label24.Text = "Nome da capacidade:" - Label26.Text = "Estado da capacidade:" - Label31.Text = "Nome de apresentação:" - Label36.Text = "Informação sobre a capacidade" - Label37.Text = "Seleccione uma capacidade instalada à esquerda para ver a sua informação aqui" - Label41.Text = "Descrição da capacidade:" - Label43.Text = "Tamanhos:" - ListView1.Columns(0).Text = "Identidade da capacidade" - ListView1.Columns(1).Text = "Estado" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Digite aqui para pesquisar uma capacidade..." - Case 5 - Text = "Verifica informazioni capacità" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Pronto" - Label22.Text = "Identità capacità:" - Label24.Text = "Nome capacità:" - Label26.Text = "Stato capacità:" - Label31.Text = "Nome visualizzato:" - Label36.Text = "Informazioni capacità" - Label37.Text = "Seleziona una capacità installata a sinistra per visualizzarne qui le informazioni" - Label41.Text = "Descrizione capacità:" - Label43.Text = "Dimensioni:" - ListView1.Columns(0).Text = "Identità capacità" - ListView1.Columns(1).Text = "Stato" - Button2.Text = "Salva..." - SearchBox1.cueBanner = "Digita qui per cercare una capacità..." - End Select + Text = LocalizationService.ForSection("CapabilityInfo")("Get.Label") + ImageTaskHeader1.ItemText = LocalizationService.ForSection("CapabilityInfo").Format("Image.Task.Header.Label", Text) + Label2.Text = LocalizationService.ForSection("CapabilityInfo")("Ready.Label") + Label22.Text = LocalizationService.ForSection("CapabilityInfo")("Identity.Label") + Label24.Text = LocalizationService.ForSection("CapabilityInfo")("CapabilityName.Label") + Label26.Text = LocalizationService.ForSection("CapabilityInfo")("CapabilityState.Label") + Label31.Text = LocalizationService.ForSection("CapabilityInfo")("DisplayName.Label") + Label36.Text = LocalizationService.ForSection("CapabilityInfo")("CapabilityInfo.Label") + Label37.Text = LocalizationService.ForSection("GetCapInfo")("SelectCapability.Label") + Label41.Text = LocalizationService.ForSection("CapabilityInfo")("Description.Label") + Label43.Text = LocalizationService.ForSection("CapabilityInfo")("Sizes.Label") + ListView1.Columns(0).Text = LocalizationService.ForSection("CapabilityInfo")("Identity.Column") + ListView1.Columns(1).Text = LocalizationService.ForSection("CapabilityInfo")("State.Column") + Button2.Text = LocalizationService.ForSection("CapabilityInfo")("Save.Button") + SearchBox1.cueBanner = LocalizationService.ForSection("CapabilityInfo")("Type.Search.Label") If SplitContainer2.SplitterDistance = 440 Then SplitContainer2.SplitterDistance = WindowHelper.ScaleLogical(SplitContainer2.SplitterDistance) End If @@ -217,119 +67,23 @@ Public Class GetCapabilityInfoDlg If MainForm.ImgBW.IsBusy Then DynaLog.LogMessage("Background processes are busy. Stopping them...") Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Background processes need to have completed before showing feature information. We'll wait until they have completed" - Case "ESN" - msg = "Los procesos en segundo plano deben haber completado antes de obtener información de la característica. Esperaremos hasta que hayan completado" - Case "FRA" - msg = "Les processus en plan doivent être terminés avant d'afficher les caractéristiques. Nous attendrons qu'ils soient terminés" - Case "PTB", "PTG" - msg = "Os processos em segundo plano têm de estar concluídos antes de mostrar informações sobre as características. Vamos esperar até que estejam concluídos" - Case "ITA" - msg = "Prima di poter visualizzare le informazioni sulle funzionalità devono essere stati completati i processi in background. Attendi che siano completati" - End Select - Case 1 - msg = "Background processes need to have completed before showing feature information. We'll wait until they have completed" - Case 2 - msg = "Los procesos en segundo plano deben haber completado antes de obtener información de la característica. Esperaremos hasta que hayan completado" - Case 3 - msg = "Les processus en plan doivent être terminés avant d'afficher les caractéristiques. Nous attendrons qu'ils soient terminés" - Case 4 - msg = "Os processos em segundo plano têm de estar concluídos antes de mostrar informações sobre as características. Vamos esperar até que estejam concluídos" - Case 5 - msg = "Prima di poter visualizzare le informazioni sulle funzionalità devono essere stati completati i processi in background. Attendi che siano completati" - End Select + msg = LocalizationService.ForSection("CapabilityInfo")("Wait.Background.Message") MsgBox(msg, vbOKOnly + vbInformation, ImageTaskHeader1.ItemText) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label2.Text = "Waiting for background processes to finish..." - Case "ESN" - Label2.Text = "Esperando a que terminen los procesos en segundo plano..." - Case "FRA" - Label2.Text = "Attente de la fin des processus en arrière plan..." - Case "PTB", "PTG" - Label2.Text = "À espera que os processos em segundo plano terminem..." - Case "ITA" - Label2.Text = "In attesa del completamento che i processi in background..." - End Select - Case 1 - Label2.Text = "Waiting for background processes to finish..." - Case 2 - Label2.Text = "Esperando a que terminen los procesos en segundo plano..." - Case 3 - Label2.Text = "Attente de la fin des processus en arrière plan..." - Case 4 - Label2.Text = "À espera que os processos em segundo plano terminem..." - Case 5 - Label2.Text = "In attesa del completamento che i processi in background..." - End Select + Label2.Text = LocalizationService.ForSection("CapabilityInfo")("Waiting.Background.Label") While MainForm.ImgBW.IsBusy Application.DoEvents() Thread.Sleep(500) End While End If MainForm.StopMountedImageDetector() - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label2.Text = "Preparing to get capability information..." - Case "ESN" - Label2.Text = "Preparándonos para obtener información de la funcionalidad..." - Case "FRA" - Label2.Text = "Préparation de l'obtention des informations de la capacité en cours..." - Case "PTB", "PTG" - Label2.Text = "Preparar-se para obter informações sobre a capacidade..." - Case "ITA" - Label2.Text = "Preparazione verifica informazioni sulle capacità..." - End Select - Case 1 - Label2.Text = "Preparing to get capability information..." - Case 2 - Label2.Text = "Preparándonos para obtener información de la funcionalidad..." - Case 3 - Label2.Text = "Préparation de l'obtention des informations de la capacité en cours..." - Case 4 - Label2.Text = "Preparar-se para obter informações sobre a capacidade..." - Case 5 - Label2.Text = "Preparazione verifica informazioni sulle capacità..." - End Select + Label2.Text = LocalizationService.ForSection("CapabilityInfo")("Prepare.Cap.Item") Application.DoEvents() Try DynaLog.LogMessage("Initializing API...") DismApi.Initialize(DismLogLevel.LogErrors) DynaLog.LogMessage("Creating session...") Using imgSession As DismSession = If(MainForm.OnlineManagement, DismApi.OpenOnlineSession(), DismApi.OpenOfflineSession(MainForm.MountDir)) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label2.Text = "Getting information from " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case "ESN" - Label2.Text = "Obteniendo información de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case "FRA" - Label2.Text = "Obtention des informations de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & " en cours..." - Case "PTB", "PTG" - Label2.Text = "Obter informações de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case "ITA" - Label2.Text = "Verifica informazioni da " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - End Select - Case 1 - Label2.Text = "Getting information from " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case 2 - Label2.Text = "Obteniendo información de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case 3 - Label2.Text = "Obtention des informations de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & " en cours..." - Case 4 - Label2.Text = "Obter informações de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case 5 - Label2.Text = "Verifica informazioni da " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - End Select + Label2.Text = LocalizationService.ForSection("CapabilityInfo").Format("GettingInfo.Item", ListView1.FocusedItem.SubItems(0).Text) DynaLog.LogMessage("Capability to get information about: " & ListView1.FocusedItem.SubItems(0).Text) Application.DoEvents() Dim capInfo As DismCapabilityInfo = DismApi.GetCapabilityInfo(imgSession, ListView1.FocusedItem.SubItems(0).Text) @@ -338,41 +92,12 @@ Public Class GetCapabilityInfoDlg Label35.Text = Casters.CastDismPackageState(capInfo.State, True) Label32.Text = capInfo.DisplayName Label40.Text = capInfo.Description - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label42.Text = "Download size: " & capInfo.DownloadSize & " bytes" & If(capInfo.DownloadSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.DownloadSize) & ")", "") & CrLf & _ - "Install size: " & capInfo.InstallSize & " bytes" & If(capInfo.InstallSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.InstallSize) & ")", "") - Case "ESN" - Label42.Text = "Tamaño de descarga: " & capInfo.DownloadSize & " bytes" & If(capInfo.DownloadSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.DownloadSize) & ")", "") & CrLf & _ - "Tamaño de instalación: " & capInfo.InstallSize & " bytes" & If(capInfo.InstallSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.InstallSize) & ")", "") - Case "FRA" - Label42.Text = "Taille du téléchargement : " & capInfo.DownloadSize & " octets" & If(capInfo.DownloadSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.DownloadSize, True) & ")", "") & CrLf & _ - "Taille d'installation : " & capInfo.InstallSize & " octets" & If(capInfo.InstallSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.InstallSize, True) & ")", "") - Case "PTB", "PTG" - Label42.Text = "Tamanho do descarregamento: " & capInfo.DownloadSize & " bytes" & If(capInfo.DownloadSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.DownloadSize) & ")", "") & CrLf & _ - "Tamanho da instalação: " & capInfo.InstallSize & " bytes" & If(capInfo.InstallSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.InstallSize) & ")", "") - Case "ITA" - Label42.Text = "Dimensione del download: " & capInfo.DownloadSize & " bytes" & If(capInfo.DownloadSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.DownloadSize) & ")", "") & CrLf & _ - "Dimensione installazione: " & capInfo.InstallSize & " bytes" & If(capInfo.InstallSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.InstallSize) & ")", "") - End Select - Case 1 - Label42.Text = "Download size: " & capInfo.DownloadSize & " bytes" & If(capInfo.DownloadSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.DownloadSize) & ")", "") & CrLf & _ - "Install size: " & capInfo.InstallSize & " bytes" & If(capInfo.InstallSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.InstallSize) & ")", "") - Case 2 - Label42.Text = "Tamaño de descarga: " & capInfo.DownloadSize & " bytes" & If(capInfo.DownloadSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.DownloadSize) & ")", "") & CrLf & _ - "Tamaño de instalación: " & capInfo.InstallSize & " bytes" & If(capInfo.InstallSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.InstallSize) & ")", "") - Case 3 - Label42.Text = "Taille du téléchargement : " & capInfo.DownloadSize & " octets" & If(capInfo.DownloadSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.DownloadSize, True) & ")", "") & CrLf & _ - "Taille d'installation : " & capInfo.InstallSize & " octets" & If(capInfo.InstallSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.InstallSize, True) & ")", "") - Case 4 - Label42.Text = "Tamanho do descarregamento: " & capInfo.DownloadSize & " bytes" & If(capInfo.DownloadSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.DownloadSize) & ")", "") & CrLf & _ - "Tamanho da instalação: " & capInfo.InstallSize & " bytes" & If(capInfo.InstallSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.InstallSize) & ")", "") - Case 5 - Label42.Text = "Dimensione del download: " & capInfo.DownloadSize & " bytes" & If(capInfo.DownloadSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.DownloadSize) & ")", "") & CrLf & _ - "Dimensione installazione: " & capInfo.InstallSize & " bytes" & If(capInfo.InstallSize >= 1024, " (~" & Converters.BytesToReadableSize(capInfo.InstallSize) & ")", "") - End Select + Dim isFrenchSizeText As Boolean = LocalizationService.CurrentCultureCode.Equals("fr-FR", StringComparison.OrdinalIgnoreCase) + Dim downloadReadableSize As String = If(isFrenchSizeText, Converters.BytesToReadableSize(capInfo.DownloadSize, True), Converters.BytesToReadableSize(capInfo.DownloadSize)) + Dim installReadableSize As String = If(isFrenchSizeText, Converters.BytesToReadableSize(capInfo.InstallSize, True), Converters.BytesToReadableSize(capInfo.InstallSize)) + Dim downloadReadableSuffix As String = If(capInfo.DownloadSize >= 1024, LocalizationService.ForSection("CapabilityInfo").Format("ReadableSize.Suffix", downloadReadableSize), "") + Dim installReadableSuffix As String = If(capInfo.InstallSize >= 1024, LocalizationService.ForSection("CapabilityInfo").Format("ReadableSize.Suffix", installReadableSize), "") + Label42.Text = LocalizationService.ForSection("CapabilityInfo").Format("Download.Size.Bytes.Label", capInfo.DownloadSize, downloadReadableSuffix, capInfo.InstallSize, installReadableSuffix) End Using Catch NRE As NullReferenceException Panel4.Visible = False @@ -380,31 +105,7 @@ Public Class GetCapabilityInfoDlg Catch ex As Exception DynaLog.LogMessage("Could not get capability information. Error message: " & ex.Message) Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Could not get capability information. Reason: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "ESN" - msg = "No pudimos obtener información de la funcionalidad. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "FRA" - msg = "Impossible d'obtenir des informations sur les capacités. Raison : " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "PTB", "PTG" - msg = "Não foi possível obter informações sobre a capacidade. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "ITA" - msg = "Impossibile verificare informazioni sulle capacità. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - End Select - Case 1 - msg = "Could not get capability information. Reason: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 2 - msg = "No pudimos obtener información de la funcionalidad. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 3 - msg = "Impossible d'obtenir des informations sur les capacités. Raison : " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 4 - msg = "Não foi possível obter informações sobre a capacidade. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 5 - msg = "Impossibile verificare informazioni sulle capacità. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - End Select + msg = LocalizationService.ForSection("CapabilityInfo").Format("Get.Reason.Message", ex.ToString(), ex.Message, Hex(ex.HResult)) MsgBox(msg, vbOKOnly + vbCritical, ImageTaskHeader1.ItemText) Finally DynaLog.LogMessage("Shutting down API...") @@ -414,31 +115,7 @@ Public Class GetCapabilityInfoDlg End Try End Try - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label2.Text = "Ready" - Case "ESN" - Label2.Text = "Listo" - Case "FRA" - Label2.Text = "Prêt" - Case "PTB", "PTG" - Label2.Text = "Pronto" - Case "ITA" - Label2.Text = "Pronto" - End Select - Case 1 - Label2.Text = "Ready" - Case 2 - Label2.Text = "Listo" - Case 3 - Label2.Text = "Prêt" - Case 4 - Label2.Text = "Pronto" - Case 5 - Label2.Text = "Pronto" - End Select + Label2.Text = LocalizationService.ForSection("CapabilityInfo")("Ready.Item") Panel4.Visible = True Panel7.Visible = False Else @@ -584,6 +261,6 @@ Public Class GetCapabilityInfoDlg End Sub Private Sub WizardBtn_MouseHover(sender As Object, e As EventArgs) Handles WizardBtn.MouseHover - WindowHelper.DisplayToolTip(sender, "Build query with the Assistant...") + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("CapabilityInfo")("Build.Query.Assistant.Label")) End Sub End Class diff --git a/Panels/Get_Ops/Drivers/DriverFileInfoDlg.vb b/Panels/Get_Ops/Drivers/DriverFileInfoDlg.vb index dcd6a1324..4c08afc5a 100644 --- a/Panels/Get_Ops/Drivers/DriverFileInfoDlg.vb +++ b/Panels/Get_Ops/Drivers/DriverFileInfoDlg.vb @@ -27,7 +27,7 @@ Public Class DriverFileInfoDlg "Class GUID: " & drvPkg.ClassGuid & CrLf & _ "Provider name: " & drvPkg.ProviderName & CrLf & _ "Date: " & drvPkg.Date & CrLf & _ - "Signature status: " & Casters.CastDismSignatureStatus(drvPkg.DriverSignature) & CrLf & _ + "Signature status: " & Casters.SignatureStatus(drvPkg.DriverSignature) & CrLf & _ "Catalog file: " & drvPkg.CatalogFile Dim data As New DataObject() data.SetText(clipStr, TextDataFormat.Text) @@ -36,81 +36,12 @@ Public Class DriverFileInfoDlg End Sub Private Sub DriverFileInfoDlg_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Driver file information" - Label1.Text = "Information of driver file: " & Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex)) - ListView1.Columns(0).Text = "Property" - ListView1.Columns(1).Text = "Value" - OK_Button.Text = "OK" - Copy_Button.Text = "Copy" - Case "ESN" - Text = "Información del archivo de controlador" - Label1.Text = "Información del archivo de controlador: " & Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex)) - ListView1.Columns(0).Text = "Propiedad" - ListView1.Columns(1).Text = "Valor" - OK_Button.Text = "Aceptar" - Copy_Button.Text = "Copiar" - Case "FRA" - Text = "Informations sur le fichier du pilote" - Label1.Text = "Informations sur le fichier du pilote : " & Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex)) - ListView1.Columns(0).Text = "Propriété" - ListView1.Columns(1).Text = "Valeur" - OK_Button.Text = "OK" - Copy_Button.Text = "Copier" - Case "PTB", "PTG" - Text = "Informações sobre o ficheiro do controlador" - Label1.Text = "Informações do ficheiro do controlador: " & Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex)) - ListView1.Columns(0).Text = "Propriedade" - ListView1.Columns(1).Text = "Valor" - OK_Button.Text = "OK" - Copy_Button.Text = "Copiar" - Case "ITA" - Text = "Informazioni file driver" - Label1.Text = "Informazioni file driver: " & Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex)) - ListView1.Columns(0).Text = "Proprietà" - ListView1.Columns(1).Text = "Valore" - OK_Button.Text = "OK" - Copy_Button.Text = "Copia" - End Select - Case 1 - Text = "Driver file information" - Label1.Text = "Information of driver file: " & Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex)) - ListView1.Columns(0).Text = "Property" - ListView1.Columns(1).Text = "Value" - OK_Button.Text = "OK" - Copy_Button.Text = "Copy" - Case 2 - Text = "Información del archivo de controlador" - Label1.Text = "Información del archivo de controlador: " & Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex)) - ListView1.Columns(0).Text = "Propiedad" - ListView1.Columns(1).Text = "Valor" - OK_Button.Text = "Aceptar" - Copy_Button.Text = "Copiar" - Case 3 - Text = "Informations sur le fichier du pilote" - Label1.Text = "Informations sur le fichier du pilote : " & Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex)) - ListView1.Columns(0).Text = "Propriété" - ListView1.Columns(1).Text = "Valeur" - OK_Button.Text = "OK" - Copy_Button.Text = "Copier" - Case 4 - Text = "Informações sobre o ficheiro do controlador" - Label1.Text = "Informações do ficheiro do controlador: " & Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex)) - ListView1.Columns(0).Text = "Propriedade" - ListView1.Columns(1).Text = "Valor" - OK_Button.Text = "OK" - Copy_Button.Text = "Copiar" - Case 5 - Text = "Informazioni file driver" - Label1.Text = "Informazioni file driver: " & Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex)) - ListView1.Columns(0).Text = "Proprietà" - ListView1.Columns(1).Text = "Valore" - OK_Button.Text = "OK" - Copy_Button.Text = "Copia" - End Select + Text = LocalizationService.ForSection("DriverFileInfo")("Driver.File.Label") + Label1.Text = LocalizationService.ForSection("DriverFileInfo").Format("Driver.File.Label.Label", Path.GetFileName(GetDriverInfo.ListBox1.Items(GetDriverInfo.ListBox1.SelectedIndex))) + ListView1.Columns(0).Text = LocalizationService.ForSection("DriverFileInfo")("Property.Column") + ListView1.Columns(1).Text = LocalizationService.ForSection("DriverFileInfo")("Value.Column") + OK_Button.Text = LocalizationService.ForSection("DriverFileInfo")("Ok.Button") + Copy_Button.Text = LocalizationService.ForSection("DriverFileInfo")("Copy.Button") ListView1.Items.Clear() drvPkg = Nothing Try @@ -131,146 +62,23 @@ Public Class DriverFileInfoDlg DriverDateString = drvPkg.Date.ToString("MM/dd/yyyy HH:mm:ss") End If - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - ListView1.Items.Add(New ListViewItem(New String() {"Published name", drvPkg.PublishedName})) - ListView1.Items.Add(New ListViewItem(New String() {"Original file name", drvPkg.OriginalFileName})) - ListView1.Items.Add(New ListViewItem(New String() {"Is critical to the boot process?", If(drvPkg.BootCritical, "Yes", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"Is part of the Windows distribution?", If(drvPkg.InBox, "Yes", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"Version", drvPkg.Version.ToString()})) - ListView1.Items.Add(New ListViewItem(New String() {"Class name", drvPkg.ClassName})) - ListView1.Items.Add(New ListViewItem(New String() {"Class description", drvPkg.ClassDescription})) - ListView1.Items.Add(New ListViewItem(New String() {"Class GUID", drvPkg.ClassGuid})) - ListView1.Items.Add(New ListViewItem(New String() {"Provider name", drvPkg.ProviderName})) - ListView1.Items.Add(New ListViewItem(New String() {"Date", DriverDateString})) - ListView1.Items.Add(New ListViewItem(New String() {"Signature status", Casters.CastDismSignatureStatus(drvPkg.DriverSignature, True)})) - ListView1.Items.Add(New ListViewItem(New String() {"Catalog file", drvPkg.CatalogFile})) - Case "ESN" - ListView1.Items.Add(New ListViewItem(New String() {"Nombre publicado", drvPkg.PublishedName})) - ListView1.Items.Add(New ListViewItem(New String() {"Nombre original del archivo", drvPkg.OriginalFileName})) - ListView1.Items.Add(New ListViewItem(New String() {"¿Es crítico para el arranque?", If(drvPkg.BootCritical, "Sí", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"¿Es parte de la distribución de Windows?", If(drvPkg.InBox, "Sí", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"Versión", drvPkg.Version.ToString()})) - ListView1.Items.Add(New ListViewItem(New String() {"Nombre de clase", drvPkg.ClassName})) - ListView1.Items.Add(New ListViewItem(New String() {"Descripción de clase", drvPkg.ClassDescription})) - ListView1.Items.Add(New ListViewItem(New String() {"GUID de clase", drvPkg.ClassGuid})) - ListView1.Items.Add(New ListViewItem(New String() {"Nombre del proveedor", drvPkg.ProviderName})) - ListView1.Items.Add(New ListViewItem(New String() {"Fecha", DriverDateString})) - ListView1.Items.Add(New ListViewItem(New String() {"Estado de firma del controlador", Casters.CastDismSignatureStatus(drvPkg.DriverSignature, True)})) - ListView1.Items.Add(New ListViewItem(New String() {"Archivo de catálogo", drvPkg.CatalogFile})) - Case "FRA" - ListView1.Items.Add(New ListViewItem(New String() {"Nom publiè", drvPkg.PublishedName})) - ListView1.Items.Add(New ListViewItem(New String() {"Nom du fichier original", drvPkg.OriginalFileName})) - ListView1.Items.Add(New ListViewItem(New String() {"Est-il essentiel au processus de démarrage ?", If(drvPkg.BootCritical, "Oui", "Non")})) - ListView1.Items.Add(New ListViewItem(New String() {"Est-il partie de la distribution Windows ?", If(drvPkg.InBox, "Oui", "Non")})) - ListView1.Items.Add(New ListViewItem(New String() {"Version", drvPkg.Version.ToString()})) - ListView1.Items.Add(New ListViewItem(New String() {"Nom de classe", drvPkg.ClassName})) - ListView1.Items.Add(New ListViewItem(New String() {"Description de classe", drvPkg.ClassDescription})) - ListView1.Items.Add(New ListViewItem(New String() {"GUID de classe", drvPkg.ClassGuid})) - ListView1.Items.Add(New ListViewItem(New String() {"Nom du prestataire", drvPkg.ProviderName})) - ListView1.Items.Add(New ListViewItem(New String() {"Date", DriverDateString})) - ListView1.Items.Add(New ListViewItem(New String() {"État de la signature du pilote", Casters.CastDismSignatureStatus(drvPkg.DriverSignature, True)})) - ListView1.Items.Add(New ListViewItem(New String() {"Chemin d'accès au fichier de catalogue", drvPkg.CatalogFile})) - Case "PTB", "PTG" - ListView1.Items.Add(New ListViewItem(New String() {"Nome publicado", drvPkg.PublishedName})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome do ficheiro original", drvPkg.OriginalFileName})) - ListView1.Items.Add(New ListViewItem(New String() {"É fundamental para o processo de arranque?", If(drvPkg.BootCritical, "Sim", "Não")})) - ListView1.Items.Add(New ListViewItem(New String() {"Faz parte da distribuição do Windows?", If(drvPkg.InBox, "Sim", "Não")})) - ListView1.Items.Add(New ListViewItem(New String() {"Versão", drvPkg.Version.ToString()})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome da classe", drvPkg.ClassName})) - ListView1.Items.Add(New ListViewItem(New String() {"Descrição da classe", drvPkg.ClassDescription})) - ListView1.Items.Add(New ListViewItem(New String() {"GUID da classe", drvPkg.ClassGuid})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome do provedor", drvPkg.ProviderName})) - ListView1.Items.Add(New ListViewItem(New String() {"Data", DriverDateString})) - ListView1.Items.Add(New ListViewItem(New String() {"Estado da assinatura", Casters.CastDismSignatureStatus(drvPkg.DriverSignature, True)})) - ListView1.Items.Add(New ListViewItem(New String() {"Ficheiro de catálogo", drvPkg.CatalogFile})) - Case "ITA" - ListView1.Items.Add(New ListViewItem(New String() {"Nome pubblicato", drvPkg.PublishedName})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome file originale", drvPkg.OriginalFileName})) - ListView1.Items.Add(New ListViewItem(New String() {"È critico per il processo di avvio?", If(drvPkg.BootCritical, "Sì", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"Fa parte della distribuzione di Windows?", If(drvPkg.InBox, "Sì", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"Versione", drvPkg.Version.ToString()})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome classe", drvPkg.ClassName})) - ListView1.Items.Add(New ListViewItem(New String() {"Descrizione classe", drvPkg.ClassDescription})) - ListView1.Items.Add(New ListViewItem(New String() {"GUID classe", drvPkg.ClassGuid})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome provider", drvPkg.ProviderName})) - ListView1.Items.Add(New ListViewItem(New String() {"Data", DriverDateString})) - ListView1.Items.Add(New ListViewItem(New String() {"Stato firma", Casters.CastDismSignatureStatus(drvPkg.DriverSignature, True)})) - ListView1.Items.Add(New ListViewItem(New String() {"File catalogo", drvPkg.CatalogFile})) - End Select - Case 1 - ListView1.Items.Add(New ListViewItem(New String() {"Published name", drvPkg.PublishedName})) - ListView1.Items.Add(New ListViewItem(New String() {"Original file name", drvPkg.OriginalFileName})) - ListView1.Items.Add(New ListViewItem(New String() {"Is critical to the boot process?", If(drvPkg.BootCritical, "Yes", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"Is part of the Windows distribution?", If(drvPkg.InBox, "Yes", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"Version", drvPkg.Version.ToString()})) - ListView1.Items.Add(New ListViewItem(New String() {"Class name", drvPkg.ClassName})) - ListView1.Items.Add(New ListViewItem(New String() {"Class description", drvPkg.ClassDescription})) - ListView1.Items.Add(New ListViewItem(New String() {"Class GUID", drvPkg.ClassGuid})) - ListView1.Items.Add(New ListViewItem(New String() {"Provider name", drvPkg.ProviderName})) - ListView1.Items.Add(New ListViewItem(New String() {"Date", DriverDateString})) - ListView1.Items.Add(New ListViewItem(New String() {"Signature status", Casters.CastDismSignatureStatus(drvPkg.DriverSignature, True)})) - ListView1.Items.Add(New ListViewItem(New String() {"Catalog file", drvPkg.CatalogFile})) - Case 2 - ListView1.Items.Add(New ListViewItem(New String() {"Nombre publicado", drvPkg.PublishedName})) - ListView1.Items.Add(New ListViewItem(New String() {"Nombre original del archivo", drvPkg.OriginalFileName})) - ListView1.Items.Add(New ListViewItem(New String() {"¿Es crítico para el arranque?", If(drvPkg.BootCritical, "Sí", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"¿Es parte de la distribución de Windows?", If(drvPkg.InBox, "Sí", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"Versión", drvPkg.Version.ToString()})) - ListView1.Items.Add(New ListViewItem(New String() {"Nombre de clase", drvPkg.ClassName})) - ListView1.Items.Add(New ListViewItem(New String() {"Descripción de clase", drvPkg.ClassDescription})) - ListView1.Items.Add(New ListViewItem(New String() {"GUID de clase", drvPkg.ClassGuid})) - ListView1.Items.Add(New ListViewItem(New String() {"Nombre del proveedor", drvPkg.ProviderName})) - ListView1.Items.Add(New ListViewItem(New String() {"Fecha", DriverDateString})) - ListView1.Items.Add(New ListViewItem(New String() {"Estado de firma del controlador", Casters.CastDismSignatureStatus(drvPkg.DriverSignature, True)})) - ListView1.Items.Add(New ListViewItem(New String() {"Archivo de catálogo", drvPkg.CatalogFile})) - Case 3 - ListView1.Items.Add(New ListViewItem(New String() {"Nom publiè", drvPkg.PublishedName})) - ListView1.Items.Add(New ListViewItem(New String() {"Nom du fichier original", drvPkg.OriginalFileName})) - ListView1.Items.Add(New ListViewItem(New String() {"Est-il essentiel au processus de démarrage ?", If(drvPkg.BootCritical, "Oui", "Non")})) - ListView1.Items.Add(New ListViewItem(New String() {"Est-il partie de la distribution Windows ?", If(drvPkg.InBox, "Oui", "Non")})) - ListView1.Items.Add(New ListViewItem(New String() {"Version", drvPkg.Version.ToString()})) - ListView1.Items.Add(New ListViewItem(New String() {"Nom de classe", drvPkg.ClassName})) - ListView1.Items.Add(New ListViewItem(New String() {"Description de classe", drvPkg.ClassDescription})) - ListView1.Items.Add(New ListViewItem(New String() {"GUID de classe", drvPkg.ClassGuid})) - ListView1.Items.Add(New ListViewItem(New String() {"Nom du prestataire", drvPkg.ProviderName})) - ListView1.Items.Add(New ListViewItem(New String() {"Date", DriverDateString})) - ListView1.Items.Add(New ListViewItem(New String() {"État de la signature du pilote", Casters.CastDismSignatureStatus(drvPkg.DriverSignature, True)})) - ListView1.Items.Add(New ListViewItem(New String() {"Chemin d'accès au fichier de catalogue", drvPkg.CatalogFile})) - Case 4 - ListView1.Items.Add(New ListViewItem(New String() {"Nome publicado", drvPkg.PublishedName})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome do ficheiro original", drvPkg.OriginalFileName})) - ListView1.Items.Add(New ListViewItem(New String() {"É fundamental para o processo de arranque?", If(drvPkg.BootCritical, "Sim", "Não")})) - ListView1.Items.Add(New ListViewItem(New String() {"Faz parte da distribuição do Windows?", If(drvPkg.InBox, "Sim", "Não")})) - ListView1.Items.Add(New ListViewItem(New String() {"Versão", drvPkg.Version.ToString()})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome da classe", drvPkg.ClassName})) - ListView1.Items.Add(New ListViewItem(New String() {"Descrição da classe", drvPkg.ClassDescription})) - ListView1.Items.Add(New ListViewItem(New String() {"GUID da classe", drvPkg.ClassGuid})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome do provedor", drvPkg.ProviderName})) - ListView1.Items.Add(New ListViewItem(New String() {"Data", DriverDateString})) - ListView1.Items.Add(New ListViewItem(New String() {"Estado da assinatura", Casters.CastDismSignatureStatus(drvPkg.DriverSignature, True)})) - ListView1.Items.Add(New ListViewItem(New String() {"Ficheiro de catálogo", drvPkg.CatalogFile})) - Case 5 - ListView1.Items.Add(New ListViewItem(New String() {"Nome pubblicato", drvPkg.PublishedName})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome file originale", drvPkg.OriginalFileName})) - ListView1.Items.Add(New ListViewItem(New String() {"È critico per il processo di avvio?", If(drvPkg.BootCritical, "Sì", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"Fa parte della distribuzione di Windows?", If(drvPkg.InBox, "Sì", "No")})) - ListView1.Items.Add(New ListViewItem(New String() {"Versione", drvPkg.Version.ToString()})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome classe", drvPkg.ClassName})) - ListView1.Items.Add(New ListViewItem(New String() {"Descrizione classe", drvPkg.ClassDescription})) - ListView1.Items.Add(New ListViewItem(New String() {"GUID classe", drvPkg.ClassGuid})) - ListView1.Items.Add(New ListViewItem(New String() {"Nome del provider", drvPkg.ProviderName})) - ListView1.Items.Add(New ListViewItem(New String() {"Data", DriverDateString})) - ListView1.Items.Add(New ListViewItem(New String() {"Stato firma", Casters.CastDismSignatureStatus(drvPkg.DriverSignature, True)})) - ListView1.Items.Add(New ListViewItem(New String() {"File catalogo", drvPkg.CatalogFile})) - End Select + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("PublishedName.Label"), drvPkg.PublishedName})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("Original.File.Name.Label"), drvPkg.OriginalFileName})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("Critical.Boot.Process.Label"), If(drvPkg.BootCritical, LocalizationService.ForSection("DriverFileInfo")("Yes.Button"), LocalizationService.ForSection("DriverFileInfo")("No.Button"))})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("Part.Windows.Label"), If(drvPkg.InBox, LocalizationService.ForSection("DriverFileInfo")("ListItem.Button"), LocalizationService.ForSection("DriverFileInfo")("No.Button"))})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("Version.Label"), drvPkg.Version.ToString()})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("ClassName.Label"), drvPkg.ClassName})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("ClassDescription.Label"), drvPkg.ClassDescription})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("ClassGUID.Label"), drvPkg.ClassGuid})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("ProviderName.Label"), drvPkg.ProviderName})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("Date.Label"), DriverDateString})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("SignatureStatus.Label"), Casters.SignatureStatus(drvPkg.DriverSignature, True)})) + ListView1.Items.Add(New ListViewItem(New String() {LocalizationService.ForSection("DriverFileInfo")("CatalogFile.Label"), drvPkg.CatalogFile})) End If End Using Catch ex As Exception DynaLog.LogMessage("Could not get information. Error: " & ex.Message) - MsgBox(ex.Message & " (HRESULT: " & ex.HResult & ")", vbOKOnly + vbCritical, Text) + MsgBox(ex.Message & String.Format(LocalizationService.ForSection("DriverFileInfo.Messages")("Hresult.Label"), ex.HResult), vbOKOnly + vbCritical, Text) Finally DynaLog.LogMessage("Shutting down API...") Try diff --git a/Panels/Get_Ops/Drivers/GetDriverInfo.Designer.vb b/Panels/Get_Ops/Drivers/GetDriverInfo.Designer.vb index da6a47b87..a1e0a44d6 100644 --- a/Panels/Get_Ops/Drivers/GetDriverInfo.Designer.vb +++ b/Panels/Get_Ops/Drivers/GetDriverInfo.Designer.vb @@ -1198,6 +1198,8 @@ Partial Class GetDriverInfo ' 'Label4 ' + Me.Label4.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Label4.AutoEllipsis = True Me.Label4.Location = New System.Drawing.Point(129, 231) Me.Label4.Name = "Label4" @@ -1208,6 +1210,8 @@ Partial Class GetDriverInfo ' 'Label3 ' + Me.Label3.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Label3.AutoEllipsis = True Me.Label3.Location = New System.Drawing.Point(129, 93) Me.Label3.Name = "Label3" @@ -1274,6 +1278,7 @@ Partial Class GetDriverInfo 'OpenFileDialog1 ' Me.OpenFileDialog1.Filter = "Driver files|*.inf" + Me.OpenFileDialog1.Multiselect = True Me.OpenFileDialog1.SupportMultiDottedExtensions = True Me.OpenFileDialog1.Title = "Locate driver files" ' diff --git a/Panels/Get_Ops/Drivers/GetDriverInfo.vb b/Panels/Get_Ops/Drivers/GetDriverInfo.vb index 94f7aa2d7..63fad9f08 100644 --- a/Panels/Get_Ops/Drivers/GetDriverInfo.vb +++ b/Panels/Get_Ops/Drivers/GetDriverInfo.vb @@ -34,457 +34,50 @@ Public Class GetDriverInfo End Enum Private Sub GetDriverInfo_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Get driver information" - ImageTaskHeader1.ItemText = Text - Label2.Text = "What do you want to get information about?" - Label3.Text = "Click here to get information about drivers that you've installed or that came with the Windows image you're servicing" - Label4.Text = "Click here to get information about drivers that you want to add to the Windows image you're servicing before proceeding with the driver addition process" - Label5.Text = "Ready" - Label6.Text = "Add or select a driver package to view its information here" - Label7.Text = "Hardware targets" - Label8.Text = "Hardware description:" - Label10.Text = "Hardware ID:" - Label12.Text = "Additional IDs:" - Label13.Text = "Compatible IDs:" - Label16.Text = "Exclude IDs:" - Label17.Text = "Hardware manufacturer:" - Label20.Text = "Architecture:" - Label21.Text = "Jump to target:" - Label22.Text = "Published name:" - Label24.Text = "Original file name:" - Label26.Text = "Provider name:" - Label28.Text = "Is critical to the boot process?" - Label30.Text = "Version:" - Label31.Text = "Class name:" - Label33.Text = "Part of the Windows distribution?" - Label36.Text = "Driver information" - Label37.Text = "Select an installed driver to view its information here" - Label39.Text = "Date:" - Label41.Text = "Class description:" - Label43.Text = "Class GUID:" - Label45.Text = "Driver signature status:" - Label47.Text = "Catalog file path:" - Label48.Text = "You have configured the background processes to not show all drivers present in this image, which includes drivers part of the Windows distribution, so you may not see the driver you're interested in." - Button1.Text = "Add driver..." - Button2.Text = "Remove selected" - Button3.Text = "Remove all" - Button7.Text = "Change" - Button8.Text = "Save..." - Button9.Text = "View driver file information" - LinkLabel1.Text = "<- Go back" - InstalledDriverLink.Text = "I want to get information about installed drivers in the image" - DriverFileLink.Text = "I want to get information about driver files" - ListView1.Columns(0).Text = "Published name" - ListView1.Columns(1).Text = "Original file name" - OpenFileDialog1.Title = "Locate driver files" - SearchBox1.Text = "Type here to search for a driver..." - Case "ESN" - Text = "Obtener información de controladores" - ImageTaskHeader1.ItemText = Text - Label2.Text = "¿Acerca de qué le gustaría obtener información?" - Label3.Text = "Haga clic aquí para obtener información de controladores que ha instalado o que vengan con la imagen de Windows a la que está dando servicio" - Label4.Text = "Haga clic aquí para obtener información de controladores que le gustaría añadir a la imagen de Windows a la que está dando servicio antes de proceder con el proceso de adición de controladores" - Label5.Text = "Listo" - Label6.Text = "Añada o seleccione un paquete de controlador para ver su información aquí" - Label7.Text = "Hardware de destino" - Label8.Text = "Descripción de hardware:" - Label10.Text = "ID de hardware:" - Label12.Text = "Identificadores adicionales:" - Label13.Text = "Identificadores compatibles:" - Label16.Text = "Identificadores excluidos:" - Label17.Text = "Fabricante de hardware:" - Label20.Text = "Arquitectura:" - Label21.Text = "Saltar a hardware:" - Label22.Text = "Nombre publicado:" - Label24.Text = "Nombre de archivo original:" - Label26.Text = "Nombre de proveedor:" - Label28.Text = "¿Es crítico para el proceso de arranque?" - Label30.Text = "Versión:" - Label31.Text = "Nombre de clase:" - Label33.Text = "¿Es parte de la distribución de Windows?" - Label36.Text = "Información del controlador" - Label37.Text = "Seleccione un controlador instalado para obtener su información aquí" - Label39.Text = "Fecha:" - Label41.Text = "Descripción de clase:" - Label43.Text = "Identificador GUID de clase:" - Label45.Text = "Estado de firma del controlador:" - Label47.Text = "Ruta del archivo de catálogo:" - Label48.Text = "Ha configurado los procesos en segundo plano de manera que no se muestren todos los controladores de esta imagen, que incluye controladores parte de la distribución de Windows, por lo que podría no ver el controlador que le interesa." - Button1.Text = "Añadir controlador..." - Button2.Text = "Eliminar selección" - Button3.Text = "Eliminar todos" - Button7.Text = "Cambiar" - Button8.Text = "Guardar..." - Button9.Text = "Ver información del archivo de controladores" - LinkLabel1.Text = "<- Atrás" - InstalledDriverLink.Text = "Deseo obtener información acerca de controladores instalados en la imagen" - DriverFileLink.Text = "Deseo obtener información acerca de archivos de controladores" - ListView1.Columns(0).Text = "Nombre publicado" - ListView1.Columns(1).Text = "Nombre de archivo original" - OpenFileDialog1.Title = "Ubique los archivos de controladores" - SearchBox1.Text = "Escriba aquí para buscar un controlador..." - Case "FRA" - Text = "Obtenir des informations sur les pilotes" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Sur quoi souhaitez-vous obtenir des informations ?" - Label3.Text = "Cliquez ici pour obtenir des informations sur les pilotes que vous avez installés ou qui sont fournis avec l'image Windows dont vous assurez la maintenance" - Label4.Text = "Cliquez ici pour obtenir des informations sur les pilotes que vous souhaitez ajouter à l'image Windows que vous maintenez avant de poursuivre le processus d'ajout de pilote" - Label5.Text = "Prêt" - Label6.Text = "Ajoutez ou sélectionnez un paquet de pilote pour afficher son information ici" - Label7.Text = "Cibles matérielles" - Label8.Text = "Description du matériel :" - Label10.Text = "ID du matériel :" - Label12.Text = "ID supplémentaires :" - Label13.Text = "ID compatibles :" - Label16.Text = "ID d'exclusion :" - Label17.Text = "Fabricant de matériel :" - Label20.Text = "Architecture :" - Label21.Text = "Sauter à la cible :" - Label22.Text = "Nom publié :" - Label24.Text = "Nom du fichier original :" - Label26.Text = "Nom du prestataire :" - Label28.Text = "Est-il essentiel au processus de démarrage ?" - Label30.Text = "Version :" - Label31.Text = "Nom de classe :" - Label33.Text = "Fait-il partie de la distribution Windows ?" - Label36.Text = "Information sur le pilote" - Label37.Text = "Sélectionnez un pilote installé pour afficher ses informations ici" - Label39.Text = "Date :" - Label41.Text = "Description de classe :" - Label43.Text = "GUID de classe :" - Label45.Text = "État de la signature du pilote :" - Label47.Text = "Chemin d'accès au fichier de catalogue :" - Label48.Text = "Vous avez configuré les processus en arrière plan de manière à ne pas afficher tous les pilotes présents dans cette image, ce qui inclut les pilotes faisant partie de la distribution Windows. Il est donc possible que vous ne voyiez pas le pilote qui vous intéresse." - Button1.Text = "Ajouter un pilote..." - Button2.Text = "Supprimer la sélection" - Button3.Text = "Supprimer tout" - Button7.Text = "Changer" - Button8.Text = "Sauvegarder..." - Button9.Text = "Voir les informations sur le fichier pilote" - LinkLabel1.Text = "<- Retourner" - InstalledDriverLink.Text = "Je souhaite obtenir des informations sur les pilotes installés dans l'image." - DriverFileLink.Text = "Je souhaite obtenir des informations sur les fichiers pilotes" - ListView1.Columns(0).Text = "Nom publié" - ListView1.Columns(1).Text = "Nom du fichier original" - OpenFileDialog1.Title = "Localiser les fichiers pilotes" - SearchBox1.Text = "Tapez ici pour rechercher un pilote..." - Case "PTB", "PTG" - Text = "Obter informações do controlador" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Sobre o que é que pretende obter informações?" - Label3.Text = "Clique aqui para obter informações sobre os controladores que instalou ou que vieram com a imagem do Windows que está a reparar" - Label4.Text = "Clique aqui para obter informações sobre os controladores que pretende adicionar à imagem do Windows que está a reparar antes de prosseguir com o processo de adição de controladores" - Label5.Text = "Pronto" - Label6.Text = "Adicione ou seleccione um pacote de controladores para ver as suas informações aqui" - Label7.Text = "Alvos de hardware" - Label8.Text = "Descrição do hardware:" - Label10.Text = "ID do hardware:" - Label12.Text = "IDs adicionais:" - Label13.Text = "IDs compatíveis:" - Label16.Text = "Excluir IDs:" - Label17.Text = "Fabricante do hardware:" - Label20.Text = "Arquitetura:" - Label21.Text = "Saltar para o alvo:" - Label22.Text = "Nome publicado:" - Label24.Text = "Nome do ficheiro original:" - Label26.Text = "Nome do fornecedor:" - Label28.Text = "É crítico para o processo de arranque?" - Label30.Text = "Versão:" - Label31.Text = "Nome da classe:" - Label33.Text = "Parte da distribuição do Windows?" - Label36.Text = "Informações do controlador" - Label37.Text = "Seleccione um controlador instalado para ver as suas informações aqui" - Label39.Text = "Data:" - Label41.Text = "Descrição da classe:" - Label43.Text = "GUID da classe:" - Label45.Text = "Estado da assinatura do controlador:" - Label47.Text = "Caminho do ficheiro de catálogo:" - Label48.Text = "Configurou os processos em segundo plano para não mostrar todos os controladores presentes nesta imagem, o que inclui controladores que fazem parte da distribuição do Windows, pelo que poderá não ver o controlador em que está interessado." - Button1.Text = "Adicionar controlador..." - Button2.Text = "Remover selecionado" - Button3.Text = "Remover todos" - Button7.Text = "Alterar" - Button8.Text = "Guardar..." - Button9.Text = "Ver informações do ficheiro do controlador" - LinkLabel1.Text = "<- Voltar atrás" - InstalledDriverLink.Text = "Quero obter informações sobre os controladores instalados na imagem" - DriverFileLink.Text = "Pretendo obter informações sobre ficheiros de controladores" - ListView1.Columns(0).Text = "Nome publicado" - SearchBox1.Text = "Digite aqui para pesquisar um controlador..." - Case "ITA" - Text = "Verifica informazioni driver" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Su cosa vuoi verificare informazioni?" - Label3.Text = "Fai clic qui per verificare informazioni sui driver installati o forniti con l'immagine di Windows che stai revisionando" - Label4.Text = "Fai clic qui per verificare informazioni sui driver che vuoi aggiungere all'immagine di Windows prima di procedere con il processo di aggiunta dei driver" - Label5.Text = "Pronto" - Label6.Text = "Per visualizzarne le informazioni aggiungi o seleziona un pacchetto di driver " - Label7.Text = "Obiettivi hardware" - Label8.Text = "Descrizione hardware:" - Label10.Text = "ID hardware:" - Label12.Text = "ID aggiuntivi:" - Label13.Text = "ID compatibili:" - Label16.Text = "Escludi ID:" - Label17.Text = "Produttore hardware:" - Label20.Text = "Architettura:" - Label21.Text = "Vai all'obiettivo:" - Label22.Text = "Nome pubblicato:" - Label24.Text = "Nome file originale:" - Label26.Text = "Nome fornitore:" - Label28.Text = "È fondamentale per il processo di avvio?" - Label30.Text = "Versione:" - Label31.Text = "Nome classe:" - Label33.Text = "Parte distribuzione di Windows?" - Label36.Text = "Informazioni driver" - Label37.Text = "Per visualizzarne le informazioni seleziona un driver installato" - Label39.Text = "Data:" - Label41.Text = "Descrizione classe:" - Label43.Text = "GUID classe:" - Label45.Text = "Stato firma driver:" - Label47.Text = "Percorso file catalogo:" - Label48.Text = "I processi in background sono stati configurati in modo da non visualizzare tutti i driver presenti in questa immagine, che include i driver che fanno parte della distribuzione di Windows, quindi è possibile che non venga visualizzato il driver a cui sei interessato." - Button1.Text = "Aggiungi driver..." - Button2.Text = "Rimuovi selezionati" - Button3.Text = "Rimuovi tutti" - Button7.Text = "Modifica" - Button8.Text = "Salva..." - Button9.Text = "Visualizza informazioni sul file del driver" - LinkLabel1.Text = "<- Indietro" - InstalledDriverLink.Text = "Voglio verificare informazioni sui driver installati nell'immagine" - DriverFileLink.Text = "Voglio verificare informazioni sui file dei driver" - ListView1.Columns(0).Text = "Nome file pubblicato" - ListView1.Columns(1).Text = "Nome file originale" - OpenFileDialog1.Title = "Rilevamento file driver" - SearchBox1.Text = "Digita qui per cercare un driver..." - End Select - Case 1 - Text = "Get driver information" - ImageTaskHeader1.ItemText = Text - Label2.Text = "What do you want to get information about?" - Label3.Text = "Click here to get information about drivers that you've installed or that came with the Windows image you're servicing" - Label4.Text = "Click here to get information about drivers that you want to add to the Windows image you're servicing before proceeding with the driver addition process" - Label5.Text = "Ready" - Label6.Text = "Add or select a driver package to view its information here" - Label7.Text = "Hardware targets" - Label8.Text = "Hardware description:" - Label10.Text = "Hardware ID:" - Label12.Text = "Additional IDs:" - Label13.Text = "Compatible IDs:" - Label16.Text = "Exclude IDs:" - Label17.Text = "Hardware manufacturer:" - Label20.Text = "Architecture:" - Label21.Text = "Jump to target:" - Label22.Text = "Published name:" - Label24.Text = "Original file name:" - Label26.Text = "Provider name:" - Label28.Text = "Is critical to the boot process?" - Label30.Text = "Version:" - Label31.Text = "Class name:" - Label33.Text = "Part of the Windows distribution?" - Label36.Text = "Driver information" - Label37.Text = "Select an installed driver to view its information here" - Label39.Text = "Date:" - Label41.Text = "Class description:" - Label43.Text = "Class GUID:" - Label45.Text = "Driver signature status:" - Label47.Text = "Catalog file path:" - Label48.Text = "You have configured the background processes to not show all drivers present in this image, which includes drivers part of the Windows distribution, so you may not see the driver you're interested in." - Button1.Text = "Add driver..." - Button2.Text = "Remove selected" - Button3.Text = "Remove all" - Button7.Text = "Change" - Button8.Text = "Save..." - Button9.Text = "View driver file information" - LinkLabel1.Text = "<- Go back" - InstalledDriverLink.Text = "I want to get information about installed drivers in the image" - DriverFileLink.Text = "I want to get information about driver files" - ListView1.Columns(0).Text = "Published name" - ListView1.Columns(1).Text = "Original file name" - OpenFileDialog1.Title = "Locate driver files" - SearchBox1.Text = "Type here to search for a driver..." - Case 2 - Text = "Obtener información de controladores" - ImageTaskHeader1.ItemText = Text - Label2.Text = "¿Acerca de qué le gustaría obtener información?" - Label3.Text = "Haga clic aquí para obtener información de controladores que ha instalado o que vengan con la imagen de Windows a la que está dando servicio" - Label4.Text = "Haga clic aquí para obtener información de controladores que le gustaría añadir a la imagen de Windows a la que está dando servicio antes de proceder con el proceso de adición de controladores" - Label5.Text = "Listo" - Label6.Text = "Añada o seleccione un paquete de controlador para ver su información aquí" - Label7.Text = "Hardware de destino" - Label8.Text = "Descripción de hardware:" - Label10.Text = "ID de hardware:" - Label12.Text = "Identificadores adicionales:" - Label13.Text = "Identificadores compatibles:" - Label16.Text = "Identificadores excluidos:" - Label17.Text = "Fabricante de hardware:" - Label20.Text = "Arquitectura:" - Label21.Text = "Saltar a hardware:" - Label22.Text = "Nombre publicado:" - Label24.Text = "Nombre de archivo original:" - Label26.Text = "Nombre de proveedor:" - Label28.Text = "¿Es crítico para el proceso de arranque?" - Label30.Text = "Versión:" - Label31.Text = "Nombre de clase:" - Label33.Text = "¿Es parte de la distribución de Windows?" - Label36.Text = "Información del controlador" - Label37.Text = "Seleccione un controlador instalado para obtener su información aquí" - Label39.Text = "Fecha:" - Label41.Text = "Descripción de clase:" - Label43.Text = "Identificador GUID de clase:" - Label45.Text = "Estado de firma del controlador:" - Label47.Text = "Ruta del archivo de catálogo:" - Label48.Text = "Ha configurado los procesos en segundo plano de manera que no se muestren todos los controladores de esta imagen, que incluye controladores parte de la distribución de Windows, por lo que podría no ver el controlador que le interesa." - Button1.Text = "Añadir controlador..." - Button2.Text = "Eliminar selección" - Button3.Text = "Eliminar todos" - Button7.Text = "Cambiar" - Button8.Text = "Guardar..." - Button9.Text = "Ver información del archivo de controladores" - LinkLabel1.Text = "<- Atrás" - InstalledDriverLink.Text = "Deseo obtener información acerca de controladores instalados en la imagen" - DriverFileLink.Text = "Deseo obtener información acerca de archivos de controladores" - ListView1.Columns(0).Text = "Nombre publicado" - ListView1.Columns(1).Text = "Nombre de archivo original" - OpenFileDialog1.Title = "Ubique los archivos de controladores" - SearchBox1.Text = "Escriba aquí para buscar un controlador..." - Case 3 - Text = "Obtenir des informations sur les pilotes" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Sur quoi souhaitez-vous obtenir des informations ?" - Label3.Text = "Cliquez ici pour obtenir des informations sur les pilotes que vous avez installés ou qui sont fournis avec l'image Windows dont vous assurez la maintenance" - Label4.Text = "Cliquez ici pour obtenir des informations sur les pilotes que vous souhaitez ajouter à l'image Windows que vous maintenez avant de poursuivre le processus d'ajout de pilote" - Label5.Text = "Prêt" - Label6.Text = "Ajoutez ou sélectionnez un paquet de pilote pour afficher son information ici" - Label7.Text = "Cibles matérielles" - Label8.Text = "Description du matériel :" - Label10.Text = "ID du matériel :" - Label12.Text = "ID supplémentaires :" - Label13.Text = "ID compatibles :" - Label16.Text = "ID d'exclusion :" - Label17.Text = "Fabricant de matériel :" - Label20.Text = "Architecture :" - Label21.Text = "Sauter à la cible :" - Label22.Text = "Nom publié :" - Label24.Text = "Nom du fichier original :" - Label26.Text = "Nom du prestataire :" - Label28.Text = "Est-il essentiel au processus de démarrage ?" - Label30.Text = "Version :" - Label31.Text = "Nom de classe :" - Label33.Text = "Fait-il partie de la distribution Windows ?" - Label36.Text = "Information sur le pilote" - Label37.Text = "Sélectionnez un pilote installé pour afficher ses informations ici" - Label39.Text = "Date :" - Label41.Text = "Description de classe :" - Label43.Text = "GUID de classe :" - Label45.Text = "État de la signature du pilote :" - Label47.Text = "Chemin d'accès au fichier de catalogue :" - Label48.Text = "Vous avez configuré les processus en arrière plan de manière à ne pas afficher tous les pilotes présents dans cette image, ce qui inclut les pilotes faisant partie de la distribution Windows. Il est donc possible que vous ne voyiez pas le pilote qui vous intéresse." - Button1.Text = "Ajouter un pilote..." - Button2.Text = "Supprimer la sélection" - Button3.Text = "Supprimer tout" - Button7.Text = "Changer" - Button8.Text = "Sauvegarder..." - Button9.Text = "Voir les informations sur le fichier pilote" - LinkLabel1.Text = "<- Retourner" - InstalledDriverLink.Text = "Je souhaite obtenir des informations sur les pilotes installés dans l'image." - DriverFileLink.Text = "Je souhaite obtenir des informations sur les fichiers pilotes" - ListView1.Columns(0).Text = "Nom publié" - ListView1.Columns(1).Text = "Nom du fichier original" - OpenFileDialog1.Title = "Localiser les fichiers pilotes" - SearchBox1.Text = "Tapez ici pour rechercher un pilote..." - Case 4 - Text = "Obter informações do controlador" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Sobre o que é que pretende obter informações?" - Label3.Text = "Clique aqui para obter informações sobre os controladores que instalou ou que vieram com a imagem do Windows que está a reparar" - Label4.Text = "Clique aqui para obter informações sobre os controladores que pretende adicionar à imagem do Windows que está a reparar antes de prosseguir com o processo de adição de controladores" - Label5.Text = "Pronto" - Label6.Text = "Adicione ou seleccione um pacote de controladores para ver as suas informações aqui" - Label7.Text = "Alvos de hardware" - Label8.Text = "Descrição do hardware:" - Label10.Text = "ID do hardware:" - Label12.Text = "IDs adicionais:" - Label13.Text = "IDs compatíveis:" - Label16.Text = "Excluir IDs:" - Label17.Text = "Fabricante do hardware:" - Label20.Text = "Arquitetura:" - Label21.Text = "Saltar para o alvo:" - Label22.Text = "Nome publicado:" - Label24.Text = "Nome do ficheiro original:" - Label26.Text = "Nome do fornecedor:" - Label28.Text = "É crítico para o processo de arranque?" - Label30.Text = "Versão:" - Label31.Text = "Nome da classe:" - Label33.Text = "Parte da distribuição do Windows?" - Label36.Text = "Informações do controlador" - Label37.Text = "Seleccione um controlador instalado para ver as suas informações aqui" - Label39.Text = "Data:" - Label41.Text = "Descrição da classe:" - Label43.Text = "GUID da classe:" - Label45.Text = "Estado da assinatura do controlador:" - Label47.Text = "Caminho do ficheiro de catálogo:" - Label48.Text = "Configurou os processos em segundo plano para não mostrar todos os controladores presentes nesta imagem, o que inclui controladores que fazem parte da distribuição do Windows, pelo que poderá não ver o controlador em que está interessado." - Button1.Text = "Adicionar controlador..." - Button2.Text = "Remover selecionado" - Button3.Text = "Remover todos" - Button7.Text = "Alterar" - Button8.Text = "Guardar..." - Button9.Text = "Ver informações do ficheiro do controlador" - LinkLabel1.Text = "<- Voltar atrás" - InstalledDriverLink.Text = "Quero obter informações sobre os controladores instalados na imagem" - DriverFileLink.Text = "Pretendo obter informações sobre ficheiros de controladores" - ListView1.Columns(0).Text = "Nome publicado" - SearchBox1.Text = "Digite aqui para pesquisar um controlador..." - Case 5 - Text = "Verifica informazioni driver" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Su cosa vuoi verificare informazioni?" - Label3.Text = "Fai clic qui per verificare informazioni sui driver installati o forniti con l'immagine di Windows che stai revisionando" - Label4.Text = "Fai clic qui per verificare informazioni sui driver che vuoi aggiungere all'immagine di Windows prima di procedere con il processo di aggiunta dei driver" - Label5.Text = "Pronto" - Label6.Text = "Per visualizzarne le informazioni aggiungi o seleziona un pacchetto driver" - Label7.Text = "Obiettivi hardware" - Label8.Text = "Descrizione hardware:" - Label10.Text = "ID hardware:" - Label12.Text = "ID aggiuntivi:" - Label13.Text = "ID compatibili:" - Label16.Text = "Escludi ID:" - Label17.Text = "Produttore hardware:" - Label20.Text = "Architettura:" - Label21.Text = "Vai all'obiettivo:" - Label22.Text = "Nome pubblicato:" - Label24.Text = "Nome file originale:" - Label26.Text = "Nome fornitore:" - Label28.Text = "È fondamentale per il processo di avvio?" - Label30.Text = "Versione:" - Label31.Text = "Nome classe:" - Label33.Text = "Parte della distribuzione di Windows?" - Label36.Text = "Informazioni driver" - Label37.Text = "Per visualizzarne le informazioni seleziona un driver installato" - Label39.Text = "Data:" - Label41.Text = "Descrizione classe:" - Label43.Text = "GUID classe:" - Label45.Text = "Stato firma driver:" - Label47.Text = "Percorso file catalogo:" - Label48.Text = "I processi in background sono stati configurati in modo da non visualizzare tutti i driver presenti in questa immagine, che include i driver che fanno parte della distribuzione di Windows, quindi è possibile che non venga visualizzato il driver a cui sei interessato." - Button1.Text = "Aggiungi driver..." - Button2.Text = "Rimuovi selezionati" - Button3.Text = "Rimuovi tutti" - Button7.Text = "Modifica" - Button8.Text = "Salva..." - Button9.Text = "Visualizza informazioni sul file del driver" - LinkLabel1.Text = "<- Indietro" - InstalledDriverLink.Text = "Voglio verificare informazioni sui driver installati nell'immagine" - DriverFileLink.Text = "Voglio verificare informazioni sui file dei driver" - ListView1.Columns(0).Text = "Nome file pubblicato" - ListView1.Columns(1).Text = "Nome file originale" - OpenFileDialog1.Title = "Rilevazione file driver" - SearchBox1.Text = "Digita qui per cercare un driver..." - End Select + Text = LocalizationService.ForSection("GetDriverInfo")("Driver.Label") + ImageTaskHeader1.ItemText = Text + Label2.Text = LocalizationService.ForSection("GetDriverInfo")("Get.Label") + Label3.Text = LocalizationService.ForSection("GetDriverInfo")("Get.Drivers.Message") + Label4.Text = LocalizationService.ForSection("GetDriverInfo")("AddDrivers.Help.Message") + Label5.Text = LocalizationService.ForSection("GetDriverInfo")("Ready.Label") + Label6.Text = LocalizationService.ForSection("GetDriverInfo")("Add.DriverPackage.Label") + Label7.Text = LocalizationService.ForSection("GetDriverInfo")("HardwareTargets.Label") + Label8.Text = LocalizationService.ForSection("GetDriverInfo")("Hardware.Description.Label") + Label10.Text = LocalizationService.ForSection("GetDriverInfo")("HardwareID.Label") + Label12.Text = LocalizationService.ForSection("GetDriverInfo")("AdditionalIds.Label") + Label13.Text = LocalizationService.ForSection("GetDriverInfo")("CompatibleIds.Label") + Label16.Text = LocalizationService.ForSection("GetDriverInfo")("ExcludeIds.Label") + Label17.Text = LocalizationService.ForSection("GetDriverInfo")("Hardware.Manufacturer.Label") + Label20.Text = LocalizationService.ForSection("GetDriverInfo")("Architecture.Label") + Label21.Text = LocalizationService.ForSection("GetDriverInfo")("JumpTarget.Label") + Label22.Text = LocalizationService.ForSection("GetDriverInfo")("PublishedName.Label") + Label24.Text = LocalizationService.ForSection("GetDriverInfo")("Original.File.Name.Label") + Label26.Text = LocalizationService.ForSection("GetDriverInfo")("ProviderName.Label") + Label28.Text = LocalizationService.ForSection("GetDriverInfo")("Critical.Boot.Process.Label") + Label30.Text = LocalizationService.ForSection("GetDriverInfo")("Version.Label") + Label31.Text = LocalizationService.ForSection("GetDriverInfo")("ClassName.Label") + Label33.Text = LocalizationService.ForSection("GetDriverInfo")("Part.Windows.Label") + Label36.Text = LocalizationService.ForSection("GetDriverInfo")("DriverInfo.Label") + Label37.Text = LocalizationService.ForSection("GetDriverInfo")("Installed.Driver.View.Label") + Label39.Text = LocalizationService.ForSection("GetDriverInfo")("Date.Label") + Label41.Text = LocalizationService.ForSection("GetDriverInfo")("ClassDescription.Label") + Label43.Text = LocalizationService.ForSection("GetDriverInfo")("ClassGUID.Label") + Label45.Text = LocalizationService.ForSection("GetDriverInfo")("Driver.Signature.Label") + Label47.Text = LocalizationService.ForSection("GetDriverInfo")("Catalog.File.Path.Label") + Label48.Text = LocalizationService.ForSection("GetDriverInfo")("Bg.Procs.Notice.Message") + Button1.Text = LocalizationService.ForSection("GetDriverInfo")("AddDriver.Button") + Button2.Text = LocalizationService.ForSection("GetDriverInfo")("RemoveSelected.Button") + Button3.Text = LocalizationService.ForSection("GetDriverInfo")("RemoveAll.Button") + Button7.Text = LocalizationService.ForSection("GetDriverInfo")("Change.Button") + Button8.Text = LocalizationService.ForSection("GetDriverInfo")("Save.Button") + Button9.Text = LocalizationService.ForSection("GetDriverInfo")("View.Driver.File.Button") + LinkLabel1.Text = LocalizationService.ForSection("GetDriverInfo")("GoBack.Link") + InstalledDriverLink.Text = LocalizationService.ForSection("GetDriverInfo")("InstalledDriver.Link") + DriverFileLink.Text = LocalizationService.ForSection("GetDriverInfo")("Iwant.Link") + ListView1.Columns(0).Text = LocalizationService.ForSection("GetDriverInfo")("PublishedName.Column") + ListView1.Columns(1).Text = LocalizationService.ForSection("GetDriverInfo")("Original.File.Name.Column") + OpenFileDialog1.Title = LocalizationService.ForSection("GetDriverInfo")("Locate.Driver.Files.Title") + SearchBox1.Text = LocalizationService.ForSection("GetDriverInfo")("Type.Search.Driver.Button") ImageTaskHeader1.SetColors() BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor @@ -543,14 +136,12 @@ Public Class GetDriverInfo End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click - OpenFileDialog1.ShowDialog(Me) - End Sub - - Private Sub OpenFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk - ListBox1.Items.Add(OpenFileDialog1.FileName) - Button3.Enabled = True - Button8.Enabled = True - GetDriverInformation() + If OpenFileDialog1.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then + ListBox1.Items.AddRange(OpenFileDialog1.FileNames) + Button3.Enabled = True + Button8.Enabled = True + GetDriverInformation() + End If End Sub Private Sub InstalledDriverLink_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles InstalledDriverLink.LinkClicked @@ -595,88 +186,16 @@ Public Class GetDriverInfo If MainForm.ImgBW.IsBusy Then DynaLog.LogMessage("Background processes are busy. Stopping them...") Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Background processes need to have completed before showing package information. We'll wait until they have completed" - Case "ESN" - msg = "Los procesos en segundo plano deben haber completado antes de obtener información del paquete. Esperaremos hasta que hayan completado" - Case "FRA" - msg = "Les processus en plan doivent être terminés avant d'afficher les paquets. Nous attendrons qu'ils soient terminés" - Case "PTB", "PTG" - msg = "Os processos em segundo plano precisam de ser concluídos antes de mostrar as informações dos pacotes. Esperamos até que estejam concluídos" - Case "ITA" - msg = "Prima di visualizzare le informazioni sul pacchetto devono essere completati i processi in background. Attendi che siano completati." - End Select - Case 1 - msg = "Background processes need to have completed before showing package information. We'll wait until they have completed" - Case 2 - msg = "Los procesos en segundo plano deben haber completado antes de obtener información del paquete. Esperaremos hasta que hayan completado" - Case 3 - msg = "Les processus en plan doivent être terminés avant d'afficher les paquets. Nous attendrons qu'ils soient terminés" - Case 4 - msg = "Os processos em segundo plano precisam de ser concluídos antes de mostrar as informações dos pacotes. Esperamos até que estejam concluídos" - Case 5 - msg = "Prima di visualizzare le informazioni sul pacchetto devono essere completati i processi in secondo piano. Attendi che siano completati." - End Select + msg = LocalizationService.ForSection("GetDriverInfo.DriverInfo")("Wait.Background.Message") MsgBox(msg, vbOKOnly + vbInformation, ImageTaskHeader1.ItemText) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label5.Text = "Waiting for background processes to finish..." - Case "ESN" - Label5.Text = "Esperando a que terminen los procesos en segundo plano..." - Case "FRA" - Label5.Text = "Attente de la fin des processus en arrière plan..." - Case "PTB", "PTG" - Label5.Text = "À espera que os processos em segundo plano terminem..." - Case "ITA" - Label5.Text = "In attesa del completamento dei processi in background..." - End Select - Case 1 - Label5.Text = "Waiting for background processes to finish..." - Case 2 - Label5.Text = "Esperando a que terminen los procesos en segundo plano..." - Case 3 - Label5.Text = "Attente de la fin des processus en arrière plan..." - Case 4 - Label5.Text = "À espera que os processos em segundo plano terminem..." - Case 5 - Label5.Text = "In attesa del completamento dei processi in background..." - End Select + Label5.Text = LocalizationService.ForSection("GetDriverInfo.DriverInfo")("Waiting.Background.Label") While MainForm.ImgBW.IsBusy Application.DoEvents() Thread.Sleep(500) End While End If MainForm.StopMountedImageDetector() - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label5.Text = "Preparing driver information processes..." - Case "ESN" - Label5.Text = "Preparando procesos de información de controladores..." - Case "FRA" - Label5.Text = "Préparation des processus d'information des pilotes en cours..." - Case "PTB", "PTG" - Label5.Text = "Preparar os processos de informação dos controladores..." - Case "ITA" - Label5.Text = "Preparazione verifica informazioni driver..." - End Select - Case 1 - Label5.Text = "Preparing driver information processes..." - Case 2 - Label5.Text = "Preparando procesos de información de controladores..." - Case 3 - Label5.Text = "Préparation des processus d'information des pilotes en cours..." - Case 4 - Label5.Text = "Preparar os processos de informação dos controladores..." - Case 5 - Label5.Text = "Preparazione verifica informazioni driver..." - End Select + Label5.Text = LocalizationService.ForSection("DriverInfo.Load")("Preparing.Driver.Item") Application.DoEvents() DynaLog.LogMessage("Initializing API...") DismApi.Initialize(DismLogLevel.LogErrors) @@ -690,31 +209,38 @@ Public Class GetDriverInfo Case 0 Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName Case "ENU", "ENG" - Label5.Text = "Getting information from driver file " & Quote & Path.GetFileName(drvFile) & Quote & "..." & CrLf & "This may take some time and the program may temporarily freeze" + Label5.Text = "Getting information from driver file " & Quote & Path.GetFileName(drvFile) & Quote & "..." Case "ESN" - Label5.Text = "Obteniendo información del archivo de controlador " & Quote & Path.GetFileName(drvFile) & Quote & "..." & CrLf & "Esto puede llevar algo de tiempo y el programa podría congelarse temporalmente" + Label5.Text = "Obteniendo información del archivo de controlador " & Quote & Path.GetFileName(drvFile) & Quote & "..." Case "FRA" - Label5.Text = "Obtention des informations du fichier pilote " & Quote & Path.GetFileName(drvFile) & Quote & " en cours..." & CrLf & "Cette opération peut prendre un certain temps et le programme peut se bloquer temporairement." + Label5.Text = "Obtention des informations du fichier pilote " & Quote & Path.GetFileName(drvFile) & Quote & " en cours..." Case "PTB", "PTG" - Label5.Text = "Obter informações do ficheiro do controlador " & Quote & Path.GetFileName(drvFile) & Quote & "..." & CrLf & "Isto pode demorar algum tempo e o programa pode congelar temporariamente" + Label5.Text = "Obter informações do ficheiro do controlador " & Quote & Path.GetFileName(drvFile) & Quote & "..." Case "ITA" - Label5.Text = "Verifica informazioni file driver " & Quote & Path.GetFileName(drvFile) & Quote & "..." & CrLf & "Questa operazione potrebbe richiedere del tempo e il programma potrebbe temporaneamente bloccarsi" + Label5.Text = "Verifica informazioni file driver " & Quote & Path.GetFileName(drvFile) & Quote & "..." End Select Case 1 - Label5.Text = "Getting information from driver file " & Quote & Path.GetFileName(drvFile) & Quote & "..." & CrLf & "This may take some time and the program may temporarily freeze" + Label5.Text = "Getting information from driver file " & Quote & Path.GetFileName(drvFile) & Quote & "..." Case 2 - Label5.Text = "Obteniendo información del archivo de controlador " & Quote & Path.GetFileName(drvFile) & Quote & "..." & CrLf & "Esto puede llevar algo de tiempo y el programa podría congelarse temporalmente" + Label5.Text = "Obteniendo información del archivo de controlador " & Quote & Path.GetFileName(drvFile) & Quote & "..." Case 3 - Label5.Text = "Obtention des informations du fichier pilote " & Quote & Path.GetFileName(drvFile) & Quote & " en cours..." & CrLf & "Cette opération peut prendre un certain temps et le programme peut se bloquer temporairement." + Label5.Text = "Obtention des informations du fichier pilote " & Quote & Path.GetFileName(drvFile) & Quote & " en cours..." Case 4 - Label5.Text = "Obter informações do ficheiro do controlador " & Quote & Path.GetFileName(drvFile) & Quote & "..." & CrLf & "Isto pode demorar algum tempo e o programa pode congelar temporariamente" + Label5.Text = "Obter informações do ficheiro do controlador " & Quote & Path.GetFileName(drvFile) & Quote & "..." Case 5 - Label5.Text = "Verifica informazioni file driver " & Quote & Path.GetFileName(drvFile) & Quote & "..." & CrLf & "Questa operazione potrebbe richiedere del tempo e il programma potrebbe temporaneamente bloccarsi" + Label5.Text = "Verifica informazioni file driver " & Quote & Path.GetFileName(drvFile) & Quote & "..." End Select Application.DoEvents() - Dim drvInfoCollection As DismDriverCollection = DismApi.GetDriverInfo(imgSession, drvFile) - DynaLog.LogMessage("Information collection count: " & drvInfoCollection.Count) - If drvInfoCollection.Count > 0 Then DriverInfoList.Add(drvInfoCollection) + ' Pesky computer manufacturer companies like HP have INF files that are not drivers. Work around + ' those. HP: horrible products that are "oddly satisfying" + Try + Dim drvInfoCollection As DismDriverCollection = DismApi.GetDriverInfo(imgSession, drvFile), + UniqueHardwareCount As Integer = drvInfoCollection.Distinct().Count + DynaLog.LogMessage("Information collection count: " & UniqueHardwareCount) + If UniqueHardwareCount > 0 Then DriverInfoList.Add(drvInfoCollection) + Catch ex As Exception + ' Information could not be obtained. Continue + End Try End If Next End Using @@ -730,31 +256,7 @@ Public Class GetDriverInfo End Try End Try DynaLog.LogMessage("This process has finished.") - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label5.Text = "Ready" - Case "ESN" - Label5.Text = "Listo" - Case "FRA" - Label5.Text = "Prêt" - Case "PTB", "PTG" - Label5.Text = "Pronto" - Case "ITA" - Label5.Text = "Pronto" - End Select - Case 1 - Label5.Text = "Ready" - Case 2 - Label5.Text = "Listo" - Case 3 - Label5.Text = "Prêt" - Case 4 - Label5.Text = "Pronto" - Case 5 - Label5.Text = "Pronto" - End Select + Label5.Text = LocalizationService.ForSection("GetDriverInfo.DriverInfo")("Ready.Item") WindowHelper.EnableCloseCapability(Handle) End Sub @@ -774,59 +276,11 @@ Public Class GetDriverInfo Label19.Text = Casters.CastDismArchitecture(selectedDriver.Architecture, True) If Label14.Text = "" Then DynaLog.LogMessage("There are no Compatible IDs declared by the device manufacturer (" & Quote & selectedDriver.ManufacturerName & Quote & ")") - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label14.Text = "None declared by the hardware manufacturer" - Case "ESN" - Label14.Text = "Ninguno declarado por el fabricante del hardware" - Case "FRA" - Label14.Text = "Aucune déclarée par le fabricant du matériel" - Case "PTB", "PTG" - Label14.Text = "Nenhum declarado pelo fabricante do hardware" - Case "ITA" - Label14.Text = "Nessuno dichiarato dal produttore hardware" - End Select - Case 1 - Label14.Text = "None declared by the hardware manufacturer" - Case 2 - Label14.Text = "Ninguno declarado por el fabricante del hardware" - Case 3 - Label14.Text = "Aucune déclarée par le fabricant du matériel" - Case 4 - Label14.Text = "Nenhum declarado pelo fabricante do hardware" - Case 5 - Label14.Text = "Nessuno dichiarato dal produttore hardware" - End Select + Label14.Text = LocalizationService.ForSection("DriverInfo.Display")("NoManufacturer.Label") End If If Label15.Text = "" Then DynaLog.LogMessage("There are no Exclude IDs declared by the device manufacturer (" & Quote & selectedDriver.ManufacturerName & Quote & ")") - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label15.Text = "None declared by the hardware manufacturer" - Case "ESN" - Label15.Text = "Ninguno declarado por el fabricante del hardware" - Case "FRA" - Label15.Text = "Aucune déclarée par le fabricant du matériel" - Case "PTB", "PTG" - Label15.Text = "Nenhum declarado pelo fabricante do hardware" - Case "ITA" - Label15.Text = "Nessuno dichiarato dal produttore hardware" - End Select - Case 1 - Label15.Text = "None declared by the hardware manufacturer" - Case 2 - Label15.Text = "Ninguno declarado por el fabricante del hardware" - Case 3 - Label15.Text = "Aucune déclarée par le fabricant du matériel" - Case 4 - Label15.Text = "Nenhum declarado pelo fabricante do hardware" - Case 5 - Label15.Text = "Nessuno dichiarato dal produttore hardware" - End Select + Label15.Text = LocalizationService.ForSection("DriverInfo.Display")("NoManufacturer.Label") End If End Sub @@ -840,9 +294,10 @@ Public Class GetDriverInfo DynaLog.LogMessage("There is only 1 item selected.") JumpTo = -1 ComboBox1.Text = "" - Dim CurrentDriverCollection As DismDriverCollection = DriverInfoList(ListBox1.SelectedIndex) - DynaLog.LogMessage("Showing " & CurrentDriverCollection.Count & " entry/ies...") - ComboBox1.Items.AddRange(CurrentDriverCollection.Select(Function(DriverPackageInfo) String.Format("{0} - {1} ({2})", CurrentDriverCollection.IndexOf(DriverPackageInfo) + 1, DriverPackageInfo.HardwareDescription, DriverPackageInfo.HardwareId)).ToArray()) + Dim CurrentDriverCollection As DismDriverCollection = DriverInfoList(ListBox1.SelectedIndex), + UniqueHardwareTargets As List(Of DismDriver) = CurrentDriverCollection.Distinct().ToList() + DynaLog.LogMessage("Showing " & UniqueHardwareTargets.Count & " entry/ies...") + ComboBox1.Items.AddRange(UniqueHardwareTargets.Select(Function(DriverPackageInfo) String.Format("{0} - {1} ({2})", UniqueHardwareTargets.IndexOf(DriverPackageInfo) + 1, DriverPackageInfo.HardwareDescription, DriverPackageInfo.HardwareId)).ToArray()) End If End Sub @@ -867,36 +322,37 @@ Public Class GetDriverInfo Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged Try If ListBox1.SelectedItems.Count = 1 Then - DynaLog.LogMessage("Amount of hardware targets of selected driver file: " & DriverInfoList(ListBox1.SelectedIndex).Count) + DynaLog.LogMessage("Amount of hardware targets of selected driver file: " & DriverInfoList(ListBox1.SelectedIndex).Distinct().Count) JumpToPanel.Visible = False NoDrvPanel.Visible = False DrvPackageInfoPanel.Visible = True Button2.Enabled = True If Not CurrentHWFile = ListBox1.SelectedIndex Then + Dim hwCount As Integer = DriverInfoList(ListBox1.SelectedIndex).Distinct().Count Select Case MainForm.Language Case 0 Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName Case "ENU", "ENG" - Label7.Text = "Hardware target 1 of " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware target 1 of " & hwCount Case "ESN" - Label7.Text = "Hardware de destino 1 de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware de destino 1 de " & hwCount Case "FRA" - Label7.Text = "Cible matérielle 1 de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Cible matérielle 1 de " & hwCount Case "PTB", "PTG" - Label7.Text = "Equipamento-alvo 1 de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Equipamento-alvo 1 de " & hwCount Case "ITA" - Label7.Text = "Destinazione hardware 1 di " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Destinazione hardware 1 di " & hwCount End Select Case 1 - Label7.Text = "Hardware target 1 of " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware target 1 of " & hwCount Case 2 - Label7.Text = "Hardware de destino 1 de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware de destino 1 de " & hwCount Case 3 - Label7.Text = "Cible matérielle 1 de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Cible matérielle 1 de " & hwCount Case 4 - Label7.Text = "Equipamento-alvo 1 de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Equipamento-alvo 1 de " & hwCount Case 5 - Label7.Text = "Destinazione hardware 1 di " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Destinazione hardware 1 di " & hwCount End Select End If If Not CurrentHWFile = ListBox1.SelectedIndex Then CurrentHWTarget = 1 @@ -958,30 +414,31 @@ Public Class GetDriverInfo DynaLog.LogMessage("Switching to the previous hardware target...") DisplayDriverInformation(CurrentHWTarget - 1) CurrentHWTarget -= 1 + Dim hwCount As Integer = DriverInfoList(ListBox1.SelectedIndex).Distinct().Count Select Case MainForm.Language Case 0 Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName Case "ENU", "ENG" - Label7.Text = "Hardware target " & CurrentHWTarget & " of " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware target " & CurrentHWTarget & " of " & hwCount Case "ESN" - Label7.Text = "Hardware de destino " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware de destino " & CurrentHWTarget & " de " & hwCount Case "FRA" - Label7.Text = "Cible matérielle " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Cible matérielle " & CurrentHWTarget & " de " & hwCount Case "PTB", "PTG" - Label7.Text = "Equipamento-alvo " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Equipamento-alvo " & CurrentHWTarget & " de " & hwCount Case "ITA" - Label7.Text = "Destinazione hardware " & CurrentHWTarget & " di " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Destinazione hardware " & CurrentHWTarget & " di " & hwCount End Select Case 1 - Label7.Text = "Hardware target " & CurrentHWTarget & " of " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware target " & CurrentHWTarget & " of " & hwCount Case 2 - Label7.Text = "Hardware de destino " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware de destino " & CurrentHWTarget & " de " & hwCount Case 3 - Label7.Text = "Cible matérielle " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Cible matérielle " & CurrentHWTarget & " de " & hwCount Case 4 - Label7.Text = "Equipamento-alvo " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Equipamento-alvo " & CurrentHWTarget & " de " & hwCount Case 5 - Label7.Text = "Destinazione hardware " & CurrentHWTarget & " di " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Destinazione hardware " & CurrentHWTarget & " di " & hwCount End Select Button5.Enabled = True If CurrentHWTarget = 1 Then Button4.Enabled = False @@ -993,30 +450,31 @@ Public Class GetDriverInfo DynaLog.LogMessage("Switching to the next hardware target...") DisplayDriverInformation(CurrentHWTarget + 1) CurrentHWTarget += 1 + Dim hwCount As Integer = DriverInfoList(ListBox1.SelectedIndex).Distinct().Count Select Case MainForm.Language Case 0 Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName Case "ENU", "ENG" - Label7.Text = "Hardware target " & CurrentHWTarget & " of " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware target " & CurrentHWTarget & " of " & hwCount Case "ESN" - Label7.Text = "Hardware de destino " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware de destino " & CurrentHWTarget & " de " & hwCount Case "FRA" - Label7.Text = "Cible matérielle " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Cible matérielle " & CurrentHWTarget & " de " & hwCount Case "PTB", "PTG" - Label7.Text = "Equipamento-alvo " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Equipamento-alvo " & CurrentHWTarget & " de " & hwCount Case "ITA" - Label7.Text = "Destinazione hardware " & CurrentHWTarget & " di " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Destinazione hardware " & CurrentHWTarget & " di " & hwCount End Select Case 1 - Label7.Text = "Hardware target " & CurrentHWTarget & " of " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware target " & CurrentHWTarget & " of " & hwCount Case 2 - Label7.Text = "Hardware de destino " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware de destino " & CurrentHWTarget & " de " & hwCount Case 3 - Label7.Text = "Cible matérielle " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Cible matérielle " & CurrentHWTarget & " de " & hwCount Case 4 - Label7.Text = "Equipamento-alvo " & CurrentHWTarget & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Equipamento-alvo " & CurrentHWTarget & " de " & hwCount Case 5 - Label7.Text = "Destinazione hardware " & CurrentHWTarget & " di " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Destinazione hardware " & CurrentHWTarget & " di " & hwCount End Select Button4.Enabled = True If CurrentHWTarget = DriverInfoList(ListBox1.SelectedIndex).Count Then Button5.Enabled = False @@ -1025,121 +483,50 @@ Public Class GetDriverInfo Private Sub Button4_MouseHover(sender As Object, e As EventArgs) Handles Button4.MouseHover Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Previous hardware target" - Case "ESN" - msg = "Anterior hardware de destino" - Case "FRA" - msg = "Cible matérielle précédente" - Case "PTB", "PTG" - msg = "Equipamento-alvo anterior" - Case "ITA" - msg = "Destinazione hardware precedente" - End Select - Case 1 - msg = "Previous hardware target" - Case 2 - msg = "Anterior hardware de destino" - Case 3 - msg = "Cible matérielle précédente" - Case 4 - msg = "Equipamento-alvo anterior" - Case 5 - msg = "Destinazione hardware precedente" - End Select + msg = LocalizationService.ForSection("GetDriverInfo.Tooltip")("Previous.Hardware.Message") WindowHelper.DisplayToolTip(sender, msg) End Sub Private Sub Button5_MouseHover(sender As Object, e As EventArgs) Handles Button5.MouseHover Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Next hardware target" - Case "ESN" - msg = "Siguiente hardware de destino" - Case "FRA" - msg = "Prochaine cible matérielle" - Case "PTB", "PTG" - msg = "Equipamento-alvo seguinte" - Case "ITA" - msg = "Destinazione hardware successiva" - End Select - Case 1 - msg = "Next hardware target" - Case 2 - msg = "Siguiente hardware de destino" - Case 3 - msg = "Prochaine cible matérielle" - Case 4 - msg = "Equipamento-alvo seguinte" - Case 5 - msg = "Destinazione hardware sucecssiva" - End Select + msg = LocalizationService.ForSection("GetDriverInfo.Tooltip")("Next.Hardware.Target.Message") WindowHelper.DisplayToolTip(sender, msg) End Sub Private Sub Button6_MouseHover(sender As Object, e As EventArgs) Handles Button6.MouseHover Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Jump to specific hardware target" - Case "ESN" - msg = "Saltar a hardware de destino específico" - Case "FRA" - msg = "Sauter à la cible matérielle spécifique" - Case "PTB", "PTG" - msg = "Saltar para um equipamento-alvo específico" - Case "ITA" - msg = "Salta ad una destinazione hardware specifica" - End Select - Case 1 - msg = "Jump to specific hardware target" - Case 2 - msg = "Saltar a hardware de destino específico" - Case 3 - msg = "Sauter à la cible matérielle spécifique" - Case 4 - msg = "Saltar para um equipamento-alvo específico" - Case 5 - msg = "Salta ad una destinazione hardware specifica" - End Select + msg = LocalizationService.ForSection("GetDriverInfo.Tooltip")("Jump.Specific.Message") WindowHelper.DisplayToolTip(sender, msg) End Sub Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged JumpTo = ComboBox1.SelectedIndex + 1 If JumpTo < 1 Then Exit Sub + Dim hwCount As Integer = DriverInfoList(ListBox1.SelectedIndex).Distinct().Count Select Case MainForm.Language Case 0 Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName Case "ENU", "ENG" - Label7.Text = "Hardware target " & JumpTo & " of " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware target " & JumpTo & " of " & hwCount Case "ESN" - Label7.Text = "Hardware de destino " & JumpTo & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware de destino " & JumpTo & " de " & hwCount Case "FRA" - Label7.Text = "Cible matérielle " & JumpTo & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Cible matérielle " & JumpTo & " de " & hwCount Case "PTB", "PTG" - Label7.Text = "Equipamento-alvo " & JumpTo & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Equipamento-alvo " & JumpTo & " de " & hwCount Case "ITA" - Label7.Text = "Destinazione hardware " & JumpTo & " di " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Destinazione hardware " & JumpTo & " di " & hwCount End Select Case 1 - Label7.Text = "Hardware target " & JumpTo & " of " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware target " & JumpTo & " of " & hwCount Case 2 - Label7.Text = "Hardware de destino " & JumpTo & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Hardware de destino " & JumpTo & " de " & hwCount Case 3 - Label7.Text = "Cible matérielle " & JumpTo & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Cible matérielle " & JumpTo & " de " & hwCount Case 4 - Label7.Text = "Equipamento-alvo " & JumpTo & " de " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Equipamento-alvo " & JumpTo & " de " & hwCount Case 5 - Label7.Text = "Destinazione hardware " & JumpTo & " di " & DriverInfoList(ListBox1.SelectedIndex).Count + Label7.Text = "Destinazione hardware " & JumpTo & " di " & hwCount End Select CurrentHWTarget = JumpTo DisplayDriverInformation(JumpTo) @@ -1168,49 +555,16 @@ Public Class GetDriverInfo DynaLog.LogMessage("Getting information about driver " & Quote & Path.GetFileName(drv.DriverOriginalFileName) & Quote & "...") Label23.Text = drv.DriverPublishedName Label25.Text = Path.GetFileName(drv.DriverOriginalFileName) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label27.Text = "" - Label34.Text = If(drv.DriverInbox, "Yes", "No") - Case "ESN" - Label27.Text = "" - Label34.Text = If(drv.DriverInbox, "Sí", "No") - Case "FRA" - Label27.Text = "" - Label34.Text = If(drv.DriverInbox, "Oui", "Non") - Case "PTB", "PTG" - Label27.Text = "" - Label34.Text = If(drv.DriverInbox, "Sim", "Não") - Case "ITA" - Label27.Text = "" - Label34.Text = If(drv.DriverInbox, "Sì", "No") - End Select - Case 1 - Label27.Text = "" - Label34.Text = If(drv.DriverInbox, "Yes", "No") - Case 2 - Label27.Text = "" - Label34.Text = If(drv.DriverInbox, "Sí", "No") - Case 3 - Label27.Text = "" - Label34.Text = If(drv.DriverInbox, "Oui", "Non") - Case 4 - Label27.Text = "" - Label34.Text = If(drv.DriverInbox, "Sim", "Não") - Case 5 - Label27.Text = "" - Label34.Text = If(drv.DriverInbox, "Sì", "No") - End Select + Label27.Text = LocalizationService.ForSection("GetDriverInfo")("Value.Label") + Label34.Text = If(drv.DriverInbox, LocalizationService.ForSection("GetDriverInfo")("Yes.Button"), LocalizationService.ForSection("GetDriverInfo")("No.Button")) Label29.Text = drv.DriverVersion.ToString() Label32.Text = drv.DriverClassName Label35.Text = drv.DriverProviderName Label38.Text = drv.DriverDate Label40.Text = "" Label42.Text = "" - Label44.Text = "Unknown" - Label46.Text = "Unknown" + Label44.Text = LocalizationService.ForSection("DriverInfo")("Unknown.Label") + Label46.Text = LocalizationService.ForSection("DriverInfo")("Unknown.Label") Else Dim drv As DismDriverPackage = Nothing If SearchBox1.Text = "" Then @@ -1222,41 +576,8 @@ Public Class GetDriverInfo DynaLog.LogMessage("Getting information about driver " & Quote & Path.GetFileName(drv.OriginalFileName) & Quote & "...") Label23.Text = drv.PublishedName Label25.Text = Path.GetFileName(drv.OriginalFileName) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label27.Text = If(drv.BootCritical, "Yes", "No") - Label34.Text = If(drv.InBox, "Yes", "No") - Case "ESN" - Label27.Text = If(drv.BootCritical, "Sí", "No") - Label34.Text = If(drv.InBox, "Sí", "No") - Case "FRA" - Label27.Text = If(drv.BootCritical, "Oui", "Non") - Label34.Text = If(drv.InBox, "Oui", "Non") - Case "PTB", "PTG" - Label27.Text = If(drv.BootCritical, "Sim", "Não") - Label34.Text = If(drv.InBox, "Sim", "Não") - Case "ITA" - Label27.Text = If(drv.BootCritical, "Sì", "No") - Label34.Text = If(drv.InBox, "Sì", "No") - End Select - Case 1 - Label27.Text = If(drv.BootCritical, "Yes", "No") - Label34.Text = If(drv.InBox, "Yes", "No") - Case 2 - Label27.Text = If(drv.BootCritical, "Sí", "No") - Label34.Text = If(drv.InBox, "Sí", "No") - Case 3 - Label27.Text = If(drv.BootCritical, "Oui", "Non") - Label34.Text = If(drv.InBox, "Oui", "Non") - Case 4 - Label27.Text = If(drv.BootCritical, "Sim", "Não") - Label34.Text = If(drv.InBox, "Sim", "Não") - Case 5 - Label27.Text = If(drv.BootCritical, "Sì", "No") - Label34.Text = If(drv.InBox, "Sì", "No") - End Select + Label27.Text = If(drv.BootCritical, LocalizationService.ForSection("GetDriverInfo")("Yes.Button"), LocalizationService.ForSection("GetDriverInfo")("No.Button")) + Label34.Text = If(drv.InBox, LocalizationService.ForSection("GetDriverInfo")("Value.Button"), LocalizationService.ForSection("GetDriverInfo")("No.Button")) Label29.Text = drv.Version.ToString() Label32.Text = drv.ClassName Label35.Text = drv.ProviderName @@ -1272,38 +593,14 @@ Public Class GetDriverInfo Label38.Text = DriverDateString Label40.Text = drv.ClassDescription Label42.Text = drv.ClassGuid - Label44.Text = Casters.CastDismSignatureStatus(drv.DriverSignature, True) + Label44.Text = Casters.SignatureStatus(drv.DriverSignature, True) Label46.Text = drv.CatalogFile DynaLog.LogMessage("Getting driver signer...") Dim signer As String = DriverSignerViewer.GetSignerInfo(drv.OriginalFileName) If Not (signer Is Nothing OrElse signer = "") Then DynaLog.LogMessage("Driver signer information has been obtained.") DynaLog.LogMessage(String.Format("Driver file: {0} ; Signer: {1}", Quote & Path.GetFileName(drv.OriginalFileName) & Quote, signer)) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label44.Text &= " by " & signer - Case "ESN" - Label44.Text &= " por " & signer - Case "FRA" - Label44.Text &= " par " & signer - Case "PTB", "PTG" - Label44.Text &= " por " & signer - Case "ITA" - Label44.Text &= " da " & signer - End Select - Case 1 - Label44.Text &= " by " & signer - Case 2 - Label44.Text &= " por " & signer - Case 3 - Label44.Text &= " par " & signer - Case 4 - Label44.Text &= " por " & signer - Case 5 - Label44.Text &= " da " & signer - End Select + Label44.Text &= LocalizationService.ForSection("GetDriverInfo")("Text1.Label") & signer End If End If Else @@ -1366,20 +663,15 @@ Public Class GetDriverInfo If MainForm.CurrentImage.ImageDrivers.Count > 0 Then Dim FilteredDrivers As IEnumerable(Of DismDriverPackage) = Nothing Select Case driverSearchMode - Case SearchMode.OriginalFileName - FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Path.GetFileName(Driver.OriginalFileName).ToLower().Contains(sQuery.Replace("og:", "").ToLower())) - Case SearchMode.ProviderName - FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.ProviderName.ToLower().Contains(sQuery.Replace("prov:", "").ToLower())) + Case SearchMode.OriginalFileName : FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Path.GetFileName(Driver.OriginalFileName).ToLower().Contains(sQuery.Replace("og:", "").ToLower())) + Case SearchMode.ProviderName : FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.ProviderName.ToLower().Contains(sQuery.Replace("prov:", "").ToLower())) Case SearchMode.ClassName - FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.ClassName.ToLower().Contains(sQuery.Replace("classname:", "").Replace("cn:", "").ToLower())) - Case SearchMode.InBox - FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.InBox) - Case SearchMode.NoInBox - FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Not Driver.InBox) - Case SearchMode.BootCritical - FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.BootCritical) - Case SearchMode.NoBootCritical - FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Not Driver.BootCritical) + Dim ReferenceClassNames As String() = sQuery.Replace("classname:", "").Replace("cn:", "").Split(";").Select(Function(cn) cn.ToLower()).ToArray() + FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) ReferenceClassNames.Contains(Driver.ClassName.ToLower())) + Case SearchMode.InBox : FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.InBox) + Case SearchMode.NoInBox : FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Not Driver.InBox) + Case SearchMode.BootCritical : FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.BootCritical) + Case SearchMode.NoBootCritical : FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Not Driver.BootCritical) Case SearchMode.DateField ' We guess the SUBMODE by the operator used Try @@ -1393,18 +685,10 @@ Public Class GetDriverInfo Dim convertedField As Object = Nothing If {"eq", "ne", "gt", "ge", "lt", "le"}.Contains(searchOperator.ToLower()) Then ' Perform date conversion - If Not Date.TryParseExact(field, dateComparatorFormats, Nothing, Globalization.DateTimeStyles.None, convertedField) Then - convertedField = New Date(1970, 1, 1, 0, 0, 0) - End If + If Not Date.TryParseExact(field, dateComparatorFormats, Nothing, Globalization.DateTimeStyles.None, convertedField) Then convertedField = New Date(1970, 1, 1, 0, 0, 0) Else ' Perform integer conversion - If Not Integer.TryParse(field, convertedField) Then - If searchOperator.EndsWith("y", StringComparison.OrdinalIgnoreCase) Then - convertedField = 1970 - Else - convertedField = 1 - End If - End If + If Not Integer.TryParse(field, convertedField) Then convertedField = If(searchOperator.EndsWith("y", StringComparison.OrdinalIgnoreCase), 1970, 1) End If Select Case searchOperator.ToLower() Case "eqy" : FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.Date.Year = CInt(convertedField)) @@ -1430,12 +714,9 @@ Public Class GetDriverInfo Catch ex As Exception FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.PublishedName.ToLower().Contains(sQuery.ToLower())) End Try - Case SearchMode.NotSigned - FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.DriverSignature <> DismDriverSignature.Signed) - Case SearchMode.Signed - FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.DriverSignature = DismDriverSignature.Signed) - Case Else - FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.PublishedName.ToLower().Contains(sQuery.ToLower())) + Case SearchMode.NotSigned : FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.DriverSignature <> DismDriverSignature.Signed) + Case SearchMode.Signed : FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.DriverSignature = DismDriverSignature.Signed) + Case Else : FilteredDrivers = MainForm.CurrentImage.ImageDrivers.Where(Function(Driver) Driver.PublishedName.ToLower().Contains(sQuery.ToLower())) End Select If FilteredDrivers IsNot Nothing Then ListView1.Items.AddRange(FilteredDrivers.Select(Function(FilteredDriver) New ListViewItem(New String() {FilteredDriver.PublishedName, Path.GetFileName(FilteredDriver.OriginalFileName)})).ToArray()) @@ -1514,6 +795,6 @@ Public Class GetDriverInfo End Sub Private Sub WizardBtn_MouseHover(sender As Object, e As EventArgs) Handles WizardBtn.MouseHover - WindowHelper.DisplayToolTip(sender, "Build query with the Assistant...") + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("GetDriverInfo")("Build.Query.Assistant.Label")) End Sub End Class diff --git a/Panels/Get_Ops/Features/GetFeatureInfo.vb b/Panels/Get_Ops/Features/GetFeatureInfo.vb index 4008f49c8..d98332a9c 100644 --- a/Panels/Get_Ops/Features/GetFeatureInfo.vb +++ b/Panels/Get_Ops/Features/GetFeatureInfo.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports System.Threading Imports Microsoft.VisualBasic.ControlChars Imports Microsoft.Dism @@ -23,171 +23,21 @@ Public Class GetFeatureInfoDlg cPropValue.Font = New Font(MainForm.LogFont, MainForm.LogFontSize, If(MainForm.LogFontIsBold, FontStyle.Bold, FontStyle.Regular)) SearchPic.Image = GetGlyphResource("search") WizardBtn.Image = GetGlyphResource("assistant") - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Get feature information" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Ready" - Label22.Text = "Feature name:" - Label24.Text = "Display name:" - Label26.Text = "Feature description:" - Label31.Text = "Is a restart required?" - Label36.Text = "Feature information" - Label37.Text = "Select an installed feature on the left to view its information here" - Label41.Text = "Feature state:" - Label43.Text = "Custom properties:" - ListView1.Columns(0).Text = "Feature name" - ListView1.Columns(1).Text = "Feature state" - Button2.Text = "Save..." - SearchBox1.cueBanner = "Type here to search for a feature..." - Case "ESN" - Text = "Obtener información de características" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Listo" - Label22.Text = "Nombre de característica:" - Label24.Text = "Nombre para mostrar:" - Label26.Text = "Descripción de la característica:" - Label31.Text = "¿Se requiere un reinicio?" - Label36.Text = "Información de la característica" - Label37.Text = "Seleccione una característica instalada en la izquierda para ver su información aquí" - Label41.Text = "Estado de la característica" - Label43.Text = "Propiedades personalizadas:" - ListView1.Columns(0).Text = "Nombre de característica" - ListView1.Columns(1).Text = "Estado" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Escriba aquí para buscar una característica..." - Case "FRA" - Text = "Obtenir des informations sur les caractéristiques" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Prêt" - Label22.Text = "Nom de la caractéristique :" - Label24.Text = "Nom d'affichage :" - Label26.Text = "Description de la caractéristique :" - Label31.Text = "Un redémarrage est-il nécessaire ?" - Label36.Text = "Information sur la caractéristique" - Label37.Text = "Sélectionnez une caractéristique installée sur la gauche pour afficher ses informations ici" - Label41.Text = "État de la caractéristique :" - Label43.Text = "Propriétés personnalisées :" - ListView1.Columns(0).Text = "Nom de la caractéristique" - ListView1.Columns(1).Text = "État de la caractéristique" - Button2.Text = "Sauvegarder..." - SearchBox1.cueBanner = "Tapez ici pour rechercher une caractéristique..." - Case "PTB", "PTG" - Text = "Obter informações sobre a caraterística" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Pronto" - Label22.Text = "Nome da caraterística:" - Label24.Text = "Nome do ecrã:" - Label26.Text = "Descrição da caraterística:" - Label31.Text = "É necessário reiniciar?" - Label36.Text = "Informação sobre a caraterística" - Label37.Text = "Seleccione uma caraterística instalada à esquerda para ver as suas informações aqui" - Label41.Text = "Estado da funcionalidade:" - Label43.Text = "Propriedades personalizadas:" - ListView1.Columns(0).Text = "Nome da caraterística" - ListView1.Columns(1).Text = "Estado da caraterística" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Digite aqui para pesquisar uma caraterística..." - Case "ITA" - Text = "Verifica informazioni funzionalità" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Pronto" - Label22.Text = "Nome funzionalità:" - Label24.Text = "Nome visualizzato:" - Label26.Text = "Descrizione funzionalità:" - Label31.Text = "È necessario un riavvio?" - Label36.Text = "Informazioni funzionalità" - Label37.Text = "Per visualizzarne qui le informazioni seleziona a sinistra una funzionalità installata" - Label41.Text = "Stato funzionalità:" - Label43.Text = "Proprietà personalizzate:" - ListView1.Columns(0).Text = "Nome funzionalità" - ListView1.Columns(1).Text = "Stato funzionalità" - Button2.Text = "Salva..." - SearchBox1.cueBanner = "Digita qui per cercare una funzionalità..." - End Select - Case 1 - Text = "Get feature information" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Ready" - Label22.Text = "Feature name:" - Label24.Text = "Display name:" - Label26.Text = "Feature description:" - Label31.Text = "Is a restart required?" - Label36.Text = "Feature information" - Label37.Text = "Select an installed feature on the left to view its information here" - Label41.Text = "Feature state:" - Label43.Text = "Custom properties:" - ListView1.Columns(0).Text = "Feature name" - ListView1.Columns(1).Text = "Feature state" - Button2.Text = "Save..." - SearchBox1.cueBanner = "Type here to search for a feature..." - Case 2 - Text = "Obtener información de características" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Listo" - Label22.Text = "Nombre de característica:" - Label24.Text = "Nombre para mostrar:" - Label26.Text = "Descripción de la característica:" - Label31.Text = "¿Se requiere un reinicio?" - Label36.Text = "Información de la característica" - Label37.Text = "Seleccione una característica instalada en la izquierda para ver su información aquí" - Label41.Text = "Estado de la característica" - Label43.Text = "Propiedades personalizadas:" - ListView1.Columns(0).Text = "Nombre de característica" - ListView1.Columns(1).Text = "Estado" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Escriba aquí para buscar una característica..." - Case 3 - Text = "Obtenir des informations sur les caractéristiques" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Prêt" - Label22.Text = "Nom de la caractéristique :" - Label24.Text = "Nom d'affichage :" - Label26.Text = "Description de la caractéristique :" - Label31.Text = "Un redémarrage est-il nécessaire ?" - Label36.Text = "Information sur la caractéristique" - Label37.Text = "Sélectionnez une caractéristique installée sur la gauche pour afficher ses informations ici" - Label41.Text = "État de la caractéristique :" - Label43.Text = "Propriétés personnalisées :" - ListView1.Columns(0).Text = "Nom de la caractéristique" - ListView1.Columns(1).Text = "État de la caractéristique" - Button2.Text = "Sauvegarder..." - SearchBox1.cueBanner = "Tapez ici pour rechercher une caractéristique..." - Case 4 - Text = "Obter informações sobre a caraterística" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Pronto" - Label22.Text = "Nome da caraterística:" - Label24.Text = "Nome do ecrã:" - Label26.Text = "Descrição da caraterística:" - Label31.Text = "É necessário reiniciar?" - Label36.Text = "Informação sobre a caraterística" - Label37.Text = "Seleccione uma caraterística instalada à esquerda para ver as suas informações aqui" - Label41.Text = "Estado da funcionalidade:" - Label43.Text = "Propriedades personalizadas:" - ListView1.Columns(0).Text = "Nome da caraterística" - ListView1.Columns(1).Text = "Estado da caraterística" - Button2.Text = "Guardar..." - SearchBox1.cueBanner = "Digite aqui para pesquisar uma caraterística..." - Case 5 - Text = "Verifica informazioni funzionalità" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Pronto" - Label22.Text = "Nome funzionalità:" - Label24.Text = "Nome visualizzato:" - Label26.Text = "Descrizione funzionalità:" - Label31.Text = "È necessario un riavvio?" - Label36.Text = "Informazioni sulla funzionalità" - Label37.Text = "Per visualizzarne qui le informazioni seleziona a sinistra una funzionalità installata" - Label41.Text = "Stato funzionalità:" - Label43.Text = "Proprietà personalizzate:" - ListView1.Columns(0).Text = "Nome funzionalità" - ListView1.Columns(1).Text = "Stato funzionalità" - Button2.Text = "Salva..." - SearchBox1.cueBanner = "Digita qui per cercare una funzionalità..." - End Select + Text = LocalizationService.ForSection("GetFeatureInfo")("Get.Feature.Label") + ImageTaskHeader1.ItemText = LocalizationService.ForSection("GetFeatureInfo").Format("Image.Task.Header.Label", Text) + Label2.Text = LocalizationService.ForSection("GetFeatureInfo")("Ready.Label") + Label22.Text = LocalizationService.ForSection("GetFeatureInfo")("FeatureName.Label") + Label24.Text = LocalizationService.ForSection("GetFeatureInfo")("DisplayName.Label") + Label26.Text = LocalizationService.ForSection("GetFeatureInfo")("Description.Label") + Label31.Text = LocalizationService.ForSection("GetFeatureInfo")("RestartRequired.Label") + Label36.Text = LocalizationService.ForSection("GetFeatureInfo")("FeatureInfo.Label") + Label37.Text = LocalizationService.ForSection("GetFeatureInfo")("Installed.Left.Label") + Label41.Text = LocalizationService.ForSection("GetFeatureInfo")("FeatureState.Label") + Label43.Text = LocalizationService.ForSection("GetFeatureInfo")("CustomProps.Label") + ListView1.Columns(0).Text = LocalizationService.ForSection("GetFeatureInfo")("FeatureName.Column") + ListView1.Columns(1).Text = LocalizationService.ForSection("GetFeatureInfo")("FeatureState.Column") + Button2.Text = LocalizationService.ForSection("GetFeatureInfo")("Save.Button") + SearchBox1.cueBanner = LocalizationService.ForSection("GetFeatureInfo")("Type.Search.Label") If SplitContainer2.SplitterDistance = 440 Then SplitContainer2.SplitterDistance = WindowHelper.ScaleLogical(SplitContainer2.SplitterDistance) End If @@ -222,57 +72,9 @@ Public Class GetFeatureInfoDlg If MainForm.ImgBW.IsBusy Then DynaLog.LogMessage("Background processes are busy. Stopping them...") Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Background processes need to have completed before showing feature information. We'll wait until they have completed" - Case "ESN" - msg = "Los procesos en segundo plano deben haber completado antes de obtener información de la característica. Esperaremos hasta que hayan completado" - Case "FRA" - msg = "Les processus en plan doivent être terminés avant d'afficher les caractéristiques. Nous attendrons qu'ils soient terminés" - Case "PTB", "PTG" - msg = "Os processos em segundo plano têm de estar concluídos antes de mostrar informações sobre as características. Vamos esperar até que estejam concluídos" - Case "ITA" - msg = "Prima di poter visualizzare le informazioni sulle funzionalità i processi in background devono essere stati completati. Attendi che siano stati completati." - End Select - Case 1 - msg = "Background processes need to have completed before showing feature information. We'll wait until they have completed" - Case 2 - msg = "Los procesos en segundo plano deben haber completado antes de obtener información de la característica. Esperaremos hasta que hayan completado" - Case 3 - msg = "Les processus en plan doivent être terminés avant d'afficher les caractéristiques. Nous attendrons qu'ils soient terminés" - Case 4 - msg = "Os processos em segundo plano têm de estar concluídos antes de mostrar informações sobre as características. Vamos esperar até que estejam concluídos" - Case 5 - msg = "Prima di poter visualizzare le informazioni sulle funzionalità i processi in background devono essere stati completati. Attendi che siano stati completati." - End Select + msg = LocalizationService.ForSection("GetFeatureInfo")("Wait.Background.Message") MsgBox(msg, vbOKOnly + vbInformation, ImageTaskHeader1.ItemText) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label2.Text = "Waiting for background processes to finish..." - Case "ESN" - Label2.Text = "Esperando a que terminen los procesos en segundo plano..." - Case "FRA" - Label2.Text = "Attente de la fin des processus en arrière plan..." - Case "PTB", "PTG" - Label2.Text = "À espera que os processos em segundo plano terminem..." - Case "ITA" - Label2.Text = "In attesa che i processi in background siano stati completati..." - End Select - Case 1 - Label2.Text = "Waiting for background processes to finish..." - Case 2 - Label2.Text = "Esperando a que terminen los procesos en segundo plano..." - Case 3 - Label2.Text = "Attente de la fin des processus en arrière plan..." - Case 4 - Label2.Text = "À espera que os processos em segundo plano terminem..." - Case 5 - Label2.Text = "In attesa che i processi in background siano stati completati..." - End Select + Label2.Text = LocalizationService.ForSection("GetFeatureInfo")("Waiting.Background.Label") While MainForm.ImgBW.IsBusy Application.DoEvents() Thread.Sleep(500) @@ -282,62 +84,14 @@ Public Class GetFeatureInfoDlg cPropPathView.Nodes.Clear() cPropName.Text = "" cPropValue.Text = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label2.Text = "Preparing to get feature information..." - Case "ESN" - Label2.Text = "Preparándonos para obtener información de la característica..." - Case "FRA" - Label2.Text = "Préparation de l'obtention des informations de la caractéristique en cours..." - Case "PTB", "PTG" - Label2.Text = "Preparar-se para obter informações sobre a característica..." - Case "ITA" - Label2.Text = "Preparazione verifica informazioni funzionalità..." - End Select - Case 1 - Label2.Text = "Preparing to get feature information..." - Case 2 - Label2.Text = "Preparándonos para obtener información de la característica..." - Case 3 - Label2.Text = "Préparation de l'obtention des informations de la caractéristique en cours..." - Case 4 - Label2.Text = "Preparar-se para obter informações sobre a característica..." - Case 5 - Label2.Text = "Preparazione verifica informazioni funzionalità..." - End Select + Label2.Text = LocalizationService.ForSection("GetFeatureInfo")("Preparing.Item") Application.DoEvents() Try DynaLog.LogMessage("Initializing API...") DismApi.Initialize(DismLogLevel.LogErrors) DynaLog.LogMessage("Creating session...") Using imgSession As DismSession = If(MainForm.OnlineManagement, DismApi.OpenOnlineSession(), DismApi.OpenOfflineSession(MainForm.MountDir)) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label2.Text = "Getting information from " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case "ESN" - Label2.Text = "Obteniendo información de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case "FRA" - Label2.Text = "Obtention des informations de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & " en cours..." - Case "PTB", "PTG" - Label2.Text = "Obter informações de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case "ITA" - Label2.Text = "Verifica informazioni da " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - End Select - Case 1 - Label2.Text = "Getting information from " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case 2 - Label2.Text = "Obteniendo información de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case 3 - Label2.Text = "Obtention des informations de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & " en cours..." - Case 4 - Label2.Text = "Obter informações de " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - Case 5 - Label2.Text = "Verifica informazioni da " & Quote & ListView1.FocusedItem.SubItems(0).Text & Quote & "..." - End Select + Label2.Text = LocalizationService.ForSection("GetFeatureInfo").Format("GettingInfo.Item", ListView1.FocusedItem.SubItems(0).Text) DynaLog.LogMessage("Feature to get information about: " & ListView1.FocusedItem.SubItems(0).Text) Application.DoEvents() Dim featInfo As DismFeatureInfo = DismApi.GetFeatureInfo(imgSession, ListView1.FocusedItem.SubItems(0).Text) @@ -357,58 +111,10 @@ Public Class GetFeatureInfoDlg cPropContents &= "- " & If(cProp.Path <> "", cProp.Path & "\", "") & cProp.Name & ": " & cProp.Value & CrLf Next PopulateTreeView(cPropPathView, cPropContents.Replace("- ", "").Trim()) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - cPropValue.Text = "Please select or expand an entry." - Case "ESN" - cPropValue.Text = "Por favor, seleccione o expanda una entrada." - Case "FRA" - cPropValue.Text = "Veuillez sélectionner ou étendre une entrée." - Case "PTB", "PTG" - cPropValue.Text = "Por favor, seleccione ou expanda uma entrada." - Case "ITA" - cPropValue.Text = "Seleziona o espandi un elemento." - End Select - Case 1 - cPropValue.Text = "Please select or expand an entry." - Case 2 - cPropValue.Text = "Por favor, seleccione o expanda una entrada." - Case 3 - cPropValue.Text = "Veuillez sélectionner ou étendre une entrée." - Case 4 - cPropValue.Text = "Por favor, seleccione ou expanda uma entrada." - Case 5 - cPropValue.Text = "Seleziona o espandi un elemento." - End Select + cPropValue.Text = LocalizationService.ForSection("GetFeatureInfo")("Expand.Entry.Label") Else DynaLog.LogMessage("This feature does not have custom properties.") - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label42.Text = "None" - Case "ESN" - Label42.Text = "Ninguna" - Case "FRA" - Label42.Text = "Aucune" - Case "PTB", "PTG" - Label42.Text = "Nenhum" - Case "ITA" - Label42.Text = "Nessuno" - End Select - Case 1 - Label42.Text = "None" - Case 2 - Label42.Text = "Ninguna" - Case 3 - Label42.Text = "Aucune" - Case 4 - Label42.Text = "Nenhum" - Case 5 - Label42.Text = "Nessuno" - End Select + Label42.Text = LocalizationService.ForSection("GetFeatureInfo")("None.Label") Label42.Visible = True CPropViewer.Visible = False End If @@ -419,31 +125,7 @@ Public Class GetFeatureInfoDlg Catch ex As Exception DynaLog.LogMessage("Could not get feature information. Error message: " & ex.Message) Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Could not get feature information. Reason: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "ESN" - msg = "No pudimos obtener información de la característica. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "FRA" - msg = "Impossible d'obtenir des informations sur les caractéristiques. Raison : " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "PTB", "PTG" - msg = "Não foi possível obter informações sobre a característica. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "ITA" - msg = "Impossibile verificare informazioni sulle funzionalità. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - End Select - Case 1 - msg = "Could not get feature information. Reason: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 2 - msg = "No pudimos obtener información de la característica. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 3 - msg = "Impossible d'obtenir des informations sur les caractéristiques. Raison : " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 4 - msg = "Não foi possível obter informações sobre a característica. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 5 - msg = "Impossibile verificare informazioni sulle funzionalità. Motivo: " & CrLf & CrLf & ex.ToString() & ": " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - End Select + msg = LocalizationService.ForSection("GetFeatureInfo").Format("Reason.Message", ex.ToString(), ex.Message, Hex(ex.HResult)) MsgBox(msg, vbOKOnly + vbCritical, ImageTaskHeader1.ItemText) Finally DynaLog.LogMessage("Shutting down API...") @@ -453,31 +135,7 @@ Public Class GetFeatureInfoDlg End Try End Try - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label2.Text = "Ready" - Case "ESN" - Label2.Text = "Listo" - Case "FRA" - Label2.Text = "Prêt" - Case "PTB", "PTG" - Label2.Text = "Pronto" - Case "ITA" - Label2.Text = "Pronto" - End Select - Case 1 - Label2.Text = "Ready" - Case 2 - Label2.Text = "Listo" - Case 3 - Label2.Text = "Prêt" - Case 4 - Label2.Text = "Pronto" - Case 5 - Label2.Text = "Pronto" - End Select + Label2.Text = LocalizationService.ForSection("GetFeatureInfo")("Ready.Item") Panel4.Visible = True Panel7.Visible = False Else @@ -542,31 +200,7 @@ Public Class GetFeatureInfoDlg DynaLog.LogMessage("Value of selected custom property: " & selectedNode.Tag.ToString()) cPropValue.Text = selectedNode.Tag.ToString() Else - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - cPropValue.Text = "No value has been defined. If the selected item has subitems, expand it." - Case "ESN" - cPropValue.Text = "No se ha definido un valor. Si el elemento seleccionado tiene elementos secundarios, expándalo." - Case "FRA" - cPropValue.Text = "Aucune valeur n'a été définie. Si l'élément sélectionné a des sous-éléments, développez-le." - Case "PTB", "PTG" - cPropValue.Text = "Nenhum valor foi definido. Se o item selecionado tiver subitens, expanda-o." - Case "ITA" - cPropValue.Text = "Non è stato definito alcun valore. Se l'elemento selezionato ha delle sotto voci, espandilo." - End Select - Case 1 - cPropValue.Text = "No value has been defined. If the selected item has subitems, expand it." - Case 2 - cPropValue.Text = "No se ha definido un valor. Si el elemento seleccionado tiene elementos secundarios, expándalo." - Case 3 - cPropValue.Text = "Aucune valeur n'a été définie. Si l'élément sélectionné a des sous-éléments, développez-le." - Case 4 - cPropValue.Text = "Nenhum valor foi definido. Se o item selecionado tiver subitens, expanda-o." - Case 5 - cPropValue.Text = "Non è stato definito alcun valore. Se l'elemento selezionato ha delle sotto voci, espandilo." - End Select + cPropValue.Text = LocalizationService.ForSection("FeatureInfo.PathSelection")("SelectedValue.Message") End If End Sub @@ -700,6 +334,6 @@ Public Class GetFeatureInfoDlg End Sub Private Sub WizardBtn_MouseHover(sender As Object, e As EventArgs) Handles WizardBtn.MouseHover - WindowHelper.DisplayToolTip(sender, "Build query with the Assistant...") + WindowHelper.DisplayToolTip(sender, LocalizationService.ForSection("GetFeatureInfo")("Build.Query.Assistant.Label")) End Sub End Class diff --git a/Panels/Get_Ops/FilterAssistants/AppxFilterAssistantDialog.Designer.vb b/Panels/Get_Ops/FilterAssistants/AppxFilterAssistantDialog.Designer.vb new file mode 100644 index 000000000..88002ccfa --- /dev/null +++ b/Panels/Get_Ops/FilterAssistants/AppxFilterAssistantDialog.Designer.vb @@ -0,0 +1,276 @@ + _ +Partial Class AppxFilterAssistantDialog + Inherits System.Windows.Forms.Form + + 'Form reemplaza a Dispose para limpiar la lista de componentes. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Requerido por el Diseñador de Windows Forms + Private components As System.ComponentModel.IContainer + + 'NOTA: el Diseñador de Windows Forms necesita el siguiente procedimiento + 'Se puede modificar usando el Diseñador de Windows Forms. + 'No lo modifique con el editor de código. + _ + Private Sub InitializeComponent() + Me.TableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.OK_Button = New System.Windows.Forms.Button() + Me.Cancel_Button = New System.Windows.Forms.Button() + Me.Label1 = New System.Windows.Forms.Label() + Me.NameFilterRadioButton = New System.Windows.Forms.RadioButton() + Me.RegStatusRadioButton = New System.Windows.Forms.RadioButton() + Me.RegStatusPanel = New System.Windows.Forms.Panel() + Me.Label2 = New System.Windows.Forms.Label() + Me.RegStatusComboBox = New System.Windows.Forms.ComboBox() + Me.UserAccountLV = New System.Windows.Forms.ListView() + Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.PackageNameTextBox = New System.Windows.Forms.TextBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.SelectedUserDetailsTextBox = New System.Windows.Forms.TextBox() + Me.SystemUserFilterPanel = New System.Windows.Forms.Panel() + Me.UserDetailsPanel = New System.Windows.Forms.Panel() + Me.TableLayoutPanel1.SuspendLayout() + Me.RegStatusPanel.SuspendLayout() + Me.SystemUserFilterPanel.SuspendLayout() + Me.UserDetailsPanel.SuspendLayout() + Me.SuspendLayout() + ' + 'TableLayoutPanel1 + ' + Me.TableLayoutPanel1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TableLayoutPanel1.ColumnCount = 2 + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) + Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(546, 320) + Me.TableLayoutPanel1.Name = "TableLayoutPanel1" + Me.TableLayoutPanel1.RowCount = 1 + Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) + Me.TableLayoutPanel1.Size = New System.Drawing.Size(146, 29) + Me.TableLayoutPanel1.TabIndex = 0 + ' + 'OK_Button + ' + Me.OK_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.OK_Button.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.OK_Button.Location = New System.Drawing.Point(3, 3) + Me.OK_Button.Name = "OK_Button" + Me.OK_Button.Size = New System.Drawing.Size(67, 23) + Me.OK_Button.TabIndex = 0 + Me.OK_Button.Text = "Apply" + ' + 'Cancel_Button + ' + Me.Cancel_Button.Anchor = System.Windows.Forms.AnchorStyles.None + Me.Cancel_Button.DialogResult = System.Windows.Forms.DialogResult.Cancel + Me.Cancel_Button.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Cancel_Button.Location = New System.Drawing.Point(76, 3) + Me.Cancel_Button.Name = "Cancel_Button" + Me.Cancel_Button.Size = New System.Drawing.Size(67, 23) + Me.Cancel_Button.TabIndex = 1 + Me.Cancel_Button.Text = "Clear" + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(12, 9) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(178, 13) + Me.Label1.TabIndex = 3 + Me.Label1.Text = "Filter AppX package information by:" + ' + 'NameFilterRadioButton + ' + Me.NameFilterRadioButton.AutoSize = True + Me.NameFilterRadioButton.Checked = True + Me.NameFilterRadioButton.Location = New System.Drawing.Point(24, 36) + Me.NameFilterRadioButton.Name = "NameFilterRadioButton" + Me.NameFilterRadioButton.Size = New System.Drawing.Size(56, 17) + Me.NameFilterRadioButton.TabIndex = 4 + Me.NameFilterRadioButton.TabStop = True + Me.NameFilterRadioButton.Text = "Name:" + Me.NameFilterRadioButton.UseVisualStyleBackColor = True + ' + 'RegStatusRadioButton + ' + Me.RegStatusRadioButton.AutoSize = True + Me.RegStatusRadioButton.Location = New System.Drawing.Point(24, 62) + Me.RegStatusRadioButton.Name = "RegStatusRadioButton" + Me.RegStatusRadioButton.Size = New System.Drawing.Size(116, 17) + Me.RegStatusRadioButton.TabIndex = 4 + Me.RegStatusRadioButton.Text = "Registration status" + Me.RegStatusRadioButton.UseVisualStyleBackColor = True + ' + 'RegStatusPanel + ' + Me.RegStatusPanel.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.RegStatusPanel.Controls.Add(Me.SystemUserFilterPanel) + Me.RegStatusPanel.Controls.Add(Me.RegStatusComboBox) + Me.RegStatusPanel.Controls.Add(Me.Label2) + Me.RegStatusPanel.Enabled = False + Me.RegStatusPanel.Location = New System.Drawing.Point(41, 85) + Me.RegStatusPanel.Name = "RegStatusPanel" + Me.RegStatusPanel.Size = New System.Drawing.Size(651, 229) + Me.RegStatusPanel.TabIndex = 5 + ' + 'Label2 + ' + Me.Label2.AutoSize = True + Me.Label2.Location = New System.Drawing.Point(16, 16) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(196, 13) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Who are the applications registered to?" + ' + 'RegStatusComboBox + ' + Me.RegStatusComboBox.FormattingEnabled = True + Me.RegStatusComboBox.Items.AddRange(New Object() {"The applications aren't registered to anyone", "The applications are registered to anyone", "The applications are registered to me", "The applications are registered to the following user"}) + Me.RegStatusComboBox.Location = New System.Drawing.Point(232, 13) + Me.RegStatusComboBox.Name = "RegStatusComboBox" + Me.RegStatusComboBox.Size = New System.Drawing.Size(406, 21) + Me.RegStatusComboBox.TabIndex = 1 + Me.RegStatusComboBox.Text = "The applications are registered to me" + ' + 'UserAccountLV + ' + Me.UserAccountLV.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3}) + Me.UserAccountLV.Dock = System.Windows.Forms.DockStyle.Fill + Me.UserAccountLV.FullRowSelect = True + Me.UserAccountLV.Location = New System.Drawing.Point(0, 0) + Me.UserAccountLV.MultiSelect = False + Me.UserAccountLV.Name = "UserAccountLV" + Me.UserAccountLV.Size = New System.Drawing.Size(622, 119) + Me.UserAccountLV.TabIndex = 2 + Me.UserAccountLV.UseCompatibleStateImageBehavior = False + Me.UserAccountLV.View = System.Windows.Forms.View.Details + ' + 'ColumnHeader1 + ' + Me.ColumnHeader1.Text = "Account Name" + Me.ColumnHeader1.Width = 128 + ' + 'ColumnHeader2 + ' + Me.ColumnHeader2.Text = "Display Name" + Me.ColumnHeader2.Width = 192 + ' + 'ColumnHeader3 + ' + Me.ColumnHeader3.Text = "SID" + Me.ColumnHeader3.Width = 272 + ' + 'PackageNameTextBox + ' + Me.PackageNameTextBox.Location = New System.Drawing.Point(86, 35) + Me.PackageNameTextBox.Name = "PackageNameTextBox" + Me.PackageNameTextBox.Size = New System.Drawing.Size(606, 21) + Me.PackageNameTextBox.TabIndex = 6 + ' + 'Label3 + ' + Me.Label3.AutoSize = True + Me.Label3.Location = New System.Drawing.Point(12, 12) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(373, 13) + Me.Label3.TabIndex = 3 + Me.Label3.Text = "Select a user from the list above to filter application registration to this user" & _ + "." + ' + 'SelectedUserDetailsTextBox + ' + Me.SelectedUserDetailsTextBox.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.SelectedUserDetailsTextBox.Location = New System.Drawing.Point(10, 32) + Me.SelectedUserDetailsTextBox.Name = "SelectedUserDetailsTextBox" + Me.SelectedUserDetailsTextBox.ReadOnly = True + Me.SelectedUserDetailsTextBox.Size = New System.Drawing.Size(602, 21) + Me.SelectedUserDetailsTextBox.TabIndex = 4 + ' + 'SystemUserFilterPanel + ' + Me.SystemUserFilterPanel.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.SystemUserFilterPanel.Controls.Add(Me.UserAccountLV) + Me.SystemUserFilterPanel.Controls.Add(Me.UserDetailsPanel) + Me.SystemUserFilterPanel.Location = New System.Drawing.Point(16, 40) + Me.SystemUserFilterPanel.Name = "SystemUserFilterPanel" + Me.SystemUserFilterPanel.Size = New System.Drawing.Size(622, 181) + Me.SystemUserFilterPanel.TabIndex = 5 + ' + 'UserDetailsPanel + ' + Me.UserDetailsPanel.Controls.Add(Me.Label3) + Me.UserDetailsPanel.Controls.Add(Me.SelectedUserDetailsTextBox) + Me.UserDetailsPanel.Dock = System.Windows.Forms.DockStyle.Bottom + Me.UserDetailsPanel.Location = New System.Drawing.Point(0, 119) + Me.UserDetailsPanel.Name = "UserDetailsPanel" + Me.UserDetailsPanel.Size = New System.Drawing.Size(622, 62) + Me.UserDetailsPanel.TabIndex = 5 + ' + 'AppxFilterAssistantDialog + ' + Me.AcceptButton = Me.OK_Button + Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi + Me.CancelButton = Me.Cancel_Button + Me.ClientSize = New System.Drawing.Size(704, 361) + Me.Controls.Add(Me.PackageNameTextBox) + Me.Controls.Add(Me.RegStatusPanel) + Me.Controls.Add(Me.RegStatusRadioButton) + Me.Controls.Add(Me.NameFilterRadioButton) + Me.Controls.Add(Me.TableLayoutPanel1) + Me.Controls.Add(Me.Label1) + Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "AppxFilterAssistantDialog" + Me.ShowInTaskbar = False + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent + Me.Text = "Filter AppX information" + Me.TableLayoutPanel1.ResumeLayout(False) + Me.RegStatusPanel.ResumeLayout(False) + Me.RegStatusPanel.PerformLayout() + Me.SystemUserFilterPanel.ResumeLayout(False) + Me.UserDetailsPanel.ResumeLayout(False) + Me.UserDetailsPanel.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents TableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Friend WithEvents OK_Button As System.Windows.Forms.Button + Friend WithEvents Cancel_Button As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents NameFilterRadioButton As System.Windows.Forms.RadioButton + Friend WithEvents RegStatusRadioButton As System.Windows.Forms.RadioButton + Friend WithEvents RegStatusPanel As System.Windows.Forms.Panel + Friend WithEvents RegStatusComboBox As System.Windows.Forms.ComboBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents UserAccountLV As System.Windows.Forms.ListView + Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader + Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader + Friend WithEvents ColumnHeader3 As System.Windows.Forms.ColumnHeader + Friend WithEvents PackageNameTextBox As System.Windows.Forms.TextBox + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents SelectedUserDetailsTextBox As System.Windows.Forms.TextBox + Friend WithEvents SystemUserFilterPanel As System.Windows.Forms.Panel + Friend WithEvents UserDetailsPanel As System.Windows.Forms.Panel + +End Class diff --git a/Panels/Get_Ops/FilterAssistants/AppxFilterAssistantDialog.resx b/Panels/Get_Ops/FilterAssistants/AppxFilterAssistantDialog.resx new file mode 100644 index 000000000..1af7de150 --- /dev/null +++ b/Panels/Get_Ops/FilterAssistants/AppxFilterAssistantDialog.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Panels/Get_Ops/FilterAssistants/AppxFilterAssistantDialog.vb b/Panels/Get_Ops/FilterAssistants/AppxFilterAssistantDialog.vb new file mode 100644 index 000000000..7dbe7a19a --- /dev/null +++ b/Panels/Get_Ops/FilterAssistants/AppxFilterAssistantDialog.vb @@ -0,0 +1,118 @@ +Imports System.Windows.Forms + +Public Class AppxFilterAssistantDialog + + Public AppliedQuery As String + + Private SelectedUserSid As String = "" + Private userAccounts As New List(Of SystemUserAccount) + + Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + If NameFilterRadioButton.Checked Then + AppliedQuery = PackageNameTextBox.Text + Else + ' Determine reg status filter + Select Case RegStatusComboBox.SelectedIndex + Case 0 : AppliedQuery = "regto:noone" + Case 1 : AppliedQuery = "regto:anyone" + Case 2 : AppliedQuery = "regto:me" + Case 3 + If Not SelectedUserSid.StartsWith("S-1-5", StringComparison.OrdinalIgnoreCase) Then Exit Sub + AppliedQuery = String.Format("regto:{0}", SelectedUserSid) + End Select + End If + + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click + AppliedQuery = "" + ' This one does the same thing as the OK button, but after clearing the query. + Me.DialogResult = System.Windows.Forms.DialogResult.OK + Me.Close() + End Sub + + Private Class SystemUserAccount + Public Property AccountName As String + Public Property AccountFullName As String + Public Property AccountSid As String + + Public Sub New(name As String, fullName As String, sid As String) + AccountName = name + AccountFullName = fullName + AccountSid = sid + End Sub + End Class + + Private Function GetSystemUsers() As List(Of SystemUserAccount) + Dim userAccounts As New List(Of SystemUserAccount) + + Dim UserMOC As ManagementObjectCollection = WMIHelper.GetResultsFromManagementQuery("SELECT Name, FullName, Sid FROM Win32_UserAccount WHERE Disabled = FALSE") + If UserMOC Is Nothing Then Return userAccounts + + For Each UserMO In UserMOC + Dim userDetails As Dictionary(Of String, Object) = WMIHelper.GetObjectValues(UserMO, "Name", "FullName", "Sid") + userAccounts.Add(New SystemUserAccount(userDetails("Name"), userDetails("FullName"), userDetails("Sid"))) + Next + + Return userAccounts + End Function + + Private Sub AppxFilterAssistantDialog_Load(sender As Object, e As EventArgs) Handles MyBase.Load + BackColor = CurrentTheme.SectionBackgroundColor + ForeColor = CurrentTheme.ForegroundColor + PackageNameTextBox.BackColor = BackColor + PackageNameTextBox.ForeColor = ForeColor + SelectedUserDetailsTextBox.BackColor = BackColor + SelectedUserDetailsTextBox.ForeColor = ForeColor + RegStatusComboBox.BackColor = BackColor + RegStatusComboBox.ForeColor = ForeColor + UserAccountLV.BackColor = BackColor + UserAccountLV.ForeColor = ForeColor + Dim handle As IntPtr = WindowHelper.GetWindowHandle(Me) + WindowHelper.ToggleDarkTitleBar(handle, CurrentTheme.IsDark) + ThemeHelper.UpdateLinkLabelColors(Me, Color.DodgerBlue, CurrentTheme.AccentColors(0)) + + ' Get user accounts + UserAccountLV.Items.Clear() + userAccounts = GetSystemUsers() + UserAccountLV.Items.AddRange(userAccounts.Select(Function(sysAccount) New ListViewItem(New String() {sysAccount.AccountName, sysAccount.AccountFullName, sysAccount.AccountSid})).ToArray()) + + ' Set disabled ListView's backcolor. Source: https://stackoverflow.com/questions/17461902/changing-background-color-of-listview-c-sharp-when-disabled + Dim clientHeight As Integer = WindowHelper.ScaleLogical(24) * (userAccounts.Count + 1) + Dim bm As New Bitmap(UserAccountLV.ClientSize.Width, If(UserAccountLV.ClientSize.Height > clientHeight, UserAccountLV.ClientSize.Height, clientHeight)) + Graphics.FromImage(bm).Clear(UserAccountLV.BackColor) + UserAccountLV.BackgroundImage = bm + + ColumnHeader1.Width = WindowHelper.ScaleLogical(128) + ColumnHeader2.Width = WindowHelper.ScaleLogical(192) + ColumnHeader3.Width = WindowHelper.ScaleLogical(280) + End Sub + + Private Sub NameFilterRadioButton_CheckedChanged(sender As Object, e As EventArgs) Handles NameFilterRadioButton.CheckedChanged + PackageNameTextBox.Enabled = NameFilterRadioButton.Checked + RegStatusPanel.Enabled = Not NameFilterRadioButton.Checked + End Sub + + Private Sub RegStatusComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RegStatusComboBox.SelectedIndexChanged + SystemUserFilterPanel.Enabled = RegStatusComboBox.SelectedIndex >= 3 + + ' If no mappings policy is enabled, then don't filter by SIDS + If MainForm.NoNTSamMappings AndAlso RegStatusComboBox.SelectedIndex > 1 Then RegStatusComboBox.SelectedIndex = 1 + End Sub + + Private Sub UserAccountLV_SelectedIndexChanged(sender As Object, e As EventArgs) Handles UserAccountLV.SelectedIndexChanged + Try + If UserAccountLV.SelectedItems.Count = 1 Then + Dim selectedUser As SystemUserAccount = userAccounts.ElementAtOrDefault(UserAccountLV.FocusedItem.Index) + If selectedUser IsNot Nothing Then + SelectedUserDetailsTextBox.Text = String.Format("{0} - SID {1}", If(selectedUser.AccountFullName <> "", String.Format("{0} ({1})", selectedUser.AccountFullName, selectedUser.AccountName), selectedUser.AccountName), selectedUser.AccountSid) + SelectedUserSid = selectedUser.AccountSid + End If + End If + Catch ex As Exception + + End Try + End Sub +End Class diff --git a/Panels/Get_Ops/FilterAssistants/DriverFilterAssistantDialog.Designer.vb b/Panels/Get_Ops/FilterAssistants/DriverFilterAssistantDialog.Designer.vb index 7c2da63bf..76cdb553d 100644 --- a/Panels/Get_Ops/FilterAssistants/DriverFilterAssistantDialog.Designer.vb +++ b/Panels/Get_Ops/FilterAssistants/DriverFilterAssistantDialog.Designer.vb @@ -28,6 +28,16 @@ Partial Class DriverFilterAssistantDialog Me.Label1 = New System.Windows.Forms.Label() Me.ComboBox1 = New System.Windows.Forms.ComboBox() Me.FilterTypeContainerPanel = New System.Windows.Forms.Panel() + Me.ClassNameFilterPanel = New System.Windows.Forms.Panel() + Me.Panel1 = New System.Windows.Forms.Panel() + Me.SelectedClassNamesLB = New System.Windows.Forms.ListBox() + Me.Button3 = New System.Windows.Forms.Button() + Me.Button2 = New System.Windows.Forms.Button() + Me.CNDetailsTLP = New System.Windows.Forms.TableLayoutPanel() + Me.Label6 = New System.Windows.Forms.Label() + Me.Label7 = New System.Windows.Forms.Label() + Me.Label8 = New System.Windows.Forms.Label() + Me.ComboBox2 = New System.Windows.Forms.ComboBox() Me.DateFilterPanel = New System.Windows.Forms.Panel() Me.DateFilterSuboperatorContainerPanel = New System.Windows.Forms.Panel() Me.TableLayoutPanel2 = New System.Windows.Forms.TableLayoutPanel() @@ -48,12 +58,6 @@ Partial Class DriverFilterAssistantDialog Me.InboxStatusFilterPanel = New System.Windows.Forms.Panel() Me.CheckBox1 = New System.Windows.Forms.CheckBox() Me.Label9 = New System.Windows.Forms.Label() - Me.ClassNameFilterPanel = New System.Windows.Forms.Panel() - Me.CNDetailsTLP = New System.Windows.Forms.TableLayoutPanel() - Me.Label6 = New System.Windows.Forms.Label() - Me.Label7 = New System.Windows.Forms.Label() - Me.Label8 = New System.Windows.Forms.Label() - Me.ComboBox2 = New System.Windows.Forms.ComboBox() Me.ProviderNameFilterPanel = New System.Windows.Forms.Panel() Me.TextBox3 = New System.Windows.Forms.TextBox() Me.Label5 = New System.Windows.Forms.Label() @@ -67,6 +71,9 @@ Partial Class DriverFilterAssistantDialog Me.Label2 = New System.Windows.Forms.Label() Me.TableLayoutPanel1.SuspendLayout() Me.FilterTypeContainerPanel.SuspendLayout() + Me.ClassNameFilterPanel.SuspendLayout() + Me.Panel1.SuspendLayout() + Me.CNDetailsTLP.SuspendLayout() Me.DateFilterPanel.SuspendLayout() Me.DateFilterSuboperatorContainerPanel.SuspendLayout() Me.TableLayoutPanel2.SuspendLayout() @@ -76,8 +83,6 @@ Partial Class DriverFilterAssistantDialog Me.SignatureStatusFilterPanel.SuspendLayout() Me.BootCriticalStatusFilterPanel.SuspendLayout() Me.InboxStatusFilterPanel.SuspendLayout() - Me.ClassNameFilterPanel.SuspendLayout() - Me.CNDetailsTLP.SuspendLayout() Me.ProviderNameFilterPanel.SuspendLayout() Me.OriginalFileNameFilterPanel.SuspendLayout() Me.PublishedNameFilterPanel.SuspendLayout() @@ -92,7 +97,7 @@ Partial Class DriverFilterAssistantDialog Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) Me.TableLayoutPanel1.Controls.Add(Me.OK_Button, 0, 0) Me.TableLayoutPanel1.Controls.Add(Me.Cancel_Button, 1, 0) - Me.TableLayoutPanel1.Location = New System.Drawing.Point(466, 240) + Me.TableLayoutPanel1.Location = New System.Drawing.Point(466, 304) Me.TableLayoutPanel1.Name = "TableLayoutPanel1" Me.TableLayoutPanel1.RowCount = 1 Me.TableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) @@ -146,20 +151,134 @@ Partial Class DriverFilterAssistantDialog Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.FilterTypeContainerPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.FilterTypeContainerPanel.Controls.Add(Me.ClassNameFilterPanel) Me.FilterTypeContainerPanel.Controls.Add(Me.DateFilterPanel) Me.FilterTypeContainerPanel.Controls.Add(Me.SignatureStatusFilterPanel) Me.FilterTypeContainerPanel.Controls.Add(Me.BootCriticalStatusFilterPanel) Me.FilterTypeContainerPanel.Controls.Add(Me.InboxStatusFilterPanel) - Me.FilterTypeContainerPanel.Controls.Add(Me.ClassNameFilterPanel) Me.FilterTypeContainerPanel.Controls.Add(Me.ProviderNameFilterPanel) Me.FilterTypeContainerPanel.Controls.Add(Me.OriginalFileNameFilterPanel) Me.FilterTypeContainerPanel.Controls.Add(Me.PublishedNameFilterPanel) Me.FilterTypeContainerPanel.Controls.Add(Me.NoFilterTypeSelectedPanel) Me.FilterTypeContainerPanel.Location = New System.Drawing.Point(15, 56) Me.FilterTypeContainerPanel.Name = "FilterTypeContainerPanel" - Me.FilterTypeContainerPanel.Size = New System.Drawing.Size(597, 181) + Me.FilterTypeContainerPanel.Size = New System.Drawing.Size(597, 245) Me.FilterTypeContainerPanel.TabIndex = 6 ' + 'ClassNameFilterPanel + ' + Me.ClassNameFilterPanel.Controls.Add(Me.Panel1) + Me.ClassNameFilterPanel.Controls.Add(Me.Button3) + Me.ClassNameFilterPanel.Controls.Add(Me.Button2) + Me.ClassNameFilterPanel.Controls.Add(Me.CNDetailsTLP) + Me.ClassNameFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill + Me.ClassNameFilterPanel.Location = New System.Drawing.Point(0, 0) + Me.ClassNameFilterPanel.Name = "ClassNameFilterPanel" + Me.ClassNameFilterPanel.Size = New System.Drawing.Size(595, 243) + Me.ClassNameFilterPanel.TabIndex = 4 + Me.ClassNameFilterPanel.Visible = False + ' + 'Panel1 + ' + Me.Panel1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Panel1.Controls.Add(Me.SelectedClassNamesLB) + Me.Panel1.Location = New System.Drawing.Point(12, 12) + Me.Panel1.Name = "Panel1" + Me.Panel1.Size = New System.Drawing.Size(568, 95) + Me.Panel1.TabIndex = 7 + ' + 'SelectedClassNamesLB + ' + Me.SelectedClassNamesLB.Dock = System.Windows.Forms.DockStyle.Fill + Me.SelectedClassNamesLB.FormattingEnabled = True + Me.SelectedClassNamesLB.IntegralHeight = False + Me.SelectedClassNamesLB.Location = New System.Drawing.Point(0, 0) + Me.SelectedClassNamesLB.Name = "SelectedClassNamesLB" + Me.SelectedClassNamesLB.Size = New System.Drawing.Size(568, 95) + Me.SelectedClassNamesLB.TabIndex = 0 + ' + 'Button3 + ' + Me.Button3.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button3.Enabled = False + Me.Button3.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Button3.Location = New System.Drawing.Point(440, 211) + Me.Button3.Name = "Button3" + Me.Button3.Size = New System.Drawing.Size(140, 23) + Me.Button3.TabIndex = 5 + Me.Button3.Text = "Remove Class Name" + Me.Button3.UseVisualStyleBackColor = True + ' + 'Button2 + ' + Me.Button2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button2.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Button2.Location = New System.Drawing.Point(294, 211) + Me.Button2.Name = "Button2" + Me.Button2.Size = New System.Drawing.Size(140, 23) + Me.Button2.TabIndex = 6 + Me.Button2.Text = "Add Class Name" + Me.Button2.UseVisualStyleBackColor = True + ' + 'CNDetailsTLP + ' + Me.CNDetailsTLP.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.CNDetailsTLP.ColumnCount = 2 + Me.CNDetailsTLP.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 22.9656391!)) + Me.CNDetailsTLP.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 77.0343628!)) + Me.CNDetailsTLP.Controls.Add(Me.Label6, 0, 0) + Me.CNDetailsTLP.Controls.Add(Me.Label7, 0, 1) + Me.CNDetailsTLP.Controls.Add(Me.Label8, 1, 1) + Me.CNDetailsTLP.Controls.Add(Me.ComboBox2, 1, 0) + Me.CNDetailsTLP.Location = New System.Drawing.Point(12, 118) + Me.CNDetailsTLP.Name = "CNDetailsTLP" + Me.CNDetailsTLP.RowCount = 2 + Me.CNDetailsTLP.RowStyles.Add(New System.Windows.Forms.RowStyle()) + Me.CNDetailsTLP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0!)) + Me.CNDetailsTLP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0!)) + Me.CNDetailsTLP.Size = New System.Drawing.Size(568, 87) + Me.CNDetailsTLP.TabIndex = 2 + ' + 'Label6 + ' + Me.Label6.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label6.Location = New System.Drawing.Point(3, 0) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(124, 29) + Me.Label6.TabIndex = 0 + Me.Label6.Text = "Class Name:" + Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' + 'Label7 + ' + Me.Label7.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label7.Location = New System.Drawing.Point(3, 29) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(124, 58) + Me.Label7.TabIndex = 0 + Me.Label7.Text = "Class Name Notes:" + ' + 'Label8 + ' + Me.Label8.AutoEllipsis = True + Me.Label8.Dock = System.Windows.Forms.DockStyle.Fill + Me.Label8.Location = New System.Drawing.Point(133, 29) + Me.Label8.Name = "Label8" + Me.Label8.Size = New System.Drawing.Size(432, 58) + Me.Label8.TabIndex = 0 + ' + 'ComboBox2 + ' + Me.ComboBox2.Dock = System.Windows.Forms.DockStyle.Fill + Me.ComboBox2.FormattingEnabled = True + Me.ComboBox2.Location = New System.Drawing.Point(133, 3) + Me.ComboBox2.Name = "ComboBox2" + Me.ComboBox2.Size = New System.Drawing.Size(432, 21) + Me.ComboBox2.TabIndex = 1 + ' 'DateFilterPanel ' Me.DateFilterPanel.Controls.Add(Me.DateFilterSuboperatorContainerPanel) @@ -168,7 +287,7 @@ Partial Class DriverFilterAssistantDialog Me.DateFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill Me.DateFilterPanel.Location = New System.Drawing.Point(0, 0) Me.DateFilterPanel.Name = "DateFilterPanel" - Me.DateFilterPanel.Size = New System.Drawing.Size(595, 179) + Me.DateFilterPanel.Size = New System.Drawing.Size(595, 243) Me.DateFilterPanel.TabIndex = 8 Me.DateFilterPanel.Visible = False ' @@ -280,7 +399,7 @@ Partial Class DriverFilterAssistantDialog Me.SignatureStatusFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill Me.SignatureStatusFilterPanel.Location = New System.Drawing.Point(0, 0) Me.SignatureStatusFilterPanel.Name = "SignatureStatusFilterPanel" - Me.SignatureStatusFilterPanel.Size = New System.Drawing.Size(595, 179) + Me.SignatureStatusFilterPanel.Size = New System.Drawing.Size(595, 243) Me.SignatureStatusFilterPanel.TabIndex = 7 Me.SignatureStatusFilterPanel.Visible = False ' @@ -310,7 +429,7 @@ Partial Class DriverFilterAssistantDialog Me.BootCriticalStatusFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill Me.BootCriticalStatusFilterPanel.Location = New System.Drawing.Point(0, 0) Me.BootCriticalStatusFilterPanel.Name = "BootCriticalStatusFilterPanel" - Me.BootCriticalStatusFilterPanel.Size = New System.Drawing.Size(595, 179) + Me.BootCriticalStatusFilterPanel.Size = New System.Drawing.Size(595, 243) Me.BootCriticalStatusFilterPanel.TabIndex = 6 Me.BootCriticalStatusFilterPanel.Visible = False ' @@ -340,7 +459,7 @@ Partial Class DriverFilterAssistantDialog Me.InboxStatusFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill Me.InboxStatusFilterPanel.Location = New System.Drawing.Point(0, 0) Me.InboxStatusFilterPanel.Name = "InboxStatusFilterPanel" - Me.InboxStatusFilterPanel.Size = New System.Drawing.Size(595, 179) + Me.InboxStatusFilterPanel.Size = New System.Drawing.Size(595, 243) Me.InboxStatusFilterPanel.TabIndex = 5 Me.InboxStatusFilterPanel.Visible = False ' @@ -363,72 +482,6 @@ Partial Class DriverFilterAssistantDialog Me.Label9.TabIndex = 0 Me.Label9.Text = "Inbox Status:" ' - 'ClassNameFilterPanel - ' - Me.ClassNameFilterPanel.Controls.Add(Me.CNDetailsTLP) - Me.ClassNameFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill - Me.ClassNameFilterPanel.Location = New System.Drawing.Point(0, 0) - Me.ClassNameFilterPanel.Name = "ClassNameFilterPanel" - Me.ClassNameFilterPanel.Size = New System.Drawing.Size(595, 179) - Me.ClassNameFilterPanel.TabIndex = 4 - Me.ClassNameFilterPanel.Visible = False - ' - 'CNDetailsTLP - ' - Me.CNDetailsTLP.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ - Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) - Me.CNDetailsTLP.ColumnCount = 2 - Me.CNDetailsTLP.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 22.9656391!)) - Me.CNDetailsTLP.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 77.0343628!)) - Me.CNDetailsTLP.Controls.Add(Me.Label6, 0, 0) - Me.CNDetailsTLP.Controls.Add(Me.Label7, 0, 1) - Me.CNDetailsTLP.Controls.Add(Me.Label8, 1, 1) - Me.CNDetailsTLP.Controls.Add(Me.ComboBox2, 1, 0) - Me.CNDetailsTLP.Location = New System.Drawing.Point(12, 12) - Me.CNDetailsTLP.Name = "CNDetailsTLP" - Me.CNDetailsTLP.RowCount = 2 - Me.CNDetailsTLP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 23.57724!)) - Me.CNDetailsTLP.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 76.4227676!)) - Me.CNDetailsTLP.Size = New System.Drawing.Size(568, 123) - Me.CNDetailsTLP.TabIndex = 2 - ' - 'Label6 - ' - Me.Label6.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label6.Location = New System.Drawing.Point(3, 0) - Me.Label6.Name = "Label6" - Me.Label6.Size = New System.Drawing.Size(124, 29) - Me.Label6.TabIndex = 0 - Me.Label6.Text = "Class Name:" - Me.Label6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft - ' - 'Label7 - ' - Me.Label7.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label7.Location = New System.Drawing.Point(3, 29) - Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(124, 94) - Me.Label7.TabIndex = 0 - Me.Label7.Text = "Class Name Notes:" - ' - 'Label8 - ' - Me.Label8.AutoEllipsis = True - Me.Label8.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label8.Location = New System.Drawing.Point(133, 29) - Me.Label8.Name = "Label8" - Me.Label8.Size = New System.Drawing.Size(432, 94) - Me.Label8.TabIndex = 0 - ' - 'ComboBox2 - ' - Me.ComboBox2.Dock = System.Windows.Forms.DockStyle.Fill - Me.ComboBox2.FormattingEnabled = True - Me.ComboBox2.Location = New System.Drawing.Point(133, 3) - Me.ComboBox2.Name = "ComboBox2" - Me.ComboBox2.Size = New System.Drawing.Size(432, 21) - Me.ComboBox2.TabIndex = 1 - ' 'ProviderNameFilterPanel ' Me.ProviderNameFilterPanel.Controls.Add(Me.TextBox3) @@ -436,7 +489,7 @@ Partial Class DriverFilterAssistantDialog Me.ProviderNameFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill Me.ProviderNameFilterPanel.Location = New System.Drawing.Point(0, 0) Me.ProviderNameFilterPanel.Name = "ProviderNameFilterPanel" - Me.ProviderNameFilterPanel.Size = New System.Drawing.Size(595, 179) + Me.ProviderNameFilterPanel.Size = New System.Drawing.Size(595, 243) Me.ProviderNameFilterPanel.TabIndex = 3 Me.ProviderNameFilterPanel.Visible = False ' @@ -465,7 +518,7 @@ Partial Class DriverFilterAssistantDialog Me.OriginalFileNameFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill Me.OriginalFileNameFilterPanel.Location = New System.Drawing.Point(0, 0) Me.OriginalFileNameFilterPanel.Name = "OriginalFileNameFilterPanel" - Me.OriginalFileNameFilterPanel.Size = New System.Drawing.Size(595, 179) + Me.OriginalFileNameFilterPanel.Size = New System.Drawing.Size(595, 243) Me.OriginalFileNameFilterPanel.TabIndex = 2 Me.OriginalFileNameFilterPanel.Visible = False ' @@ -494,7 +547,7 @@ Partial Class DriverFilterAssistantDialog Me.PublishedNameFilterPanel.Dock = System.Windows.Forms.DockStyle.Fill Me.PublishedNameFilterPanel.Location = New System.Drawing.Point(0, 0) Me.PublishedNameFilterPanel.Name = "PublishedNameFilterPanel" - Me.PublishedNameFilterPanel.Size = New System.Drawing.Size(595, 179) + Me.PublishedNameFilterPanel.Size = New System.Drawing.Size(595, 243) Me.PublishedNameFilterPanel.TabIndex = 1 Me.PublishedNameFilterPanel.Visible = False ' @@ -522,7 +575,7 @@ Partial Class DriverFilterAssistantDialog Me.NoFilterTypeSelectedPanel.Dock = System.Windows.Forms.DockStyle.Fill Me.NoFilterTypeSelectedPanel.Location = New System.Drawing.Point(0, 0) Me.NoFilterTypeSelectedPanel.Name = "NoFilterTypeSelectedPanel" - Me.NoFilterTypeSelectedPanel.Size = New System.Drawing.Size(595, 179) + Me.NoFilterTypeSelectedPanel.Size = New System.Drawing.Size(595, 243) Me.NoFilterTypeSelectedPanel.TabIndex = 0 ' 'Label2 @@ -531,7 +584,7 @@ Partial Class DriverFilterAssistantDialog Me.Label2.Dock = System.Windows.Forms.DockStyle.Fill Me.Label2.Location = New System.Drawing.Point(0, 0) Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(595, 179) + Me.Label2.Size = New System.Drawing.Size(595, 243) Me.Label2.TabIndex = 0 Me.Label2.Text = "Choose a filter to use for driver searches." Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter @@ -542,7 +595,7 @@ Partial Class DriverFilterAssistantDialog Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi Me.CancelButton = Me.Cancel_Button - Me.ClientSize = New System.Drawing.Size(624, 281) + Me.ClientSize = New System.Drawing.Size(624, 345) Me.Controls.Add(Me.FilterTypeContainerPanel) Me.Controls.Add(Me.ComboBox1) Me.Controls.Add(Me.Label1) @@ -557,6 +610,9 @@ Partial Class DriverFilterAssistantDialog Me.Text = "Filter driver information" Me.TableLayoutPanel1.ResumeLayout(False) Me.FilterTypeContainerPanel.ResumeLayout(False) + Me.ClassNameFilterPanel.ResumeLayout(False) + Me.Panel1.ResumeLayout(False) + Me.CNDetailsTLP.ResumeLayout(False) Me.DateFilterPanel.ResumeLayout(False) Me.DateFilterPanel.PerformLayout() Me.DateFilterSuboperatorContainerPanel.ResumeLayout(False) @@ -571,8 +627,6 @@ Partial Class DriverFilterAssistantDialog Me.BootCriticalStatusFilterPanel.PerformLayout() Me.InboxStatusFilterPanel.ResumeLayout(False) Me.InboxStatusFilterPanel.PerformLayout() - Me.ClassNameFilterPanel.ResumeLayout(False) - Me.CNDetailsTLP.ResumeLayout(False) Me.ProviderNameFilterPanel.ResumeLayout(False) Me.ProviderNameFilterPanel.PerformLayout() Me.OriginalFileNameFilterPanel.ResumeLayout(False) @@ -627,5 +681,9 @@ Partial Class DriverFilterAssistantDialog Friend WithEvents NumericUpDown1 As System.Windows.Forms.NumericUpDown Friend WithEvents DatePanel As System.Windows.Forms.Panel Friend WithEvents DateTimePicker1 As System.Windows.Forms.DateTimePicker + Friend WithEvents Button3 As System.Windows.Forms.Button + Friend WithEvents Button2 As System.Windows.Forms.Button + Friend WithEvents Panel1 As System.Windows.Forms.Panel + Friend WithEvents SelectedClassNamesLB As System.Windows.Forms.ListBox End Class diff --git a/Panels/Get_Ops/FilterAssistants/DriverFilterAssistantDialog.vb b/Panels/Get_Ops/FilterAssistants/DriverFilterAssistantDialog.vb index 2ededf126..bb1b29d5f 100644 --- a/Panels/Get_Ops/FilterAssistants/DriverFilterAssistantDialog.vb +++ b/Panels/Get_Ops/FilterAssistants/DriverFilterAssistantDialog.vb @@ -1,77 +1,77 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Public Class DriverFilterAssistantDialog Public AppliedQuery As String Private DriverClassInfoDictionary As New Dictionary(Of String, String) From { - {"AudioProcessingObject", "Includes Audio processing objects (APOs). For more info, see Windows Audio Processing Objects."}, - {"Battery", "Includes battery devices and UPS devices."}, - {"Biometric", "(Windows Server 2003 and later versions) Includes all biometric-based personal identification devices."}, - {"Bluetooth", "(Windows XP SP1 and later versions) Includes all Bluetooth devices."}, - {"Camera", "(Windows 10 version 1709 and later versions) Includes universal camera drivers."}, - {"CDROM", "Includes CD-ROM drives, including SCSI CD-ROM drives. By default, the system's CD-ROM class installer also installs a system-supplied CD audio driver and CD-ROM changer driver as Plug and Play filters."}, - {"DiskDrive", "Includes hard disk drives. See also the HDC and SCSIAdapter classes."}, - {"Display", "Includes video adapters. Drivers for this class include display drivers and video miniport drivers."}, - {"Extension", "(Windows 10 and later versions) Includes all devices requiring customizations. For more information, see Using an Extension INF File."}, - {"FDC", "Includes floppy disk drive controllers."}, - {"FloppyDisk", "Includes floppy disk drives."}, - {"HDC", "Includes hard disk controllers, including ATA/ATAPI controllers but not SCSI and RAID disk controllers."}, - {"HIDClass", "Includes interactive input devices that are operated by the system-supplied HID class driver. Includes USB devices that comply with the USB HID Standard and non-USB devices that use a HID minidriver. For more information, see HIDClass Device Setup Class. See also the Keyboard or Mouse classes."}, - {"Dot4", "Includes devices that control the operation of multifunction IEEE 1284.4 peripheral devices."}, - {"Dot4Print", "Includes Dot4 print functions. A Dot4 print function is a function on a Dot4 device and has a single child device, which is a member of the Printer device setup class."}, - {"61883", "Includes IEEE 1394 devices that support the IEC-61883 protocol device class. The 61883 component includes the 61883.sys protocol driver that transmits various audio and video data streams over the 1394 bus. These currently include standard/high/low quality DV, MPEG2, DSS, and Audio. The IEC-61883 specifications define these data streams."}, - {"AVC", "Includes IEEE 1394 devices that support the AVC protocol device class."}, - {"SBP2", "Includes IEEE 1394 devices that support the SBP2 protocol device class."}, - {"1394", "Includes 1394 host controllers connected on a PCI bus, but not 1394 peripherals. Drivers for this class are system-supplied."}, - {"Image", "Includes still-image capture devices, digital cameras, and scanners."}, - {"Infrared", "Includes infrared devices. Drivers for this class include Serial-IR and Fast-IR NDIS miniports, but see also the Network Adapter class for other NDIS network adapter miniports."}, - {"Keyboard", "Includes all keyboards. That is, it must also be specified in the (secondary) INF for an enumerated child HID keyboard device."}, - {"MediumChanger", "Includes SCSI media changer devices."}, - {"MTD", "Includes memory devices, such as flash memory cards."}, - {"Modem", "Includes modem devices. An INF file for a device of this class specifies the features and configuration of the device and stores this information in the registry. An INF file for a device of this class can also be used to install device drivers for a controllerless modem or a software modem. These devices split the functionality between the modem device and the device driver. For more information about modem INF files and Microsoft Windows Driver Model (WDM) modem devices, see Overview of Modem INF Files and Adding WDM Modem Support."}, - {"Monitor", "Includes display monitors. An INF for a device of this class installs no device drivers, but instead specifies the features of a particular monitor to be stored in the registry for use by drivers of video adapters. (Monitors are enumerated as the child devices of display adapters.)"}, - {"Mouse", "Includes all mouse devices and other kinds of pointing devices, such as trackballs. That is, this class must also be specified in the (secondary) INF for an enumerated child HID mouse device."}, - {"MultiFunction", "Includes combo cards, such as a PCMCIA modem and network card adapter. The driver for such a Plug and Play multifunction device is installed under this class and enumerates the modem and network card separately as its child devices."}, - {"Media", "Includes Audio and DVD multimedia devices, joystick ports, and full-motion video capture devices."}, - {"MultiPortSerial", "Includes intelligent multiport serial cards, but not peripheral devices that connect to its ports. It doesn't include unintelligent (16550-type) multiport serial controllers or single-port serial controllers (see the Ports class)."}, - {"Net", "Consists of network adapter drivers. These drivers must either call NdisMRegisterMiniportDriver or NetAdapterCreate. Drivers that don't use NDIS or NetAdapter should use a different setup class."}, - {"NetClient", "Includes network and/or print providers. NetClient components are deprecated in Windows 8.1, Windows Server 2012 R2, and later."}, - {"NetService", "Includes network services, such as redirectors and servers."}, - {"NetTrans", "Includes NDIS protocols CoNDIS stand-alone call managers, and CoNDIS clients, in addition to higher level drivers in transport stacks."}, - {"SecurityAccelerator", "Includes devices that accelerate secure socket layer (SSL) cryptographic processing."}, - {"PCMCIA", "Includes PCMCIA and CardBus host controllers, but not PCMCIA or CardBus peripherals. Drivers for this class are system-supplied."}, - {"Ports", "Includes serial and parallel port devices. See also the MultiportSerial class."}, - {"Printer", "Includes printers. As an IT admin, hit them with a baseball bat."}, - {"PnpPrinters", "Includes SCSI/1394-enumerated printers. Drivers for this class provide printer communication for a specific bus."}, - {"Processor", "Includes processor types."}, - {"SCSIAdapter", "Includes SCSI Host Bus Adapters (HBAs), disk-array, and NVMe controllers."}, - {"SecurityDevices", "Includes Trusted Platform Module chips. A TPM is a secure cryptoprocessor that helps you with actions such as generating, storing, and limiting the use of cryptographic keys. Any new manufactured device must implement and enable TPM 2.0 by default. For more information, see TPM Recommendations."}, - {"Sensor", "Includes sensor and location devices, such as GPS devices."}, - {"SmartCardReader", "Includes smart card readers."}, - {"SoftwareComponent", "Includes virtual child device to encapsulate software components. For more information, see Adding Software Components with an INF file."}, - {"Storage", "Storage disks utilizing a multi-queue storage stack."}, - {"Volume", "Includes storage volumes as defined by the system-supplied logical volume manager and class drivers that create device objects to represent storage volumes, such as the system disk class driver."}, - {"System", "Includes HALs, system buses, system bridges, the system ACPI driver, and the system volume manager driver."}, - {"TapeDrive", "Includes tape drives, including all tape miniclass drivers."}, - {"USBDevice", "USBDevice includes all USB devices that don't belong to another class. This class isn't used for USB host controllers and hubs; drivers for these devices are provided by the operating system and should use the USB class described in System-Defined Device Setup Classes Reserved for System Use."}, - {"WCEUSBS", "Includes Windows CE ActiveSync devices. The WCEUSBS setup class supports communication between a personal computer and a device that is compatible with the Windows CE ActiveSync driver (generally, PocketPC devices) over USB."}, - {"WPD", "Includes WPD devices."} + {"AudioProcessingObject", LocalizationService.ForSection("DriverFilter.Classes")("AudioProcessing.Message")}, + {"Battery", LocalizationService.ForSection("DriverFilter.Classes")("Battery.Devices.UPS.Label")}, + {"Biometric", LocalizationService.ForSection("DriverFilter.Classes")("Windows.Message")}, + {"Bluetooth", LocalizationService.ForSection("DriverFilter.Classes")("Windows.Label")}, + {"Camera", LocalizationService.ForSection("DriverFilter.Classes")("Camera.Message")}, + {"CDROM", LocalizationService.ForSection("DriverFilter.Classes")("Cd.Rom.Drives.Message")}, + {"DiskDrive", LocalizationService.ForSection("DriverFilter.Classes")("Hard.Disk.Drives.Label")}, + {"Display", LocalizationService.ForSection("DriverFilter.Classes")("VideoAdapters.Message")}, + {"Extension", LocalizationService.ForSection("DriverFilter.Classes")("Extension.Message")}, + {"FDC", LocalizationService.ForSection("DriverFilter.Classes")("Floppy.Disk.Drive.Label")}, + {"FloppyDisk", LocalizationService.ForSection("DriverFilter.Classes")("Floppy.Disk.Drives.Label")}, + {"HDC", LocalizationService.ForSection("DriverFilter.Classes")("Includes.Hard.Message")}, + {"HIDClass", LocalizationService.ForSection("DriverFilter.Classes")("InputDevices.Message")}, + {"Dot4", LocalizationService.ForSection("DriverFilter.Classes")("ControlDevices.Message")}, + {"Dot4Print", LocalizationService.ForSection("DriverFilter.Classes")("Dot.Print.Functions.Message")}, + {"61883", LocalizationService.ForSection("DriverFilter.Classes")("Ieeedevices.Support.Message")}, + {"AVC", LocalizationService.ForSection("DriverFilter.Classes")("Ieeedevices.Support.Label")}, + {"SBP2", LocalizationService.ForSection("DriverFilter.Classes")("SBP2.Message")}, + {"1394", LocalizationService.ForSection("DriverFilter.Classes")("HostControllers.Message")}, + {"Image", LocalizationService.ForSection("DriverFilter.Classes")("Still.Image.Capture.Label")}, + {"Infrared", LocalizationService.ForSection("DriverFilter.Classes")("InfraredDevices.Message")}, + {"Keyboard", LocalizationService.ForSection("DriverFilter.Classes")("Keyboards.Message")}, + {"MediumChanger", LocalizationService.ForSection("DriverFilter.Classes")("ScsimediaChanger.Label")}, + {"MTD", LocalizationService.ForSection("DriverFilter.Classes")("Memory.Devices.Such.Label")}, + {"Modem", LocalizationService.ForSection("DriverFilter.Classes")("Modem.Devices.INF.Message")}, + {"Monitor", LocalizationService.ForSection("DriverFilter.Classes")("Display.Monitors.INF.Message")}, + {"Mouse", LocalizationService.ForSection("DriverFilter.Classes")("Mouse.Devices.Message")}, + {"MultiFunction", LocalizationService.ForSection("DriverFilter.Classes")("Combo.Cards.Such.Message")}, + {"Media", LocalizationService.ForSection("DriverFilter.Classes")("Audio.Dvdmultimedia.Message")}, + {"MultiPortSerial", LocalizationService.ForSection("DriverFilter.Classes")("MultiportSerial.Message")}, + {"Net", LocalizationService.ForSection("DriverFilter.Classes")("NetworkAdapter.Message")}, + {"NetClient", LocalizationService.ForSection("DriverFilter.Classes")("Includes.Network.Message")}, + {"NetService", LocalizationService.ForSection("DriverFilter.Classes")("Network.Services.Such.Label")}, + {"NetTrans", LocalizationService.ForSection("DriverFilter.Classes")("NdisprotocolsCo.Message")}, + {"SecurityAccelerator", LocalizationService.ForSection("DriverFilter.Classes")("SecureDevices.Message")}, + {"PCMCIA", LocalizationService.ForSection("DriverFilter.Classes")("PcmciacardBus.Message")}, + {"Ports", LocalizationService.ForSection("DriverFilter.Classes")("Serial.Parallel.Port.Message")}, + {"Printer", LocalizationService.ForSection("DriverFilter.Classes")("Printers.Admin.Hit.Label")}, + {"PnpPrinters", LocalizationService.ForSection("DriverFilter.Classes")("Includes.SCSI.Message")}, + {"Processor", LocalizationService.ForSection("DriverFilter.Classes")("ProcessorTypes.Label")}, + {"SCSIAdapter", LocalizationService.ForSection("DriverFilter.Classes")("ScsihostBus.Message")}, + {"SecurityDevices", LocalizationService.ForSection("DriverFilter.Classes")("Includes.Trusted.Message")}, + {"Sensor", LocalizationService.ForSection("DriverFilter.Classes")("Includes.Sensor.Label")}, + {"SmartCardReader", LocalizationService.ForSection("DriverFilter.Classes")("Smart.Card.Readers.Label")}, + {"SoftwareComponent", LocalizationService.ForSection("DriverFilter.Classes")("Virtual.Child.Device.Message")}, + {"Storage", LocalizationService.ForSection("DriverFilter.Classes")("Storage.Disks.Label")}, + {"Volume", LocalizationService.ForSection("DriverFilter.Classes")("Includes.Storage.Message")}, + {"System", LocalizationService.ForSection("DriverFilter.Classes")("HalsSystem.Message")}, + {"TapeDrive", LocalizationService.ForSection("DriverFilter.Classes")("Tape.Drives.Including.Label")}, + {"USBDevice", LocalizationService.ForSection("DriverFilter.Classes")("Usbdevice.Includes.Message")}, + {"WCEUSBS", LocalizationService.ForSection("DriverFilter.Classes")("WindowsCeactive.Message")}, + {"WPD", LocalizationService.ForSection("DriverFilter.Classes")("Wpddevices.Label")} } Private MonthNumberNameDictionary As New Dictionary(Of Integer, String) From { - {1, "January"}, - {2, "February"}, - {3, "March"}, - {4, "April"}, - {5, "May"}, - {6, "June"}, - {7, "July"}, - {8, "August"}, - {9, "September"}, - {10, "October"}, - {11, "November"}, - {12, "December"} + {1, LocalizationService.ForSection("DriverFilter.Month")("January.Label")}, + {2, LocalizationService.ForSection("DriverFilter.Month")("February.Label")}, + {3, LocalizationService.ForSection("DriverFilter.Month")("March.Label")}, + {4, LocalizationService.ForSection("DriverFilter.Month")("April.Label")}, + {5, LocalizationService.ForSection("DriverFilter.Month")("Value.Label")}, + {6, LocalizationService.ForSection("DriverFilter.Month")("June.Label")}, + {7, LocalizationService.ForSection("DriverFilter.Month")("July.Label")}, + {8, LocalizationService.ForSection("DriverFilter.Month")("August.Label")}, + {9, LocalizationService.ForSection("DriverFilter.Month")("September.Label")}, + {10, LocalizationService.ForSection("DriverFilter.Month")("October.Label")}, + {11, LocalizationService.ForSection("DriverFilter.Month")("November.Label")}, + {12, LocalizationService.ForSection("DriverFilter.Month")("December.Label")} } Public ProvidedImageClassNames As New List(Of String) @@ -91,11 +91,15 @@ Public Class DriverFilterAssistantDialog AppliedQuery = String.Format("prov:{0}", TextBox3.Text) Case 3 ' Class Name - If ComboBox2.SelectedItem = "-----------------" Then - MessageBox.Show("This class name is not valid.", Text, MessageBoxButtons.OK, MessageBoxIcon.Stop) + If SelectedClassNamesLB.Items.Count < 1 Then + MessageBox.Show("Please specify class names to export and try again.", Text, MessageBoxButtons.OK, MessageBoxIcon.Stop) Exit Sub End If - AppliedQuery = String.Format("cn:{0}", ComboBox2.SelectedItem) + If SelectedClassNamesLB.Items.Contains("-----------------") Then + MessageBox.Show("One or more class names are not valid.", Text, MessageBoxButtons.OK, MessageBoxIcon.Stop) + Exit Sub + End If + AppliedQuery = String.Format("cn:{0}", String.Join(";", SelectedClassNamesLB.Items.Cast(Of String)().Distinct().ToArray())) Case 4 ' Inbox Status AppliedQuery = If(CheckBox1.Checked, "inbox:", "noinbox:") @@ -158,6 +162,8 @@ Public Class DriverFilterAssistantDialog NumericUpDown1.ForeColor = ForeColor DateTimePicker1.BackColor = BackColor DateTimePicker1.ForeColor = ForeColor + SelectedClassNamesLB.BackColor = CurrentTheme.SectionBackgroundColor + SelectedClassNamesLB.ForeColor = ForeColor Dim handle As IntPtr = WindowHelper.GetWindowHandle(Me) WindowHelper.ToggleDarkTitleBar(handle, CurrentTheme.IsDark) ThemeHelper.UpdateLinkLabelColors(Me, Color.DodgerBlue, CurrentTheme.AccentColors(0)) @@ -214,4 +220,33 @@ Public Class DriverFilterAssistantDialog Private Sub ComboBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox2.SelectedIndexChanged Label8.Text = DriverClassInfoDictionary.ElementAtOrDefault(ComboBox2.SelectedIndex).Value End Sub + + Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click + Try + If DriverClassInfoDictionary.ContainsKey(ComboBox1.SelectedItem) Then + Dim SelectedClassInfo As KeyValuePair(Of String, String) = DriverClassInfoDictionary.ElementAtOrDefault(ComboBox2.SelectedIndex) + If SelectedClassInfo.Value IsNot Nothing Then SelectedClassNamesLB.Items.Add(SelectedClassInfo.Key) + Else + ' We are using a class name that is not in the default set; accept it anyway, + ' but don't show any notes because we don't know where these are, or whether + ' they are localized. + SelectedClassNamesLB.Items.Add(ComboBox2.SelectedItem) + End If + Catch ex As Exception + + End Try + End Sub + + Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click + Try + SelectedClassNamesLB.Items.Remove(SelectedClassNamesLB.SelectedItem) + Catch ex As Exception + + End Try + Button3.Enabled = False + End Sub + + Private Sub SelectedClassNamesLB_SelectedIndexChanged(sender As Object, e As EventArgs) Handles SelectedClassNamesLB.SelectedIndexChanged + Button3.Enabled = SelectedClassNamesLB.SelectedItems.Count = 1 + End Sub End Class diff --git a/Panels/Get_Ops/GetImgInfoDlg.vb b/Panels/Get_Ops/GetImgInfoDlg.vb index 120011ca7..ea2603cdd 100644 --- a/Panels/Get_Ops/GetImgInfoDlg.vb +++ b/Panels/Get_Ops/GetImgInfoDlg.vb @@ -1,4 +1,4 @@ -Imports System.Windows.Forms +Imports System.Windows.Forms Imports System.IO Imports Microsoft.Dism Imports System.Threading @@ -16,331 +16,37 @@ Public Class GetImgInfoDlg Dim SelectedImageFile As String Private Sub GetImgInfoDlg_Load(sender As Object, e As EventArgs) Handles MyBase.Load - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Text = "Get image information" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Image file to get information from:" - Label3.Text = "List of indexes of image file:" - Label22.Text = "Image version:" - Label24.Text = "Image name:" - Label26.Text = "Image description:" - Label31.Text = "Image size:" - Label41.Text = "Supports WIMBoot?" - Label43.Text = "Architecture:" - Label47.Text = "HAL:" - Label33.Text = "Service Pack build:" - Label28.Text = "Service Pack level:" - Label30.Text = "Installation type:" - Label39.Text = "Edition:" - Label45.Text = "Product type:" - Label5.Text = "Product suite:" - Label7.Text = "System root directory:" - Label9.Text = "File count:" - Label11.Text = "Dates:" - Label13.Text = "Installed languages:" - Label36.Text = "Image information" - Label37.Text = "Select an index on the list view on the left to view its information here" - RadioButton1.Text = "Currently mounted image" - RadioButton2.Text = "Another image" - Button1.Text = "Browse..." - Button2.Text = "Save..." - Button3.Text = "Pick..." - ListView1.Columns(0).Text = "Index" - ListView1.Columns(1).Text = "Image name" - OpenFileDialog1.Title = "Specify the image to get the information from" - Case "ESN" - Text = "Obtener información de la imagen" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Archivo de imagen del que obtener información:" - Label3.Text = "Listado de índices del archivo de imagen:" - Label22.Text = "Versión de la imagen:" - Label24.Text = "Nombre de la imagen:" - Label26.Text = "Descripción de la imagen:" - Label31.Text = "Tamaño de la imagen:" - Label41.Text = "¿Soporta WIMBoot?" - Label43.Text = "Arquitectura:" - Label47.Text = "HAL:" - Label33.Text = "Compilación de Service Pack:" - Label28.Text = "Nivel de Service Pack:" - Label30.Text = "Tipo de instalación:" - Label39.Text = "Edición:" - Label45.Text = "Tipo de producto:" - Label5.Text = "Suite de producto:" - Label7.Text = "Directorio raíz del sistema:" - Label9.Text = "Número de archivos:" - Label11.Text = "Fechas:" - Label13.Text = "Idiomas instalados:" - Label36.Text = "Información de la imagen" - Label37.Text = "Seleccione un índice del listado de la izquierda para ver su información aquí" - RadioButton1.Text = "Imagen montada actualmente" - RadioButton2.Text = "Otra imagen" - Button1.Text = "Examinar..." - Button2.Text = "Guardar..." - Button3.Text = "Escoger..." - ListView1.Columns(0).Text = "Índice" - ListView1.Columns(1).Text = "Nombre de imagen" - OpenFileDialog1.Title = "Especifique la imagen de la que obtener información" - Case "FRA" - Text = "Obtenir des informations de l'image" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Fichier image à partir duquel les informations sont obtenues :" - Label3.Text = "Liste des index du fichier d'image :" - Label22.Text = "Version de l'image :" - Label24.Text = "Nom de l'image :" - Label26.Text = "Description de l'image :" - Label31.Text = "Taille de l'image :" - Label41.Text = "Supporte WIMBoot ?" - Label43.Text = "Architecture :" - Label47.Text = "HAL :" - Label33.Text = "Compilation du Service Pack ::" - Label28.Text = "Niveau du Service Pack :" - Label30.Text = "Type d'installation :" - Label39.Text = "Édition:" - Label45.Text = "Type de produit :" - Label5.Text = "Suite de produit :" - Label7.Text = "Répertoire racine du système :" - Label9.Text = "Nombre de fichiers :" - Label11.Text = "Dates:" - Label13.Text = "Langues installées :" - Label36.Text = "Information de l'image" - Label37.Text = "Sélectionnez un index dans la liste de gauche pour afficher son information ici." - RadioButton1.Text = "Image actuellement montée" - RadioButton2.Text = "Autre image" - Button1.Text = "Parcourir..." - Button2.Text = "Sauvegarder..." - Button3.Text = "Choisir..." - ListView1.Columns(0).Text = "Index" - ListView1.Columns(1).Text = "Nom de l'image" - OpenFileDialog1.Title = "Spécifier l'image à partir de laquelle l'information doit être obtenue" - Case "PTB", "PTG" - Text = "Obter informações sobre a imagem" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Ficheiro de imagem de onde obter informações:" - Label3.Text = "Lista de índices do ficheiro de imagem:" - Label22.Text = "Versão da imagem:" - Label24.Text = "Nome da imagem:" - Label26.Text = "Descrição da imagem:" - Label31.Text = "Tamanho da imagem:" - Label41.Text = "Suporta WIMBoot?" - Label43.Text = "Arquitetura:" - Label47.Text = "HAL:" - Label33.Text = "Service Pack build:" - Label28.Text = "Nível do Service Pack:" - Label30.Text = "Tipo de instalação:" - Label39.Text = "Edição:" - Label45.Text = "Tipo de produto:" - Label5.Text = "Conjunto de produtos:" - Label7.Text = "Diretório raiz do sistema:" - Label9.Text = "Contagem de ficheiros:" - Label11.Text = "Datas:" - Label13.Text = "Idiomas instalados:" - Label36.Text = "Informações sobre a imagem" - Label37.Text = "Seleccione um índice na vista de lista à esquerda para ver a respectiva informação aqui" - RadioButton1.Text = "Imagem atualmente montada" - RadioButton2.Text = "Outra imagem" - Button1.Text = " Navegar..." - Button2.Text = "Guardar..." - Button3.Text = "Selecionar..." - ListView1.Columns(0).Text = "Índice" - ListView1.Columns(1).Text = "Nome da imagem" - OpenFileDialog1.Title = "Especificar a imagem da qual obter a informação" - Case "ITA" - Text = "Verifica informazioni immagine" - ImageTaskHeader1.ItemText = Text - Label2.Text = "File immagine da cui ottenere informazioni:" - Label3.Text = "Elenco indici file immagine:" - Label22.Text = "Versione immagine:" - Label24.Text = "Nome immagine:" - Label26.Text = "Descrizione immagine:" - Label31.Text = "Dimensione immagine:" - Label41.Text = "Supporta WIMBoot?" - Label43.Text = "Architettura:" - Label47.Text = "HAL:" - Label33.Text = "Service Pack build:" - Label28.Text = "Livello Service Pack:" - Label30.Text = "Tipo di installazione:" - Label39.Text = "Edizione:" - Label45.Text = "Tipo prodotto:" - Label5.Text = "Suite prodotti:" - Label7.Text = "Cartella principale sistema:" - Label9.Text = "Numero file:" - Label11.Text = "Data:" - Label13.Text = "Lingue installate:" - Label36.Text = "Informazioni immagine" - Label37.Text = "Per visualizzarne qui le informazioni seleziona a sinistra un indice nella vista elenco" - RadioButton1.Text = "Immagine attualmente montata" - RadioButton2.Text = "Altra immagine" - Button1.Text = "Sfoglia..." - Button2.Text = "Salva..." - Button3.Text = "Scegli..." - ListView1.Columns(0).Text = "Indice" - ListView1.Columns(1).Text = "Nome immagine" - OpenFileDialog1.Title = "Specifica l'immagine di cui verificare le informazioni" - End Select - Case 1 - Text = "Get image information" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Image file to get information from:" - Label3.Text = "List of indexes of image file:" - Label22.Text = "Image version:" - Label24.Text = "Image name:" - Label26.Text = "Image description:" - Label31.Text = "Image size:" - Label41.Text = "Supports WIMBoot?" - Label43.Text = "Architecture:" - Label47.Text = "HAL:" - Label33.Text = "Service Pack build:" - Label28.Text = "Service Pack level:" - Label30.Text = "Installation type:" - Label39.Text = "Edition:" - Label45.Text = "Product type:" - Label5.Text = "Product suite:" - Label7.Text = "System root directory:" - Label9.Text = "File count:" - Label11.Text = "Dates:" - Label13.Text = "Installed languages:" - Label36.Text = "Image information" - Label37.Text = "Select an index on the list view on the left to view its information here" - RadioButton1.Text = "Currently mounted image" - RadioButton2.Text = "Another image" - Button1.Text = "Browse..." - Button2.Text = "Save..." - Button3.Text = "Pick..." - ListView1.Columns(0).Text = "Index" - ListView1.Columns(1).Text = "Image name" - OpenFileDialog1.Title = "Specify the image to get the information from" - Case 2 - Text = "Obtener información de la imagen" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Archivo de imagen del que obtener información:" - Label3.Text = "Listado de índices del archivo de imagen:" - Label22.Text = "Versión de la imagen:" - Label24.Text = "Nombre de la imagen:" - Label26.Text = "Descripción de la imagen:" - Label31.Text = "Tamaño de la imagen:" - Label41.Text = "¿Soporta WIMBoot?" - Label43.Text = "Arquitectura:" - Label47.Text = "HAL:" - Label33.Text = "Compilación de Service Pack:" - Label28.Text = "Nivel de Service Pack:" - Label30.Text = "Tipo de instalación:" - Label39.Text = "Edición:" - Label45.Text = "Tipo de producto:" - Label5.Text = "Suite de producto:" - Label7.Text = "Directorio raíz del sistema:" - Label9.Text = "Número de archivos:" - Label11.Text = "Fechas:" - Label13.Text = "Idiomas instalados:" - Label36.Text = "Información de la imagen" - Label37.Text = "Seleccione un índice del listado de la izquierda para ver su información aquí" - RadioButton1.Text = "Imagen montada actualmente" - RadioButton2.Text = "Otra imagen" - Button1.Text = "Examinar..." - Button2.Text = "Guardar..." - Button3.Text = "Escoger..." - ListView1.Columns(0).Text = "Índice" - ListView1.Columns(1).Text = "Nombre de imagen" - OpenFileDialog1.Title = "Especifique la imagen de la que obtener información" - Case 3 - Text = "Obtenir des informations de l'image" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Fichier image à partir duquel les informations sont obtenues :" - Label3.Text = "Liste des index du fichier d'image :" - Label22.Text = "Version de l'image :" - Label24.Text = "Nom de l'image :" - Label26.Text = "Description de l'image :" - Label31.Text = "Taille de l'image :" - Label41.Text = "Supporte WIMBoot ?" - Label43.Text = "Architecture :" - Label47.Text = "HAL :" - Label33.Text = "Compilation du Service Pack ::" - Label28.Text = "Niveau du Service Pack :" - Label30.Text = "Type d'installation :" - Label39.Text = "Édition:" - Label45.Text = "Type de produit :" - Label5.Text = "Suite de produit :" - Label7.Text = "Répertoire racine du système :" - Label9.Text = "Nombre de fichiers :" - Label11.Text = "Dates:" - Label13.Text = "Langues installées :" - Label36.Text = "Information de l'image" - Label37.Text = "Sélectionnez un index dans la liste de gauche pour afficher son information ici." - RadioButton1.Text = "Image actuellement montée" - RadioButton2.Text = "Autre image" - Button1.Text = "Parcourir..." - Button2.Text = "Sauvegarder..." - Button3.Text = "Choisir..." - ListView1.Columns(0).Text = "Index" - ListView1.Columns(1).Text = "Nom de l'image" - OpenFileDialog1.Title = "Spécifier l'image à partir de laquelle l'information doit être obtenue" - Case 4 - Text = "Obter informações sobre a imagem" - ImageTaskHeader1.ItemText = Text - Label2.Text = "Ficheiro de imagem de onde obter informações:" - Label3.Text = "Lista de índices do ficheiro de imagem:" - Label22.Text = "Versão da imagem:" - Label24.Text = "Nome da imagem:" - Label26.Text = "Descrição da imagem:" - Label31.Text = "Tamanho da imagem:" - Label41.Text = "Suporta WIMBoot?" - Label43.Text = "Arquitetura:" - Label47.Text = "HAL:" - Label33.Text = "Service Pack build:" - Label28.Text = "Nível do Service Pack:" - Label30.Text = "Tipo de instalação:" - Label39.Text = "Edição:" - Label45.Text = "Tipo de produto:" - Label5.Text = "Conjunto de produtos:" - Label7.Text = "Diretório raiz do sistema:" - Label9.Text = "Contagem de ficheiros:" - Label11.Text = "Datas:" - Label13.Text = "Idiomas instalados:" - Label36.Text = "Informações sobre a imagem" - Label37.Text = "Seleccione um índice na vista de lista à esquerda para ver a respectiva informação aqui" - RadioButton1.Text = "Imagem atualmente montada" - RadioButton2.Text = "Outra imagem" - Button1.Text = " Navegar..." - Button2.Text = "Guardar..." - Button3.Text = "Selecionar..." - ListView1.Columns(0).Text = "Índice" - ListView1.Columns(1).Text = "Nome da imagem" - OpenFileDialog1.Title = "Especificar a imagem da qual obter a informação" - Case 5 - Text = "Verifica informazioni immagine" - ImageTaskHeader1.ItemText = Text - Label2.Text = "File immagine di cui verificare le informazioni:" - Label3.Text = "Elenco indici file immagine:" - Label22.Text = "Versione immagine:" - Label24.Text = "Nome immagine:" - Label26.Text = "Descrizione immagine:" - Label31.Text = "Dimensione immagine:" - Label41.Text = "Supporta WIMBoot?" - Label43.Text = "Architettura:" - Label47.Text = "HAL:" - Label33.Text = "Build Service Pack:" - Label28.Text = "Livello Service Pack:" - Label30.Text = "Tipo installazione:" - Label39.Text = "Edizione:" - Label45.Text = "Tipo prodotto:" - Label5.Text = "Suite prodotti:" - Label7.Text = "Cartella principale sistema:" - Label9.Text = "Numero file:" - Label11.Text = "Data:" - Label13.Text = "Lingue installate:" - Label36.Text = "Informazioni immagine" - Label37.Text = "Per visualizzarne qui le informazioni seleziona a sinistra un indice nella vista elenco" - RadioButton1.Text = "Immagine attualmente montata" - RadioButton2.Text = "Altra immagine" - Button1.Text = "Sfoglia..." - Button2.Text = "Salva..." - Button3.Text = "Scegli..." - ListView1.Columns(0).Text = "Indice" - ListView1.Columns(1).Text = "Nome immagine" - OpenFileDialog1.Title = "Specifica l'immagine di cui verificare le informazioni" - End Select + Text = LocalizationService.ForSection("ImageInfo")("Get.Image.Label") + ImageTaskHeader1.ItemText = LocalizationService.ForSection("ImageInfo").Format("Image.Task.Header.Label", Text) + Label2.Text = LocalizationService.ForSection("ImageInfo")("ImageFile.Get.Label") + Label3.Text = LocalizationService.ForSection("ImageInfo")("List.Indexes.ImageFile.Label") + Label22.Text = LocalizationService.ForSection("ImageInfo")("ImageVersion.Label") + Label24.Text = LocalizationService.ForSection("ImageInfo")("ImageName.Label") + Label26.Text = LocalizationService.ForSection("ImageInfo")("ImageDescription.Label") + Label31.Text = LocalizationService.ForSection("ImageInfo")("ImageSize.Label") + Label41.Text = LocalizationService.ForSection("ImageInfo")("Supports.WIM.Boot.Label") + Label43.Text = LocalizationService.ForSection("ImageInfo")("Architecture.Label") + Label47.Text = LocalizationService.ForSection("ImageInfo")("HAL.Label") + Label33.Text = LocalizationService.ForSection("ImageInfo")("ServicePackBuild.Label") + Label28.Text = LocalizationService.ForSection("ImageInfo")("ServicePackLevel.Label") + Label30.Text = LocalizationService.ForSection("ImageInfo")("InstallationType.Label") + Label39.Text = LocalizationService.ForSection("ImageInfo")("Edition.Label") + Label45.Text = LocalizationService.ForSection("ImageInfo")("ProductType.Label") + Label5.Text = LocalizationService.ForSection("ImageInfo")("ProductSuite.Label") + Label7.Text = LocalizationService.ForSection("ImageInfo")("System.Root.Dir.Label") + Label9.Text = LocalizationService.ForSection("ImageInfo")("FileCount.Label") + Label11.Text = LocalizationService.ForSection("ImageInfo")("Dates.Label") + Label13.Text = LocalizationService.ForSection("ImageInfo")("Installed.Languages.Label") + Label36.Text = LocalizationService.ForSection("ImageInfo")("ImageInfo.Label") + Label37.Text = LocalizationService.ForSection("ImageInfo")("Index.List.View.Label") + RadioButton1.Text = LocalizationService.ForSection("ImageInfo")("CurrentlyMounted.RadioButton") + RadioButton2.Text = LocalizationService.ForSection("ImageInfo")("AnotherImage.RadioButton") + Button1.Text = LocalizationService.ForSection("ImageInfo")("Browse.Button") + Button2.Text = LocalizationService.ForSection("ImageInfo")("Save.Button") + Button3.Text = LocalizationService.ForSection("ImageInfo")("Pick.Button") + ListView1.Columns(0).Text = LocalizationService.ForSection("ImageInfo")("Index.Column") + ListView1.Columns(1).Text = LocalizationService.ForSection("ImageInfo")("ImageName.Column") + OpenFileDialog1.Title = LocalizationService.ForSection("ImageInfo")("Image.Get.Title") ImageTaskHeader1.SetColors() BackColor = CurrentTheme.SectionBackgroundColor ForeColor = CurrentTheme.ForegroundColor @@ -399,31 +105,7 @@ Public Class GetImgInfoDlg Catch ex As Exception DynaLog.LogMessage("Could not get image file information. Error message: " & ex.Message) Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Could not gather information of this image file. Reason:" & CrLf & CrLf & ex.ToString() & " - " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "ESN" - msg = "No pudimos obtener información de este archivo de imagen. Razón:" & CrLf & CrLf & ex.ToString() & " - " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "FRA" - msg = "Impossible de recueillir des informations sur ce fichier de l'image. Raison :" & CrLf & CrLf & ex.ToString() & " - " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "PTB", "PTG" - msg = "Não foi possível recolher informações sobre este ficheiro de imagem. Motivo:" & CrLf & CrLf & ex.ToString() & " - " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case "ITA" - msg = "Impossibile verificare informazioni sull'immagine. Motivo:" & CrLf & CrLf & ex.ToString() & " - " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - End Select - Case 1 - msg = "Could not gather information of this image file. Reason:" & CrLf & CrLf & ex.ToString() & " - " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 2 - msg = "No pudimos obtener información de este archivo de imagen. Razón:" & CrLf & CrLf & ex.ToString() & " - " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 3 - msg = "Impossible de recueillir des informations sur ce fichier de l'image. Raison :" & CrLf & CrLf & ex.ToString() & " - " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 4 - msg = "Não foi possível recolher informações sobre este ficheiro de imagem. Motivo:" & CrLf & CrLf & ex.ToString() & " - " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - Case 5 - msg = "Impossibile verificare informazioni sull'immagine. Motivo:" & CrLf & CrLf & ex.ToString() & " - " & ex.Message & " (HRESULT " & Hex(ex.HResult) & ")" - End Select + msg = LocalizationService.ForSection("ImageInfo.GetImageInfo").Format("Gather.ImageFile.Message", ex.ToString(), ex.Message, Hex(ex.HResult)) MsgBox(msg, vbOKOnly + vbCritical, ImageTaskHeader1.ItemText) Finally DynaLog.LogMessage("Shutting down API...") @@ -443,58 +125,12 @@ Public Class GetImgInfoDlg DetectFeatureUpdate(ImageInfoList(Index).ProductVersion) Label25.Text = ImageInfoList(Index).ImageName Label35.Text = ImageInfoList(Index).ImageDescription - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label32.Text = ImageInfoList(Index).ImageSize.ToString("N0") & " bytes (~" & Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize) & ")" - Case "ESN" - Label32.Text = ImageInfoList(Index).ImageSize.ToString("N0") & " bytes (~" & Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize) & ")" - Case "FRA" - Label32.Text = ImageInfoList(Index).ImageSize.ToString("N0") & " octets (~" & Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize, True) & ")" - Case "PTB", "PTG" - Label32.Text = ImageInfoList(Index).ImageSize.ToString("N0") & " bytes (~" & Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize) & ")" - Case "ITA" - Label32.Text = ImageInfoList(Index).ImageSize.ToString("N0") & " bytes (~" & Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize) & ")" - End Select - Case 1 - Label32.Text = ImageInfoList(Index).ImageSize.ToString("N0") & " bytes (~" & Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize) & ")" - Case 2 - Label32.Text = ImageInfoList(Index).ImageSize.ToString("N0") & " bytes (~" & Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize) & ")" - Case 3 - Label32.Text = ImageInfoList(Index).ImageSize.ToString("N0") & " octets (~" & Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize, True) & ")" - Case 4 - Label32.Text = ImageInfoList(Index).ImageSize.ToString("N0") & " bytes (~" & Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize) & ")" - Case 5 - Label32.Text = ImageInfoList(Index).ImageSize.ToString("N0") & " bytes (~" & Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize) & ")" - End Select + Dim isFrenchSizeText As Boolean = LocalizationService.CurrentCultureCode.Equals("fr-FR", StringComparison.OrdinalIgnoreCase) + Dim readableImageSize As String = If(isFrenchSizeText, Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize, True), Converters.BytesToReadableSize(ImageInfoList(Index).ImageSize)) + Label32.Text = LocalizationService.ForSection("ImageInfo").Format("Bytes.Label", ImageInfoList(Index).ImageSize.ToString("N0"), readableImageSize) Label42.Text = Casters.CastDismArchitecture(ImageInfoList(Index).Architecture, True) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, "Undefined by the image") - Case "ESN" - Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, "No definida por la imagen") - Case "FRA" - Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, "Non défini par l'image") - Case "PTB", "PTG" - Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, "Não definido pela imagem") - Case "ITA" - Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, "Non definito dall'immagine") - End Select - Case 1 - Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, "Undefined by the image") - Case 2 - Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, "No definida por la imagen") - Case 3 - Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, "Non défini par l'image") - Case 4 - Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, "Não definido pela imagem") - Case 5 - Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, "Non definito dall'immagine") - End Select + Label46.Text = If(Not ImageInfoList(Index).Hal = "", ImageInfoList(Index).Hal, LocalizationService.ForSection("ImageInfo.DisplayImageInfo")("UndefinedImage.Label")) Label34.Text = ImageInfoList(Index).ProductVersion.Revision Label27.Text = ImageInfoList(Index).SpLevel Label29.Text = ImageInfoList(Index).InstallationType @@ -504,31 +140,7 @@ Public Class GetImgInfoDlg Label8.Text = ImageInfoList(Index).SystemRoot LanguageList.Items.Clear() For Each language In ImageInfoList(Index).Languages - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - LanguageList.Items.Add(language.Name & " (" & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, ", default", "") & ")") - Case "ESN" - LanguageList.Items.Add(language.Name & " (" & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, ", predeterminado", "") & ")") - Case "FRA" - LanguageList.Items.Add(language.Name & " (" & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, ", défaut", "") & ")") - Case "PTB", "PTG" - LanguageList.Items.Add(language.Name & " (" & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, ", predefinido", "") & ")") - Case "ITA" - LanguageList.Items.Add(language.Name & " (" & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, ", predefinito", "") & ")") - End Select - Case 1 - LanguageList.Items.Add(language.Name & " (" & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, ", default", "") & ")") - Case 2 - LanguageList.Items.Add(language.Name & " (" & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, ", predeterminado", "") & ")") - Case 3 - LanguageList.Items.Add(language.Name & " (" & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, ", défaut", "") & ")") - Case 4 - LanguageList.Items.Add(language.Name & " (" & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, ", predefinido", "") & ")") - Case 5 - LanguageList.Items.Add(language.Name & " (" & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, ", predefinito", "") & ")") - End Select + LanguageList.Items.Add(language.Name & LocalizationService.ForSection("ImageInfo.LanguageList")("Display.Name.Open.Label") & language.DisplayName & If(ImageInfoList(Index).DefaultLanguage.Name = language.Name, LocalizationService.ForSection("ImageInfo.LanguageList")("Default.Label"), "") & LocalizationService.ForSection("ImageInfo.LanguageList")("Display.Name.Close.Label")) Next If ImageInfoList(Index).CustomizedInfo IsNot Nothing Then Dim CurrentOSCulture As CultureInfo = CultureInfo.CurrentCulture @@ -544,51 +156,8 @@ Public Class GetImgInfoDlg ImageModificationDate = ModifiedDate.ToString("MM/dd/yyyy HH:mm:ss") End If - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label6.Text = ImageInfoList(Index).CustomizedInfo.FileCount & " files in " & ImageInfoList(Index).CustomizedInfo.DirectoryCount & " directories" - Label10.Text = "Date created: " & ImageCreationDate & CrLf & _ - "Date modified: " & ImageModificationDate - Case "ESN" - Label6.Text = ImageInfoList(Index).CustomizedInfo.FileCount & " archivos en " & ImageInfoList(Index).CustomizedInfo.DirectoryCount & " directorios" - Label10.Text = "Fecha de creación: " & ImageCreationDate & CrLf & _ - "Fecha de modificación: " & ImageModificationDate - Case "FRA" - Label6.Text = ImageInfoList(Index).CustomizedInfo.FileCount & " fichiers dans " & ImageInfoList(Index).CustomizedInfo.DirectoryCount & " répertoires" - Label10.Text = "Date de création : " & ImageCreationDate & CrLf & _ - "Date de modification : " & ImageModificationDate - Case "PTB", "PTG" - Label6.Text = ImageInfoList(Index).CustomizedInfo.FileCount & " ficheiros em " & ImageInfoList(Index).CustomizedInfo.DirectoryCount & " directórios" - Label10.Text = "Data de criação: " & ImageCreationDate & CrLf & _ - "Data de modificação: " & ImageModificationDate - Case "ITA" - Label6.Text = ImageInfoList(Index).CustomizedInfo.FileCount & " file in " & ImageInfoList(Index).CustomizedInfo.DirectoryCount & " cartelle" - Label10.Text = "Data di creazione: " & ImageCreationDate & CrLf & _ - "Data modifica: " & ImageModificationDate - End Select - Case 1 - Label6.Text = ImageInfoList(Index).CustomizedInfo.FileCount & " files in " & ImageInfoList(Index).CustomizedInfo.DirectoryCount & " directories" - Label10.Text = "Date created: " & ImageCreationDate & CrLf & _ - "Date modified: " & ImageModificationDate - Case 2 - Label6.Text = ImageInfoList(Index).CustomizedInfo.FileCount & " archivos en " & ImageInfoList(Index).CustomizedInfo.DirectoryCount & " directorios" - Label10.Text = "Fecha de creación: " & ImageCreationDate & CrLf & _ - "Fecha de modificación: " & ImageModificationDate - Case 3 - Label6.Text = ImageInfoList(Index).CustomizedInfo.FileCount & " fichiers dans " & ImageInfoList(Index).CustomizedInfo.DirectoryCount & " répertoires" - Label10.Text = "Date de création : " & ImageCreationDate & CrLf & _ - "Date de modification : " & ImageModificationDate - Case 4 - Label6.Text = ImageInfoList(Index).CustomizedInfo.FileCount & " ficheiros em " & ImageInfoList(Index).CustomizedInfo.DirectoryCount & " directórios" - Label10.Text = "Data de criação: " & ImageCreationDate & CrLf & _ - "Data de modificação: " & ImageModificationDate - Case 5 - Label6.Text = ImageInfoList(Index).CustomizedInfo.FileCount & " file in " & ImageInfoList(Index).CustomizedInfo.DirectoryCount & " cartelle" - Label10.Text = "Data di creazione: " & ImageCreationDate & CrLf & _ - "Data modifica: " & ImageModificationDate - End Select + Label6.Text = LocalizationService.ForSection("ImageInfo.DisplayImageInfo").Format("FilesDirectories.Label", ImageInfoList(Index).CustomizedInfo.FileCount, ImageInfoList(Index).CustomizedInfo.DirectoryCount) + Label10.Text = LocalizationService.ForSection("ImageInfo.DisplayImageInfo").Format("Date.Created.Modified.Label", ImageCreationDate, ImageModificationDate) Else Label6.Text = "" Label10.Text = "" @@ -653,98 +222,43 @@ Public Class GetImgInfoDlg Select Case SysVer.Major Case 10 Select Case SysVer.Build - Case 9650 To 10240 - FeatUpd = "1507 (Threshold 1)" - Case 10525 To 10587 ' 10587 is a Post-RTM build of Windows 10 November Update - FeatUpd = "1511 (Threshold 2)" - Case 11065 To 14393 - FeatUpd = "1607 (Redstone 1)" - Case 14832 To 15063 - FeatUpd = "1703 (Redstone 2)" - Case 15140 To 16299 - FeatUpd = "1709 (Redstone 3)" - Case 16251 To 17134 - FeatUpd = "1803 (Redstone 4)" - Case 17604 To 17763 - FeatUpd = "1809 (Redstone 5)" - Case 18204 To 18362 - FeatUpd = "1903 (Titanium)" - Case Is = 18362 - If SysVer.Revision >= 10000 Then - FeatUpd = "1909 (Vanadium)" - Else - FeatUpd = "1903 (Titanium)" - End If - Case Is = 18363 - FeatUpd = "1909 (Vanadium)" - Case 18826 To 19041 - FeatUpd = "2004 (Vibranium)" - Case 19041 To 19489 - FeatUpd = "2004+ (Vibranium)" - Case 19489 To 19645 - FeatUpd = "2004 (Manganese)" - Case 20124 To 20279 - FeatUpd = "21H1 (Iron)" - Case 20282 To 20348 - FeatUpd = "21H2 (Iron)" - Case 21242 To 22000 ' Also includes Windows 11 Cobalt (21H2) - FeatUpd = "21H2 (Cobalt)" - Case 22350 To 22630 ' This goes until Windows 11 build 22631 (2022 Update Moment 4) - FeatUpd = "22H2 (Nickel)" - Case 22631 To 22634 - FeatUpd = "23H2 (Nickel)" - Case 22635 To 23400 - FeatUpd = "23H2 (Nickel Moment 5)" - Case 23401 To 25000 - FeatUpd = "Dev (Nickel)" - Case 25057 To 25238 - FeatUpd = "23H1 (Copper)" - Case 25240 To 25400 ' 25400 is a relative number. 25398 is the final build of Zinc - FeatUpd = "23H2 (Zinc)" - Case 25801 To 25941 - FeatUpd = "24H1 (Gallium)" - Case 25942 To 26199 - FeatUpd = "24H2 (Germanium)" - Case 26200 To 27500 - FeatUpd = "25H2 (Germanium)" - Case 27501 To 27686 - FeatUpd = "25H1 (Dilithium)" - Case 27687 To 27788 - FeatUpd = "25H2 (Selenium)" - Case 27789 To 28999 - FeatUpd = "26H1 (Bromine)" - Case Is >= 29000 - FeatUpd = "26H2 (Krypton)" + Case 9650 To 10240 : FeatUpd = "1507 (Threshold 1)" + Case 10525 To 10587 : FeatUpd = "1511 (Threshold 2)" + Case 11065 To 14393 : FeatUpd = "1607 (Redstone 1)" + Case 14832 To 15063 : FeatUpd = "1703 (Redstone 2)" + Case 15140 To 16299 : FeatUpd = "1709 (Redstone 3)" + Case 16251 To 17134 : FeatUpd = "1803 (Redstone 4)" + Case 17604 To 17763 : FeatUpd = "1809 (Redstone 5)" + Case 18204 To 18362 : FeatUpd = "1903 (Titanium)" + Case Is = 18362 : FeatUpd = If(SysVer.Revision >= 10000, "1909 (Vanadium)", "1903 (Titanium)") + Case Is = 18363 : FeatUpd = "1909 (Vanadium)" + Case 18826 To 19041 : FeatUpd = "2004 (Vibranium)" + Case 19041 To 19489 : FeatUpd = "2004+ (Vibranium)" + Case 19489 To 19645 : FeatUpd = "2004 (Manganese)" + Case 20124 To 20279 : FeatUpd = "21H1 (Iron)" + Case 20282 To 20348 : FeatUpd = "21H2 (Iron)" + Case 21242 To 22000 : FeatUpd = "21H2 (Cobalt)" + Case 22350 To 22630 : FeatUpd = "22H2 (Nickel)" + Case 22631 To 22634 : FeatUpd = "23H2 (Nickel)" + Case 22635 To 23400 : FeatUpd = "23H2 (Nickel Moment 5)" + Case 23401 To 25000 : FeatUpd = "Dev (Nickel)" + Case 25057 To 25238 : FeatUpd = "23H1 (Copper)" + Case 25240 To 25400 : FeatUpd = "23H2 (Zinc)" + Case 25801 To 25941 : FeatUpd = "24H1 (Gallium)" + Case 25942 To 26199 : FeatUpd = "24H2 (Germanium)" + Case 26200 To 26299 : FeatUpd = "25H2 (Germanium)" + Case 26300 To 27500 : FeatUpd = "26H2 (Germanium)" + Case 27501 To 27686 : FeatUpd = "25H1 (Dilithium)" + Case 27687 To 27788 : FeatUpd = "25H2 (Selenium)" + Case 27789 To 28999 : FeatUpd = "26H1 (Bromine)" + Case 29000 To 29617 : FeatUpd = "26H2 (Krypton)" + Case Is >= 29630 : FeatUpd = "27H1 (Rubidium)" End Select Case Else Exit Sub End Select DynaLog.LogMessage("Detected feature update: " & FeatUpd) - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - Label23.Text &= " (feature update: " & FeatUpd & ")" - Case "ESN" - Label23.Text &= " (actualización de características: " & FeatUpd & ")" - Case "FRA" - Label23.Text &= "(m-à-j des caractéristiques: " & FeatUpd & ")" - Case "PTB", "PTG" - Label23.Text &= " (atualização de funcionalidades: " & FeatUpd & ")" - Case "ITA" - Label23.Text &= " (aggiornamento funzionalità: " & FeatUpd & ")" - End Select - Case 1 - Label23.Text &= " (feature update: " & FeatUpd & ")" - Case 2 - Label23.Text &= " (actualización de características: " & FeatUpd & ")" - Case 3 - Label23.Text &= "(m-à-j des caractéristiques: " & FeatUpd & ")" - Case 4 - Label23.Text &= " (atualização de funcionalidades: " & FeatUpd & ")" - Case 5 - Label23.Text &= " (aggiornamento funzionalità: " & FeatUpd & ")" - End Select + Label23.Text &= LocalizationService.ForSection("ImageInfo.FeatureUpdate")("FeatureUpdate.Label") & FeatUpd & LocalizationService.ForSection("ImageInfo.FeatureUpdate")("Text1.Label") End Sub Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged diff --git a/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.Designer.vb b/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.Designer.vb index bcbfc96a7..59a5c58ba 100644 --- a/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.Designer.vb +++ b/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.Designer.vb @@ -76,7 +76,6 @@ Partial Class ImgInfoSaveDlg Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi Me.ClientSize = New System.Drawing.Size(704, 161) - Me.ControlBox = False Me.Controls.Add(Me.ProgressBar1) Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label1) diff --git a/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.vb b/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.vb index 01b73fc14..91e80b044 100644 --- a/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.vb +++ b/Panels/Get_Ops/InfoSave/ImgInfoSaveDlg.vb @@ -58,6 +58,8 @@ Public Class ImgInfoSaveDlg Dim OSVer As Version + Private IsBusy As Boolean = False + Private Sub ReportChanges(Message As String, ProgressPercentage As Double) Label2.Text = Message ProgressBar1.Value = ProgressPercentage @@ -65,10 +67,10 @@ Public Class ImgInfoSaveDlg End Sub Private Sub WriteExceptionInfo(ex As Exception) - Contents &= GetParagraph("The program could not get information about this task. See below for reasons why:") & CrLf & - GetListItems(New String() {"Exception: " & ex.ToString(), - "Exception message: " & ex.Message, - "Error code: " & Hex(ex.HResult) & CrLf & CrLf}. + Contents &= GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("Get.Message")) & CrLf & + GetListItems(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("Exception.Label") & ex.ToString(), + LocalizationService.ForSection("ImageInfoSave.Report")("ExceptionMessage") & ex.Message, + LocalizationService.ForSection("ImageInfoSave.Report")("ErrorCode.Label") & Hex(ex.HResult) & CrLf & CrLf}. ToList()) End Sub @@ -76,7 +78,7 @@ Public Class ImgInfoSaveDlg Dim ImageInfoCollection As DismImageInfoCollection = Nothing Dim ImageInfoList As New List(Of DismImageInfo) If ImageInfoList.Count <> 0 Then ImageInfoList.Clear() - Contents &= GetHeader("Image information", HeaderSize.Header2) & CrLf + Contents &= GetHeader(LocalizationService.ForSection("ImageInfoSave.Report")("ImageInfo.Label"), HeaderSize.Header2) & CrLf If OnlineMode Then Dim revisionNumber As Integer Try @@ -87,20 +89,20 @@ Public Class ImgInfoSaveDlg revisionNumber = FileVersionInfo.GetVersionInfo(Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\system32\ntoskrnl.exe").ProductPrivatePart End Try - Contents &= GetHeader("Active installation information:", HeaderSize.Header3) & CrLf & - GetListItems(New String() {"Name: " & My.Computer.Info.OSFullName, - "Boot point (mount point): " & Environment.GetEnvironmentVariable("SYSTEMDRIVE"), - "Version: " & Environment.OSVersion.Version.Major & "." & Environment.OSVersion.Version.Minor & "." & Environment.OSVersion.Version.Build & "." & revisionNumber}. + Contents &= GetHeader(LocalizationService.ForSection("ImageInfoSave.Report")("Active.Install.Label"), HeaderSize.Header3) & CrLf & + GetListItems(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("Name.Label") & My.Computer.Info.OSFullName, + LocalizationService.ForSection("ImageInfoSave.Report")("Boot.Point.Mount.Label") & Environment.GetEnvironmentVariable("SYSTEMDRIVE"), + LocalizationService.ForSection("ImageInfoSave.Report")("Version.Label") & Environment.OSVersion.Version.Major & "." & Environment.OSVersion.Version.Minor & "." & Environment.OSVersion.Version.Build & "." & revisionNumber}. ToList()) & CrLf Exit Sub ElseIf OfflineMode Then - Contents &= GetHeader("Offline installation information:", HeaderSize.Header3) & CrLf & - GetListItems(New String() {"Boot point (mount point): " & ImgMountDir, - "- Version: " & FileVersionInfo.GetVersionInfo(ImgMountDir & "\Windows\system32\ntoskrnl.exe").ProductVersion.ToString()}. + Contents &= GetHeader(LocalizationService.ForSection("ImageInfoSave.Report")("Offline.Install.Label"), HeaderSize.Header3) & CrLf & + GetListItems(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("Boot.Point.Mount.Label") & ImgMountDir, + LocalizationService.ForSection("ImageInfoSave.Report")("OfflineVersion.Label") & FileVersionInfo.GetVersionInfo(ImgMountDir & "\Windows\system32\ntoskrnl.exe").ProductVersion.ToString()}. ToList()) & CrLf Exit Sub End If - Contents &= GetListItems(New String() {"Image file to get information from: " & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, "")}.ToList()) + Contents &= GetListItems(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("ImageFile.Get.Label") & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, "")}.ToList()) Debug.WriteLine("[GetImageInformation] Starting task...") Try Debug.WriteLine("[GetImageInformation] Starting API...") @@ -108,63 +110,39 @@ Public Class ImgInfoSaveDlg Debug.WriteLine("[GetImageInformation] Populating info collection...") ImageInfoCollection = DismApi.GetImageInfo(SourceImage) Debug.WriteLine("[GetImageInformation] Information processes completed for the image. Obtained images: " & ImageInfoCollection.Count) - Contents &= CrLf & GetParagraph("Information summary for " & ImageInfoCollection.Count & " image(s):", ParagraphStyle.Bold) & CrLf & - GetTableHeader(New String() {"Version", - "Image name", - "Image description", - "Image size", - "Architecture", - "HAL", - "Service Pack build", - "Service Pack level", - "Installation type", - "Edition", - "Product type", - "Product suite", - "System root directory", - "Languages", - "Date of creation", - "Date of modification"}.ToList()) + Contents &= CrLf & GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("InfoSummary.Label") & ImageInfoCollection.Count & LocalizationService.ForSection("ImageInfoSave.Report")("ImageS.Label"), ParagraphStyle.Bold) & CrLf & + GetTableHeader(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("Version.Column"), + LocalizationService.ForSection("ImageInfoSave.Report")("ImageName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ImageDescription"), + LocalizationService.ForSection("ImageInfoSave.Report")("ImageSize.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Architecture.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("HAL.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ServicePackBuild.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ServicePackLevel.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("InstallationType.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Edition.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ProductType.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ProductSuite.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("System.Root.Dir.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Languages.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("DateCreation.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("DateModification.Label")}.ToList()) Debug.WriteLine("[GetImageInformation] Exporting information to contents...") For Each ImageInfo As DismImageInfo In ImageInfoCollection Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Getting image information... (image " & ImageInfoCollection.IndexOf(ImageInfo) + 1 & " of " & ImageInfoCollection.Count & ")" - Case "ESN" - msg = "Obteniendo información de la imagen... (imagen " & ImageInfoCollection.IndexOf(ImageInfo) + 1 & " de " & ImageInfoCollection.Count & ")" - Case "FRA" - msg = "Obtention des informations sur l'image en cours... (image " & ImageInfoCollection.IndexOf(ImageInfo) + 1 & " de " & ImageInfoCollection.Count & ")" - Case "PTB", "PTG" - msg = "Obter informações sobre a imagem... (imagem " & ImageInfoCollection.IndexOf(ImageInfo) + 1 & " de " & ImageInfoCollection.Count & ")" - Case "ITA" - msg = "Verifica informazioni immagine... (immagine " & ImageInfoCollection.IndexOf(ImageInfo) + 1 & " di " & ImageInfoCollection.Count & ")" - End Select - Case 1 - msg = "Getting image information... (image " & ImageInfoCollection.IndexOf(ImageInfo) + 1 & " of " & ImageInfoCollection.Count & ")" - Case 2 - msg = "Obteniendo información de la imagen... (imagen " & ImageInfoCollection.IndexOf(ImageInfo) + 1 & " de " & ImageInfoCollection.Count & ")" - Case 3 - msg = "Obtention des informations sur l'image en cours... (image " & ImageInfoCollection.IndexOf(ImageInfo) + 1 & " de " & ImageInfoCollection.Count & ")" - Case 4 - msg = "Obter informações sobre a imagem... (imagem " & ImageInfoCollection.IndexOf(ImageInfo) + 1 & " de " & ImageInfoCollection.Count & ")" - Case 5 - msg = "Verifica informazioni immagine... (immagine " & ImageInfoCollection.IndexOf(ImageInfo) + 1 & " di " & ImageInfoCollection.Count & ")" - End Select + msg = LocalizationService.ForSection("ImageInfoSave.Image").Format("Getting.Image.Message", ImageInfoCollection.IndexOf(ImageInfo) + 1, ImageInfoCollection.Count) Dim languages As String = "
    " For Each language In ImageInfo.Languages - languages &= "
  • " & language.DisplayName & If(ImageInfo.DefaultLanguage.Name = language.Name, " (default)", "") & "
  • " + languages &= "
  • " & language.DisplayName & If(ImageInfo.DefaultLanguage.Name = language.Name, LocalizationService.ForSection("ImageInfoSave.Report")("Default.Label"), "") & "
  • " Next languages &= "
" ReportChanges(msg, (ImageInfoCollection.IndexOf(ImageInfo) / ImageInfoCollection.Count) * 100) Contents &= GetTableRow(New String() {ImageInfo.ProductVersion.ToString(), ImageInfo.ImageName, ImageInfo.ImageDescription, - ImageInfo.ImageSize.ToString("N0") & " bytes (~" & Converters.BytesToReadableSize(ImageInfo.ImageSize) & ")", + ImageInfo.ImageSize.ToString("N0") & LocalizationService.ForSection("ImageInfoSave.Report")("Bytes.Label") & Converters.BytesToReadableSize(ImageInfo.ImageSize) & ")", Casters.CastDismArchitecture(ImageInfo.Architecture), - If(ImageInfo.Hal <> "", ImageInfo.Hal, "Undefined by the image"), + If(ImageInfo.Hal <> "", ImageInfo.Hal, LocalizationService.ForSection("ImageInfoSave.Report")("UndefinedImage.Label")), ImageInfo.ProductVersion.Revision, ImageInfo.SpLevel, ImageInfo.InstallationType, @@ -188,73 +166,11 @@ Public Class ImgInfoSaveDlg Private Sub GetPackageInformation(GetEverything As Boolean) Dim InstalledPkgInfo As DismPackageCollection = Nothing Dim msg As String() = New String(2) {"", "", ""} - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg(0) = "Preparing package information processes..." - msg(1) = "The program has obtained basic information of the installed packages of this image. You can also get complete information of such packages and save it in the report." & CrLf & CrLf & - "Do note that this will take longer depending on the number of installed packages." & CrLf & CrLf & - "Do you want to get this information and save it in the report?" - msg(2) = "Package information" - Case "ESN" - msg(0) = "Preparando procesos de información de paquetes..." - msg(1) = "El programa ha obtenido información básica de los paquetes instalados en esta imagen. También puede obtener información completa de dichos paquetes y guardarla en el informe." & CrLf & CrLf & - "Dese cuenta de que esto tardará más, dependiendo del número de paquetes instalados." & CrLf & CrLf & - "¿Desea obtener esta información y guardarla en el informe?" - msg(2) = "Información de paquetes" - Case "FRA" - msg(0) = "Préparation des processus d'information sur les paquets en cours..." - msg(1) = "Le programme a obtenu des informations basiques sur les paquets installés sur cette image. Vous pouvez également obtenir des informations complètes sur ces paquets et les enregistrer dans le rapport." & CrLf & CrLf & - "Notez que cette opération peut prendre plus de temps en fonction du nombre de paquets installés." & CrLf & CrLf & - "Souhaitez-vous obtenir ces informations et les enregistrer dans le rapport ?" - msg(2) = "Informations sur les paquets" - Case "PTB", "PTG" - msg(0) = "A preparar processos de informação de pacotes..." - msg(1) = "O programa obteve informações básicas sobre os pacotes instalados nesta imagem. Também pode obter informações completas sobre esses pacotes e guardá-las no relatório." & CrLf & CrLf & - "Tem em atenção que isto pode demorar mais tempo, dependendo do número de pacotes instalados." & CrLf & CrLf & - "Deseja obter esta informação e guardá-la no relatório?" - msg(2) = "Informações do pacote" - Case "ITA" - msg(0) = "Preparazione processi verifica informazioni pacchetti..." - msg(1) = "Il programma ha verificato le informazioni di base sui pacchetti installati in questa immagine. È anche possibile avere informazioni complete su tali pacchetti e salvarle nel rapporto." & CrLf & CrLf & - "Nota che questa operazione richiederà più tempo a seconda del numero di pacchetti installati." & CrLf & CrLf & - "Vuoi avere queste informazioni e salvarle nel rapporto?" - msg(2) = "Informazioni pacchetto" - End Select - Case 1 - msg(0) = "Preparing package information processes..." - msg(1) = "The program has obtained basic information of the installed packages of this image. You can also get complete information of such packages and save it in the report." & CrLf & CrLf & - "Do note that this will take longer depending on the number of installed packages." & CrLf & CrLf & - "Do you want to get this information and save it in the report?" - msg(2) = "Package information" - Case 2 - msg(0) = "Preparando procesos de información de paquetes..." - msg(1) = "El programa ha obtenido información básica de los paquetes instalados en esta imagen. También puede obtener información completa de dichos paquetes y guardarla en el informe." & CrLf & CrLf & - "Dese cuenta de que esto tardará más, dependiendo del número de paquetes instalados." & CrLf & CrLf & - "¿Desea obtener esta información y guardarla en el informe?" - msg(2) = "Información de paquetes" - Case 3 - msg(0) = "Préparation des processus d'information sur les paquets en cours..." - msg(1) = "Le programme a obtenu des informations basiques sur les paquets installés sur cette image. Vous pouvez également obtenir des informations complètes sur ces paquets et les enregistrer dans le rapport." & CrLf & CrLf & - "Notez que cette opération peut prendre plus de temps en fonction du nombre de paquets installés." & CrLf & CrLf & - "Souhaitez-vous obtenir ces informations et les enregistrer dans le rapport ?" - msg(2) = "Informations sur les paquets" - Case 4 - msg(0) = "A preparar processos de informação de pacotes..." - msg(1) = "O programa obteve informações básicas sobre os pacotes instalados nesta imagem. Também pode obter informações completas sobre esses pacotes e guardá-las no relatório." & CrLf & CrLf & - "Tem em atenção que isto pode demorar mais tempo, dependendo do número de pacotes instalados." & CrLf & CrLf & - "Deseja obter esta informação e guardá-la no relatório?" - msg(2) = "Informações do pacote" - Case 5 - msg(0) = "Preparazione processi verifica informazioni pacchetti..." - msg(1) = "Il programma ha verificato le informazioni di base sui pacchetti installati in questa immagine. È anche possibile avere informazioni complete su tali pacchetti e salvarle nel rapporto." & CrLf & CrLf & - "Nota che questa operazione richiederà più tempo a seconda del numero di pacchetti installati." & CrLf & CrLf & - "Vuoi ottenere queste informazioni e salvarle nel rapporto?" - msg(2) = "Informazioni pacchetto" - End Select - Contents &= GetHeader("Package information", HeaderSize.Header2) & CrLf & - GetListItems(New String() {"Image file to get information from: " & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, "active installation")}.ToList()) & CrLf + msg(0) = LocalizationService.ForSection("ImgInfo.Packages")("Preparing.Package.Message") + msg(1) = LocalizationService.ForSection("ImageInfoSave.Packages")("Basic.Ready.Message") & LocalizationService.ForSection("ImageInfoSave.Packages")("May.Take.Long.Message") & CrLf & CrLf & LocalizationService.ForSection("ImageInfoSave.Packages")("Prompt.Label") + msg(2) = LocalizationService.ForSection("ImageInfoSave.Packages")("PackageInfo.Message") + Contents &= GetHeader(LocalizationService.ForSection("ImageInfoSave.Report")("PackageInfo.Label"), HeaderSize.Header2) & CrLf & + GetListItems(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("ImageFile.Get.Label") & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, LocalizationService.ForSection("ImageInfoSave.Report")("Active.Install.Label.Label"))}.ToList()) & CrLf Debug.WriteLine("[GetPackageInformation] Starting task...") Try Debug.WriteLine("[GetPackageInformation] Starting API...") @@ -265,85 +181,37 @@ Public Class ImgInfoSaveDlg Debug.WriteLine("[GetPackageInformation] Getting basic package information...") ReportChanges(msg(0), 5) InstalledPkgInfo = DismApi.GetPackages(imgSession) - Contents &= GetParagraph("Information summary for " & InstalledPkgInfo.Count & " package(s):", ParagraphStyle.Bold) & CrLf - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg(0) = "Packages have been obtained" - Case "ESN" - msg(0) = "Los paquetes han sido obtenidos" - Case "FRA" - msg(0) = "Des paquets ont été obtenus" - Case "PTB", "PTG" - msg(0) = "Os pacotes foram obtidos" - Case "ITA" - msg(0) = "I pacchetti sono stati acquisiti" - End Select - Case 1 - msg(0) = "Packages have been obtained" - Case 2 - msg(0) = "Los paquetes han sido obtenidos" - Case 3 - msg(0) = "Des paquets ont été obtenus" - Case 4 - msg(0) = "Os pacotes foram obtidos" - Case 5 - msg(0) = "I pacchetti sono stati acquisiti" - End Select + Contents &= GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("InfoSummary.Label") & InstalledPkgInfo.Count & LocalizationService.ForSection("ImageInfoSave.Report")("PackageS.Label"), ParagraphStyle.Bold) & CrLf + msg(0) = LocalizationService.ForSection("ImageInfoSave.Packages")("PackagesObtained.Message") ReportChanges(msg(0), 10) Dim pkgCustomPropsList As String = "
    " Dim pkgFeaturesList As String = "
      " If GetEverything Then - Contents &= CrLf & GetTableHeader(New String() {"Package name", - "Applicable?", - "Copyright", - "Company", - "Creation time", - "Description", - "Install client", - "Install package name", - "Install time", - "Last update time", - "Display name", - "Product name", - "Product version", - "Release type", - "Restart required?", - "Support information", - "Package state", - "Boot up required?", - "Capability identity", - "Custom properties", - "Features"}. + Contents &= CrLf & GetTableHeader(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("PackageName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Applicable.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Copyright.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Company.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("CreationTime.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Description"), + LocalizationService.ForSection("ImageInfoSave.Report")("InstallClient.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Install.Package.Name.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("InstallTime.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Last.Update.Time.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("DisplayName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ProductName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ProductVersion.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ReleaseType.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("RestartRequired.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("SupportInfo.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("PackageState.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Boot.Up.Required.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Capability.Identity.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("CustomProps.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Features.Label")}. ToList()) Debug.WriteLine("[GetPackageInformation] Getting complete package information...") For Each installedPackage As DismPackage In InstalledPkgInfo - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg(0) = "Getting information of packages... (package " & InstalledPkgInfo.IndexOf(installedPackage) + 1 & " of " & InstalledPkgInfo.Count & ")" - Case "ESN" - msg(0) = "Obteniendo información de paquetes... (paquete " & InstalledPkgInfo.IndexOf(installedPackage) + 1 & " de " & InstalledPkgInfo.Count & ")" - Case "FRA" - msg(0) = "Obtention des informations sur les paquets en cours... (paquet " & InstalledPkgInfo.IndexOf(installedPackage) + 1 & " de " & InstalledPkgInfo.Count & ")" - Case "PTB", "PTG" - msg(0) = "Obter informações sobre os pacotes... (pacote " & InstalledPkgInfo.IndexOf(installedPackage) + 1 & " de " & InstalledPkgInfo.Count & ")" - Case "ITA" - msg(0) = "Verifica informazioni pacchetti... (pacchetto " & InstalledPkgInfo.IndexOf(installedPackage) + 1 & " di " & InstalledPkgInfo.Count & ")" - End Select - Case 1 - msg(0) = "Getting information of packages... (package " & InstalledPkgInfo.IndexOf(installedPackage) + 1 & " of " & InstalledPkgInfo.Count & ")" - Case 2 - msg(0) = "Obteniendo información de paquetes... (paquete " & InstalledPkgInfo.IndexOf(installedPackage) + 1 & " de " & InstalledPkgInfo.Count & ")" - Case 3 - msg(0) = "Obtention des informations sur les paquets en cours... (paquet " & InstalledPkgInfo.IndexOf(installedPackage) + 1 & " de " & InstalledPkgInfo.Count & ")" - Case 4 - msg(0) = "Obter informações sobre os pacotes... (pacote " & InstalledPkgInfo.IndexOf(installedPackage) + 1 & " de " & InstalledPkgInfo.Count & ")" - Case 5 - msg(0) = "Verifica informazioni pacchetti... (pacchetto " & InstalledPkgInfo.IndexOf(installedPackage) + 1 & " di " & InstalledPkgInfo.Count & ")" - End Select + msg(0) = LocalizationService.ForSection("ImgInfo.Packages").Format("Loading.Package.Message", InstalledPkgInfo.IndexOf(installedPackage) + 1, InstalledPkgInfo.Count) ReportChanges(msg(0), (InstalledPkgInfo.IndexOf(installedPackage) / InstalledPkgInfo.Count) * 100) Dim pkgInfoEx As DismPackageInfoEx = Nothing Dim pkgInfo As DismPackageInfo = Nothing @@ -365,7 +233,7 @@ Public Class ImgInfoSaveDlg Next pkgCustomPropsList &= "
    " Else - pkgCustomPropsList = "None" + pkgCustomPropsList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If If pkgInfoEx.Features.Count > 0 Then Dim pkgFeats As DismFeatureCollection = pkgInfoEx.Features @@ -374,18 +242,18 @@ Public Class ImgInfoSaveDlg Next pkgFeaturesList &= "
" Else - pkgFeaturesList = "None" + pkgFeaturesList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If Contents &= GetTableRow(New String() {CodeBlockChar & pkgInfoEx.PackageName & CodeBlockChar, - Casters.CastDismApplicabilityStatus(pkgInfoEx.Applicable), + Casters.Applicability(pkgInfoEx.Applicable), pkgInfoEx.Copyright, pkgInfoEx.Company, - pkgInfoEx.CreationTime & If(pkgInfoEx.CreationTime.Year < 1900, " - **Preposterous time and date**", ""), + pkgInfoEx.CreationTime & If(pkgInfoEx.CreationTime.Year < 1900, LocalizationService.ForSection("ImageInfoSave.Report")("Preposterous.Time.Date.Label"), ""), pkgInfoEx.Description, pkgInfoEx.InstallClient, CodeBlockChar & pkgInfoEx.InstallPackageName & CodeBlockChar, pkgInfoEx.InstallTime, - pkgInfoEx.LastUpdateTime & If(pkgInfoEx.LastUpdateTime.Year < 1900, " - **Preposterous time and date**", ""), + pkgInfoEx.LastUpdateTime & If(pkgInfoEx.LastUpdateTime.Year < 1900, LocalizationService.ForSection("ImageInfoSave.Report")("Preposterous.Time.Date.Label"), ""), pkgInfoEx.DisplayName, pkgInfoEx.ProductName, pkgInfoEx.ProductVersion.ToString(), @@ -393,7 +261,7 @@ Public Class ImgInfoSaveDlg Casters.CastDismRestartType(pkgInfoEx.RestartRequired), pkgInfoEx.SupportInformation, Casters.CastDismPackageState(pkgInfoEx.PackageState), - Casters.CastDismFullyOfflineInstallationType(pkgInfoEx.FullyOffline), + Casters.OfflineInstallType(pkgInfoEx.FullyOffline), CodeBlockChar & pkgInfoEx.CapabilityId & CodeBlockChar, pkgCustomPropsList, pkgFeaturesList}. @@ -408,7 +276,7 @@ Public Class ImgInfoSaveDlg Next pkgCustomPropsList &= "" Else - pkgCustomPropsList = "None" + pkgCustomPropsList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If If pkgInfo.Features.Count > 0 Then Dim pkgFeats As DismFeatureCollection = pkgInfo.Features @@ -417,18 +285,18 @@ Public Class ImgInfoSaveDlg Next pkgFeaturesList &= "" Else - pkgFeaturesList = "None" + pkgFeaturesList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If Contents &= GetTableRow(New String() {CodeBlockChar & pkgInfo.PackageName & CodeBlockChar, - Casters.CastDismApplicabilityStatus(pkgInfo.Applicable), + Casters.Applicability(pkgInfo.Applicable), pkgInfo.Copyright, pkgInfo.Company, - pkgInfo.CreationTime & If(pkgInfo.CreationTime.Year < 1900, " - **Preposterous time and date**", ""), + pkgInfo.CreationTime & If(pkgInfo.CreationTime.Year < 1900, LocalizationService.ForSection("ImageInfoSave.Report")("Preposterous.Time.Date.Label"), ""), pkgInfo.Description, pkgInfo.InstallClient, CodeBlockChar & pkgInfo.InstallPackageName & CodeBlockChar, pkgInfo.InstallTime, - pkgInfo.LastUpdateTime & If(pkgInfo.LastUpdateTime.Year < 1900, " - **Preposterous time and date**", ""), + pkgInfo.LastUpdateTime & If(pkgInfo.LastUpdateTime.Year < 1900, LocalizationService.ForSection("ImageInfoSave.Report")("Preposterous.Time.Date.Label"), ""), pkgInfo.DisplayName, pkgInfo.ProductName, pkgInfo.ProductVersion.ToString(), @@ -436,45 +304,21 @@ Public Class ImgInfoSaveDlg Casters.CastDismRestartType(pkgInfo.RestartRequired), pkgInfo.SupportInformation, Casters.CastDismPackageState(pkgInfo.PackageState), - Casters.CastDismFullyOfflineInstallationType(pkgInfo.FullyOffline), - "None", + Casters.OfflineInstallType(pkgInfo.FullyOffline), + LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), pkgCustomPropsList, pkgFeaturesList}. ToList()) End If Next - Contents &= CrLf & GetParagraph("Complete package information has been gathered.") & CrLf + Contents &= CrLf & GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("PackageInfo.Ready.Label")) & CrLf Else - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg(0) = "Saving installed packages..." - Case "ESN" - msg(0) = "Guardando paquetes instalados..." - Case "FRA" - msg(0) = "Sauvegarde des paquets installés en cours..." - Case "PTB", "PTG" - msg(0) = "Guardar os pacotes instalados..." - Case "ITA" - msg(0) = "Salvataggio pacchetti installati..." - End Select - Case 1 - msg(0) = "Saving installed packages..." - Case 2 - msg(0) = "Guardando paquetes instalados..." - Case 3 - msg(0) = "Sauvegarde des paquets installés en cours..." - Case 4 - msg(0) = "Guardar os pacotes instalados..." - Case 5 - msg(0) = "Salvataggio pacchetti installati..." - End Select + msg(0) = LocalizationService.ForSection("ImageInfoSave.Packages")("SavePackages.Message") ReportChanges(msg(0), 50) - Contents &= GetTableHeader(New String() {"Package name", - "Package state", - "Package release type", - "Package install time"}. + Contents &= GetTableHeader(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("PackageName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("PackageState.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Package.Release.Type.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Package.Install.Time.Label")}. ToList()) For Each installedPackage As DismPackage In InstalledPkgInfo Contents &= GetTableRow(New String() {CodeBlockChar & installedPackage.PackageName & CodeBlockChar, @@ -483,7 +327,7 @@ Public Class ImgInfoSaveDlg installedPackage.InstallTime}. ToList()) Next - Contents &= CrLf & GetParagraph("Complete package information has not been gathered") & CrLf + Contents &= CrLf & GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("PackageInfo.Missing.Label")) & CrLf End If End Using Catch ex As Exception @@ -496,92 +340,44 @@ Public Class ImgInfoSaveDlg Private Sub GetPackageFileInformation() Dim msg As String = "" - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Preparing package information processes..." - Case "ESN" - msg = "Preparando procesos de información de paquetes..." - Case "FRA" - msg = "Préparation des processus d'information des paquets en cours..." - Case "PTB", "PTG" - msg = "A preparar processos de informação sobre pacotes..." - Case "ITA" - msg = "Preparazione processi verifica informazioni pacchetti..." - End Select - Case 1 - msg = "Preparing package information processes..." - Case 2 - msg = "Preparando procesos de información de paquetes..." - Case 3 - msg = "Préparation des processus d'information des paquets en cours..." - Case 4 - msg = "A preparar processos de informação sobre pacotes..." - Case 5 - msg = "Preparazione processi verifica informazioni pacchetti..." - End Select - Contents &= GetHeader("Package file information", HeaderSize.Header2) & CrLf & - GetListItems(New String() {"Image file to get information from: " & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, "active installation")}.ToList()) & CrLf + msg = LocalizationService.ForSection("ImgInfo.PkgFiles")("Preparing.Package.Message") + Contents &= GetHeader(LocalizationService.ForSection("ImageInfoSave.Report")("Package.File.Label"), HeaderSize.Header2) & CrLf & + GetListItems(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("ImageFile.Get.Label") & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, LocalizationService.ForSection("ImageInfoSave.Report")("Active.Install.Label.Label"))}.ToList()) & CrLf Debug.WriteLine("[GetPackageFileInformation] Starting task...") Try Debug.WriteLine("[GetPackageFileInformation] Starting API...") DismApi.Initialize(DismLogLevel.LogErrors) Debug.WriteLine("[GetPackageFileInformation] Creating image session...") ReportChanges(msg, 0) - Contents &= GetParagraph("Amount of package files to get information about: " & PackageFiles.Count, ParagraphStyle.Bold) - Contents &= CrLf & GetTableHeader(New String() {"Package name", - "Applicable?", - "Copyright", - "Company", - "Creation time", - "Description", - "Install client", - "Install package name", - "Install time", - "Last update time", - "Display name", - "Product name", - "Product version", - "Release type", - "Restart required?", - "Support information", - "Package state", - "Boot up required?", - "Capability identity", - "Custom properties", - "Features"}. + Contents &= GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("Amount.Package.Files.Label") & PackageFiles.Count, ParagraphStyle.Bold) + Contents &= CrLf & GetTableHeader(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("PackageName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Applicable.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Copyright.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Company.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("CreationTime.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Description"), + LocalizationService.ForSection("ImageInfoSave.Report")("InstallClient.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Install.Package.Name.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("InstallTime.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Last.Update.Time.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("DisplayName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ProductName.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ProductVersion.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("ReleaseType.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("RestartRequired.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("SupportInfo.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("PackageState.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Boot.Up.Required.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Capability.Identity.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("CustomProps.Label"), + LocalizationService.ForSection("ImageInfoSave.Report")("Features.Label")}. ToList()) Dim pkgCustomPropsList As String = "
    " Dim pkgFeaturesList As String = "
      " Using imgSession As DismSession = If(OnlineMode, DismApi.OpenOnlineSession(), DismApi.OpenOfflineSession(ImgMountDir)) For Each pkgFile In PackageFiles Try - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg = "Getting information from package files... (package file " & PackageFiles.IndexOf(pkgFile) + 1 & " of " & PackageFiles.Count & ")" - Case "ESN" - msg = "Obteniendo información de archivos de paquetes... (archivo de paquete " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case "FRA" - msg = "Obtention des informations des fichiers paquets en cours... (fichier paquet " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case "PTB", "PTG" - msg = "Obter informações dos ficheiros do pacote... (ficheiro do pacote " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case "ITA" - msg = "Verifica informazioni file pacchetto... (file pacchetto " & PackageFiles.IndexOf(pkgFile) + 1 & " di " & PackageFiles.Count & ")" - End Select - Case 1 - msg = "Getting information from package files... (package file " & PackageFiles.IndexOf(pkgFile) + 1 & " of " & PackageFiles.Count & ")" - Case 2 - msg = "Obteniendo información de archivos de paquetes... (archivo de paquete " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case 3 - msg = "Obtention des informations des fichiers paquets en cours... (fichier paquet " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case 4 - msg = "Obter informações dos ficheiros do pacote... (ficheiro do pacote " & PackageFiles.IndexOf(pkgFile) + 1 & " de " & PackageFiles.Count & ")" - Case 5 - msg = "Verifica informazioni file pacchetto... (file pacchetto " & PackageFiles.IndexOf(pkgFile) + 1 & " di " & PackageFiles.Count & ")" - End Select + msg = LocalizationService.ForSection("ImgInfo.PackageFiles").Format("Loading.Package.Message", PackageFiles.IndexOf(pkgFile) + 1, PackageFiles.Count) ReportChanges(msg, (PackageFiles.IndexOf(pkgFile) / PackageFiles.Count) * 100) If File.Exists(pkgFile) Then Dim pkgInfoEx As DismPackageInfoEx = Nothing @@ -604,7 +400,7 @@ Public Class ImgInfoSaveDlg Next pkgCustomPropsList &= "
    " Else - pkgCustomPropsList = "None" + pkgCustomPropsList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If If pkgInfoEx.Features.Count > 0 Then Dim pkgFeats As DismFeatureCollection = pkgInfoEx.Features @@ -613,16 +409,16 @@ Public Class ImgInfoSaveDlg Next pkgFeaturesList &= "
" Else - pkgFeaturesList = "None" + pkgFeaturesList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If Contents &= GetTableRow(New String() {CodeBlockChar & pkgInfoEx.PackageName & CodeBlockChar, - Casters.CastDismApplicabilityStatus(pkgInfoEx.Applicable), + Casters.Applicability(pkgInfoEx.Applicable), pkgInfoEx.Copyright, pkgInfoEx.Company, pkgInfoEx.CreationTime, pkgInfoEx.Description, - If(pkgInfoEx.InstallClient = "", "None", pkgInfoEx.InstallClient), - If(pkgInfoEx.InstallPackageName = "", "None", CodeBlockChar & pkgInfoEx.InstallPackageName & CodeBlockChar), + If(pkgInfoEx.InstallClient = "", LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), pkgInfoEx.InstallClient), + If(pkgInfoEx.InstallPackageName = "", LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), CodeBlockChar & pkgInfoEx.InstallPackageName & CodeBlockChar), pkgInfoEx.InstallTime, pkgInfoEx.LastUpdateTime, pkgInfoEx.DisplayName, @@ -632,8 +428,8 @@ Public Class ImgInfoSaveDlg Casters.CastDismRestartType(pkgInfoEx.RestartRequired), pkgInfoEx.SupportInformation, Casters.CastDismPackageState(pkgInfoEx.PackageState), - Casters.CastDismFullyOfflineInstallationType(pkgInfoEx.FullyOffline), - If(pkgInfoEx.CapabilityId = "", "None", CodeBlockChar & pkgInfoEx.CapabilityId & CodeBlockChar), + Casters.OfflineInstallType(pkgInfoEx.FullyOffline), + If(pkgInfoEx.CapabilityId = "", LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), CodeBlockChar & pkgInfoEx.CapabilityId & CodeBlockChar), pkgCustomPropsList, pkgFeaturesList}.ToList()) ElseIf pkgInfo IsNot Nothing Then @@ -646,7 +442,7 @@ Public Class ImgInfoSaveDlg Next pkgCustomPropsList &= "" Else - pkgCustomPropsList = "None" + pkgCustomPropsList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If If pkgInfo.Features.Count > 0 Then Dim pkgFeats As DismFeatureCollection = pkgInfo.Features @@ -655,16 +451,16 @@ Public Class ImgInfoSaveDlg Next pkgFeaturesList &= "" Else - pkgFeaturesList = "None" + pkgFeaturesList = LocalizationService.ForSection("ImageInfoSave.Report")("None.Label") End If Contents &= GetTableRow(New String() {CodeBlockChar & pkgInfo.PackageName & CodeBlockChar, - Casters.CastDismApplicabilityStatus(pkgInfo.Applicable), + Casters.Applicability(pkgInfo.Applicable), pkgInfo.Copyright, pkgInfo.Company, pkgInfo.CreationTime, pkgInfo.Description, - If(pkgInfo.InstallClient = "", "None", pkgInfo.InstallClient), - If(pkgInfo.InstallPackageName = "", "None", CodeBlockChar & pkgInfo.InstallPackageName & CodeBlockChar), + If(pkgInfo.InstallClient = "", LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), pkgInfo.InstallClient), + If(pkgInfo.InstallPackageName = "", LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), CodeBlockChar & pkgInfo.InstallPackageName & CodeBlockChar), pkgInfo.InstallTime, pkgInfo.LastUpdateTime, pkgInfo.DisplayName, @@ -674,8 +470,8 @@ Public Class ImgInfoSaveDlg Casters.CastDismRestartType(pkgInfo.RestartRequired), pkgInfo.SupportInformation, Casters.CastDismPackageState(pkgInfo.PackageState), - Casters.CastDismFullyOfflineInstallationType(pkgInfo.FullyOffline), - "None", + Casters.OfflineInstallType(pkgInfo.FullyOffline), + LocalizationService.ForSection("ImageInfoSave.Report")("None.Label"), pkgCustomPropsList, pkgFeaturesList}.ToList()) End If @@ -697,73 +493,11 @@ Public Class ImgInfoSaveDlg Private Sub GetFeatureInformation(GetEverything As Boolean) Dim InstalledFeatInfo As DismFeatureCollection = Nothing Dim msg As String() = New String(2) {"", "", ""} - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg(0) = "Preparing feature information processes..." - msg(1) = "The program has obtained basic information of the installed features of this image. You can also get complete information of such features and save it in the report." & CrLf & CrLf & - "Do note that this will take longer depending on the number of installed features." & CrLf & CrLf & - "Do you want to get this information and save it in the report?" - msg(2) = "Feature information" - Case "ESN" - msg(0) = "Preparando procesos de información de características..." - msg(1) = "El programa ha obtenido información básica de las características instaladas en esta imagen. También puede obtener información completa de dichas características y guardarla en el informe." & CrLf & CrLf & - "Dese cuenta de que esto tardará más, dependiendo del número de características instaladas." & CrLf & CrLf & - "¿Desea obtener esta información y guardarla en el informe?" - msg(2) = "Información de características" - Case "FRA" - msg(0) = "Préparation des processus d'information sur les caractéristiques en cours..." - msg(1) = "Le programme a obtenu des informations basiques sur les caractéristiques installées sur cette image. Vous pouvez également obtenir des informations complètes sur ces caractéristiques et les enregistrer dans le rapport." & CrLf & CrLf & - "Notez que cette opération peut prendre plus de temps en fonction du nombre de caractéristiques installées." & CrLf & CrLf & - "Souhaitez-vous obtenir ces informations et les enregistrer dans le rapport ?" - msg(2) = "Informations sur les caractéristiques" - Case "PTB", "PTG" - msg(0) = "A preparar processos de informação de características..." - msg(1) = "O programa obteve informações básicas sobre as características instaladas desta imagem. Também pode obter informações completas sobre essas características e guardá-las no relatório." & CrLf & CrLf & - "Tenha em atenção que isto pode demorar mais tempo, dependendo do número de características instaladas." & CrLf & CrLf & - "Pretende obter esta informação e guardá-la no relatório?" - msg(2) = "Informação sobre as características" - Case "ITA" - msg(0) = "Preparazione processi verifica informazioni funzionalità..." - msg(1) = "Il programma ha verificato le informazioni di base sulle funzionalità installate in questa immagine. È possibile avere informazioni complete su tali funzionalità e salvarle nel rapporto." & CrLf & CrLf & - "Tieni presente che questa operazione richiederà più tempo a seconda del numero di funzionalità installate." & CrLf & CrLf & - "Vuoi avere queste informazioni e salvarle nel rapporto?" - msg(2) = "Informazioni funzionalità" - End Select - Case 1 - msg(0) = "Preparing feature information processes..." - msg(1) = "The program has obtained basic information of the installed features of this image. You can also get complete information of such features and save it in the report." & CrLf & CrLf & - "Do note that this will take longer depending on the number of installed features." & CrLf & CrLf & - "Do you want to get this information and save it in the report?" - msg(2) = "Feature information" - Case 2 - msg(0) = "Preparando procesos de información de características..." - msg(1) = "El programa ha obtenido información básica de las características instaladas en esta imagen. También puede obtener información completa de dichos características y guardarla en el informe." & CrLf & CrLf & - "Dese cuenta de que esto tardará más, dependiendo del número de características instalados." & CrLf & CrLf & - "¿Desea obtener esta información y guardarla en el informe?" - msg(2) = "Información de características" - Case 3 - msg(0) = "Préparation des processus d'information sur les caractéristiques en cours..." - msg(1) = "Le programme a obtenu des informations basiques sur les caractéristiques installées sur cette image. Vous pouvez également obtenir des informations complètes sur ces caractéristiques et les enregistrer dans le rapport." & CrLf & CrLf & - "Notez que cette opération peut prendre plus de temps en fonction du nombre de caractéristiques installées." & CrLf & CrLf & - "Souhaitez-vous obtenir ces informations et les enregistrer dans le rapport ?" - msg(2) = "Informations sur les caractéristiques" - Case 4 - msg(0) = "A preparar processos de informação de características..." - msg(1) = "O programa obteve informações básicas sobre as características instaladas desta imagem. Também pode obter informações completas sobre essas características e guardá-las no relatório." & CrLf & CrLf & - "Tenha em atenção que isto pode demorar mais tempo, dependendo do número de características instaladas." & CrLf & CrLf & - "Pretende obter esta informação e guardá-la no relatório?" - msg(2) = "Informação sobre as características" - Case 5 - msg(0) = "Preparazione processi verifica informazioni funzionalità..." - msg(1) = "Il programma ha verificato le informazioni di base sulle funzionalità installate in questa immagine. È possibile avere informazioni complete su tali funzionalità e salvarle nel rapporto." & CrLf & CrLf & - "Tieni presente che questa operazione richiederà più tempo a seconda del numero di funzionalità installate." & CrLf & CrLf & - "Vuoi avere queste informazioni e salvarle nel rapporto?" - msg(2) = "Informazioni funzionalità" - End Select - Contents &= GetHeader("Feature information", HeaderSize.Header2) & CrLf & - GetListItems(New String() {"Image file to get information from: " & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, "active installation")}.ToList()) & CrLf + msg(0) = LocalizationService.ForSection("ImgInfo.Features")("Preparing.Feature.Message") + msg(1) = LocalizationService.ForSection("ImageInfoSave.Features")("Basic.Ready.Message") & LocalizationService.ForSection("ImageInfoSave.Features")("May.Take.Long.Message") & CrLf & CrLf & LocalizationService.ForSection("ImageInfoSave.Features")("Prompt.Label") + msg(2) = LocalizationService.ForSection("ImageInfoSave.Features")("FeatureInfo.Message") + Contents &= GetHeader(LocalizationService.ForSection("ImageInfoSave.Report")("FeatureInfo.Label"), HeaderSize.Header2) & CrLf & + GetListItems(New String() {LocalizationService.ForSection("ImageInfoSave.Report")("ImageFile.Get.Label") & If(SourceImage <> "" And Not OnlineMode, Quote & SourceImage & Quote, LocalizationService.ForSection("ImageInfoSave.Report")("Active.Install.Label.Label"))}.ToList()) & CrLf Debug.WriteLine("[GetFeatureInformation] Starting task...") Try Debug.WriteLine("[GetFeatureInformation] Starting API...") @@ -774,70 +508,22 @@ Public Class ImgInfoSaveDlg Debug.WriteLine("[GetFeatureInformation] Getting basic feature information...") ReportChanges(msg(0), 5) InstalledFeatInfo = DismApi.GetFeatures(imgSession) - Contents &= GetParagraph("Information summary for " & InstalledFeatInfo.Count & " feature(s):", ParagraphStyle.Bold) & CrLf - Select Case MainForm.Language - Case 0 - Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName - Case "ENU", "ENG" - msg(0) = "Features have been obtained" - Case "ESN" - msg(0) = "Las características han sido obtenidas" - Case "FRA" - msg(0) = "Des caractéristiques ont été obtenues" - Case "PTB", "PTG" - msg(0) = "As características foram obtidas" - Case "ITA" - msg(0) = "Le funzionalità sono state acquisite" - End Select - Case 1 - msg(0) = "Features have been obtained" - Case 2 - msg(0) = "Las características han sido obtenidas" - Case 3 - msg(0) = "Des caractéristiques ont été obtenues" - Case 4 - msg(0) = "As características foram obtidas" - Case 5 - msg(0) = "Le funzionalità sono state acquisite" - End Select + Contents &= GetParagraph(LocalizationService.ForSection("ImageInfoSave.Report")("InfoSummary.Label") & InstalledFeatInfo.Count & LocalizationService.ForSection("ImageInfoSave.Report")("FeatureCount.Suffix"), ParagraphStyle.Bold) & CrLf + msg(0) = LocalizationService.ForSection("ImageInfoSave.Features")("FeaturesObtained.Message") ReportChanges(msg(0), 10) Dim featCustomPropsList As String = "