Skip to content

Instantly share code, notes, and snippets.

@RobbWatershed
Last active May 4, 2023 18:40
Show Gist options
  • Save RobbWatershed/1402ba275e01d31fa2ce900362a0d2e5 to your computer and use it in GitHub Desktop.
Save RobbWatershed/1402ba275e01d31fa2ce900362a0d2e5 to your computer and use it in GitHub Desktop.
toXls.ps1
$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