71 lines
3.2 KiB
PowerShell
71 lines
3.2 KiB
PowerShell
param(
|
|
[string]$RussianPath = "Mods/DnD 5.5e AIO Russian/Localization/Russian/russian.xml",
|
|
[string]$EnglishPath = ".cache/upstream/english.xml",
|
|
[string]$OutputDir = "build/translation-diff",
|
|
[string]$EditsPath = ""
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$getUpstreamScriptPath = Join-Path $PSScriptRoot "get-upstream-english.ps1"
|
|
$compareScriptPath = Join-Path $PSScriptRoot "compare-translation.ps1"
|
|
$applyScriptPath = Join-Path $PSScriptRoot "apply-translation-edits.ps1"
|
|
|
|
foreach ($scriptPath in @($getUpstreamScriptPath, $compareScriptPath, $applyScriptPath)) {
|
|
if (-not (Test-Path -LiteralPath $scriptPath)) {
|
|
throw "Required script was not found: '$scriptPath'."
|
|
}
|
|
}
|
|
|
|
$resolvedOutputDir = [System.IO.Path]::GetFullPath($OutputDir)
|
|
$resolvedProvidedEditsPath = ""
|
|
if (-not [string]::IsNullOrWhiteSpace($EditsPath)) {
|
|
$resolvedProvidedEditsPath = [System.IO.Path]::GetFullPath($EditsPath)
|
|
}
|
|
$workingDiffDir = Join-Path $env:TEMP ("bg3-translation-update-" + [guid]::NewGuid().ToString("N"))
|
|
New-Item -ItemType Directory -Path $workingDiffDir -Force | Out-Null
|
|
|
|
try {
|
|
& $getUpstreamScriptPath -OutputPath $EnglishPath -Force
|
|
& $compareScriptPath -EnglishPath $EnglishPath -RussianPath $RussianPath -OutputDir $workingDiffDir
|
|
|
|
New-Item -ItemType Directory -Path $resolvedOutputDir -Force | Out-Null
|
|
Get-ChildItem -LiteralPath $workingDiffDir | ForEach-Object {
|
|
$destinationPath = Join-Path $resolvedOutputDir $_.Name
|
|
if ($resolvedProvidedEditsPath -and ([System.IO.Path]::GetFullPath($destinationPath) -eq $resolvedProvidedEditsPath) -and (Test-Path -LiteralPath $resolvedProvidedEditsPath)) {
|
|
return
|
|
}
|
|
Copy-Item -LiteralPath $_.FullName -Destination $resolvedOutputDir -Recurse -Force
|
|
}
|
|
|
|
$summaryJsonPath = Join-Path $workingDiffDir "summary.json"
|
|
if (-not (Test-Path -LiteralPath $summaryJsonPath)) {
|
|
throw "Translation summary was not found: '$summaryJsonPath'."
|
|
}
|
|
|
|
$summary = Get-Content -LiteralPath $summaryJsonPath -Raw | ConvertFrom-Json -Depth 10
|
|
$hasDiff = ($summary.missingInRussianCount -gt 0) -or ($summary.versionMismatchCount -gt 0) -or ($summary.staleOnlyInRussianCount -gt 0)
|
|
|
|
if (-not $hasDiff) {
|
|
Write-Host "[update-translation.ps1] Перевод уже актуален, дополнительные действия не требуются."
|
|
return
|
|
}
|
|
|
|
$effectiveEditsPath = $EditsPath
|
|
if ([string]::IsNullOrWhiteSpace($effectiveEditsPath)) {
|
|
$effectiveEditsPath = Join-Path $resolvedOutputDir "candidates.json"
|
|
}
|
|
|
|
if (-not (Test-Path -LiteralPath $effectiveEditsPath)) {
|
|
throw "Translation changes were found. Prepare edits in '$([System.IO.Path]::GetFullPath((Join-Path $resolvedOutputDir "candidates.json")))' and rerun update with '-EditsPath'."
|
|
}
|
|
|
|
& $applyScriptPath -RussianPath $RussianPath -EditsPath $effectiveEditsPath
|
|
|
|
Write-Host "[update-translation.ps1] Обновление перевода завершено. Результат записан в '$([System.IO.Path]::GetFullPath($RussianPath))'."
|
|
} finally {
|
|
if (Test-Path -LiteralPath $workingDiffDir) {
|
|
Remove-Item -LiteralPath $workingDiffDir -Recurse -Force
|
|
}
|
|
}
|