Sådan opdaterer du dine lokaliserede strengressourcer uden at miste dine tilpassede ændringer i NopCommerce

Hvis du har drevet din NopCommerce-butik i årevis, er der stor sandsynlighed for, at du har foretaget mange tilpasninger af dine lokale strengressourcer.

På grund af dette kan import af et nyt sprogpakke føles risikabelt — ét klik, og du kan overskrive snesevis eller endda hundredvis af oversættelser, du omhyggeligt har justeret over tid.

Den officielle anbefaling fra NopCommerce er at eksportere dine nuværende lokale ressourcer, sammenligne dem manuelt med den nye sprogpakke ved hjælp af værktøjer som WinMerge, og derefter kopiere forskellene en efter en.
Denne tilgang virker, men den er langsom og fejlbehæftet, især hvis din butik har tusindvis af poster.

For at gøre denne proces nemmere og sikrere, har jeg oprettet et simpelt PowerShell-script, der sammenligner to XML-filer og fortæller dig præcis hvad der er ændret — uden brug for manuelle diff-værktøjer.

Hvad Scriptet Gør

Scriptet sammenligner to XML-filer:

  • old.xml — dine nuværende lokale strengressourcer

  • new.xml — den nyeste sprogpakke til din NopCommerce-version

Det matcher poster efter deres Name-attribut og genererer tre klare outputfiler:

added.xml

Indeholder ressourcer, der findes i den nye sprogpakke, men mangler i din nuværende.

removed.xml

Indeholder ressourcer, der findes i din nuværende installation, men ikke længere er til stede i den nye sprogpakke.

changed.xml

Indeholder ressourcer, der findes i begge filer, men har forskellige værdier (din brugerdefinerede oversættelse vs.den opdaterede version).

Dette giver dig et klart overblik over alt, der er ændret — uden at ændre noget i din butik.

Ønsker du en endnu nemmere løsning?Prøv EasyTranslate

Hvis du er åben for at bruge et lille budget for at forenkle denne opgave yderligere, så tag et kig på mit EasyTranslate plugin.
EasyTranslate plugin til flersprogede NopCommerce butikker

Med EasyTranslate kan du:

  • Se manglende og uoversatte lokale ressourcer direkte i NopCommerce admin panelet

  • Oversætte dem øjeblikkeligt ved hjælp af Google Translation API

  • Eksportere dem som XML, hvis du foretrækker manuel redigering

  • Opdage uoversat indhold i hele din butik
    (katalog, blogindlæg, nyheder, emner — alt der kan oversættes)

  • Oversætte alt dette indhold med Google på bare få klik

For butikker med mange sprog sparer EasyTranslate timer af manuelt arbejde.

Sådan bruger du PowerShell-scriptet (Windows)

Følg disse trin for sikkert at sammenligne dine nuværende oversættelser med det nyeste sprogpakke.

1.Installér PowerShell

De fleste Windows-installationer har det allerede. Hvis ikke, så download det fra Microsoft.

2. Download Scriptet

Download nop-lang-compare.ps1 og placer det i din arbejdsmappe.

3.Åbn PowerShell i din arbejdsmappe

Du har to muligheder:

Mulighed A: Brug cd-kommandoen

 
cd C:\Sti\Til\Din\Mappe


Mulighed B: Brug af Stifinder (nemmere)

Åbn din mappe → klik i adressefeltet → skriv powershell → tryk Enter.
PowerShell vil åbne direkte i den mappe.

4.

Eksporter dine nuværende lokale ressourcer

I NopCommerce Admin:

Konfiguration → Sprog → vælg et sprog → Eksporter ressourcer

Flyt den downloadede XML-fil til din arbejdsmappe og omdøb den til:

old.xml


5.Download det nyeste sprogpakke

Gå til den officielle oversættelsesside på NopCommerce hjemmesiden og download den nyeste pakke til din version.

Placer filen i din arbejdsmappe og omdøb den til:

new.xml


6.Bekræft, at alle filer er til stede

I PowerShell, kør:

dir

Du burde se:

  • nop-lang-compare.ps1

  • old.xml

  • new.xml



7.Kør Scriptet

Udfør:

.\nop-lang-compare.ps1



Scriptet vil oprette:

  • added.xml

  • removed.xml

  • changed.xml

i samme mappe.



Hvad Du Skal Gøre Med Resultaterne

✔ Importer added.xml

Sikkert at importere — det tilføjer kun manglende elementer.

✔ Gennemgå changed.xml

Beslut hvilke værdier du vil beholde:

  • Hvis indgangen indeholder din brugerdefinerede oversættelse → slet den indgang fra changed.xml

  • Hvis du vil have den nye oversættelse → lad den være som den er

Gem filen og importer den.Kun de poster, der forbliver, vil blive opdateret.

✔ Ignorer normalt removed.xml

Den er kun til reference.
Du behøver normalt ikke at importere fjernede poster tilbage til din butik.

nop-lang-compare.ps1

# Bestem outputmappe (mappen hvor dette script er placeret) $OutDir = $PSScriptRoot # Indlæs XML-filer [xml]$old = Get-Content "old.xml" [xml]$new = Get-Content "new.xml" # Byg hashtabel: Navn -> Trimmet værdi $oldMap = @{} $newMap = @{} foreach ($n in $old.Language.LocaleResource) { $oldMap[$n.Name] = $n.Value.Trim() } foreach ($n in $new.Language.LocaleResource) { $newMap[$n.Name] = $n.Value.Trim() } # Hjælpefunktion til at oprette et XML-dokument med ressourcer function New-LangXml { param ($resources) $xml = New-Object System.Xml.XmlDocument $decl = $xml.CreateXmlDeclaration("1.0", "utf-8", $null) $xml.AppendChild($decl) | Out-Null $root = $xml.CreateElement("Language") $root.SetAttribute("Name", "Diff") $root.SetAttribute("SupportedVersion", "1.0") $xml.AppendChild($root) | Out-Null foreach ($r in $resources) { $node = $xml.CreateElement("LocaleResource") $node.SetAttribute("Name", $r.Name) $valueNode = $xml.CreateElement("Value") $valueNode.InnerText = $r.Value $node.AppendChild($valueNode) | Out-Null $root.AppendChild($node) | Out-Null } return $xml } # --- Bestem TILFØJEDE --- $added = @() foreach ($key in $newMap.Keys) { if (-not $oldMap.ContainsKey($key)) { $added += [pscustomobject]@{ Name = $key Value = $newMap[$key] } } } # --- Bestem FJERNEDE --- $removed = @() foreach ($key in $oldMap.Keys) { if (-not $newMap.ContainsKey($key)) { $removed += [pscustomobject]@{ Name = $key Value = $oldMap[$key] } } } # --- Bestem ÆNDREDE --- $changed = @() foreach ($key in $oldMap.Keys) { if ($newMap.ContainsKey($key) -and $oldMap[$key] -ne $newMap[$key]) { $changed += [pscustomobject]@{ Name = $key Value = $newMap[$key] # gem NY trimmet værdi } } } # Gem XML-diff-filer til scriptets mappe (New-LangXml $added).Save( (Join-Path $OutDir "added.xml") ) (New-LangXml $removed).Save( (Join-Path $OutDir "removed.xml") ) (New-LangXml $changed).Save( (Join-Path $OutDir "changed.xml") ) Write-Host "Oprettet added.xml, removed.xml, changed.xml i $OutDir" -ForegroundColor Green

Leave your comment
*
Only registered users can leave comments.