Last active
May 4, 2023 18:40
-
-
Save RobbWatershed/1402ba275e01d31fa2ce900362a0d2e5 to your computer and use it in GitHub Desktop.
toXls.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$files_en = @{} | |
Get-ChildItem '.' -Directory | ForEach-Object { | |
$folder = $_ | |
if (!$folder.Name.StartsWith('values') -or $folder.Name.EndsWith('dp')) { return } | |
$isEN = ($folder.Name -eq "values") | |
Write-Output $folder.Name | |
Get-ChildItem $folder -File | ForEach-Object { | |
$file = $_ | |
$fileName = $file.BaseName | |
if (!$file.FullName.EndsWith('xml')) { return } | |
if ($file.FullName.EndsWith('_.xml')) { return } | |
if (!($fileName.StartsWith('strings') -or $fileName.StartsWith('array'))) { return } | |
Write-Output $file.FullName | |
$xmlFile = New-Object -Typename XML | |
$xmlFile.load($file.FullName) | |
#[xml]$xmlFile = gc $file.FullName -Encoding utf8 | |
$nodes = $xmlFile.SelectNodes("resources").ChildNodes | |
$keys_en = @{} | |
$keys_local = @{} | |
$results = @() | |
foreach($Node in $nodes){ | |
if ($Node.LocalName -eq '#comment') { continue } | |
if ($Node.LocalName -eq 'plurals') { | |
foreach($node2 in $node.ChildNodes){ | |
$key = $node.Name + "." + $Node2.quantity | |
$value_en = '' | |
if ($isEN) | |
{ | |
$keys_en.Add($key, $Node2.InnerText) | |
} else { | |
$value_en = $files_en[$fileName][$key] | |
} | |
$details = [ordered]@{ | |
Type = $Node.LocalName | |
Key = $key | |
Value_en = $value_en | |
Value = $Node2.InnerText | |
} | |
$results += New-Object PSObject -Property $details | |
$keys_local.Add($key, $Node2.InnerText) | |
} | |
} elseif ($Node.LocalName -eq 'string-array') { | |
$index = 1 | |
foreach($node2 in $node.ChildNodes){ | |
$key = $node.Name + "/" + $index | |
$index = $index + 1 | |
$value_en = '' | |
if ($isEN) | |
{ | |
$keys_en.Add($key, $Node2.InnerText) | |
} else { | |
$value_en = $files_en[$fileName][$key] | |
} | |
$details = [ordered]@{ | |
Type = $Node.LocalName | |
Key = $key | |
Value_en = $value_en | |
Value = $Node2.InnerText | |
} | |
$results += New-Object PSObject -Property $details | |
$keys_local.Add($key, $Node2.InnerText) | |
} | |
} else { | |
$key = $Node.Name | |
$value_en = '' | |
if ($isEN) { $keys_en.Add($key, $Node.InnerText) } | |
else { $value_en = $files_en[$fileName][$key] } | |
$details = [ordered]@{ | |
Type = $Node.LocalName | |
Key = $key | |
Value_en = $value_en | |
Value = $Node.InnerText | |
} | |
$results += New-Object PSObject -Property $details | |
$keys_local.Add($key, $Node.InnerText) | |
} | |
} | |
$missing = 0 | |
if (!$isEN) { | |
ForEach ($key_en in $files_en[$fileName].Keys) { | |
if (!$keys_local.ContainsKey($key_en) ) { | |
$type = 'string' | |
if ($files_en[$fileName][$key_en] -contains ".") { $type = 'plurals' } | |
$details = [ordered]@{ | |
Type = $type | |
Key = $key_en | |
Value_en = $files_en[$fileName][$key_en] | |
Value = '' | |
} | |
$results += New-Object PSObject -Property $details | |
$missing = $missing + 1 | |
} | |
} | |
} else { | |
$files_en.Add($fileName, $keys_en) | |
} | |
$finalFilename = $fileName | |
if ($missing -gt 0) { $finalFilename = $finalFilename + "_missing$missing" } | |
$results | export-csv -Path "$folder\$finalFilename.csv" -NoTypeInformation -Encoding utf8 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment