Se gestisci il tuo negozio NopCommerce da anni, è probabile che tu abbia apportato molte personalizzazioni alle risorse delle stringhe locali.Per questo motivo, importare un nuovo pacchetto linguistico può sembrare rischioso — un clic e potresti sovrascrivere dozzine o addirittura centinaia di traduzioni che hai accuratamente modificato nel tempo.
La raccomandazione ufficiale di NopCommerce è di esportare le tue risorse locali attuali, confrontarle manualmente con il nuovo pacchetto linguistico utilizzando strumenti come WinMerge, e poi copiare le differenze una per una.
Questo approccio funziona, ma è lento e soggetto a errori, specialmente se il tuo negozio ha migliaia di voci.
Per rendere questo processo più facile e sicuro, ho creato un semplice script PowerShell che confronta due file XML e ti dice esattamente cosa è cambiato — senza la necessità di strumenti di confronto manuali.
Cosa Fa lo Script
Lo script confronta due file XML:
-
old.xml — le tue attuali risorse di stringhe locali
-
new.xml — il più recente pacchetto linguistico per la tua versione di NopCommerce
Abbina le voci in base al loro attributo Name e genera tre file di output chiari:
added.xml
Contiene risorse che esistono nel nuovo pacchetto linguistico ma mancano in quello attuale.
removed.xml
Contiene risorse che esistono nella tua installazione attuale ma non sono più presenti nel nuovo pacchetto linguistico.
changed.xml
Contiene risorse che esistono in entrambi i file ma hanno valori diversi (la tua traduzione personalizzata vs.quello aggiornato).
Questo ti offre una panoramica chiara di tutto ciò che è cambiato — senza modificare nulla nel tuo negozio.
Vuoi una Soluzione Ancora Più Semplice?Prova EasyTranslate
Se sei disposto a investire un piccolo budget per semplificare ulteriormente questo compito, dai un'occhiata al mio plugin EasyTranslate .
Con EasyTranslate, puoi:
-
Visualizzare le risorse locali mancanti e non tradotte direttamente nel pannello di amministrazione di NopCommerce
-
Tradurle istantaneamente utilizzando l'API di Google Translate
-
Esportarle come XML se preferisci la modifica manuale
-
Rilevare contenuti non tradotti in tutto il tuo negozio
(catalogo, post del blog, notizie, argomenti — qualsiasi cosa traducibile) -
Tradurre tutti questi contenuti con Google in pochi clic
Per i negozi con molte lingue, EasyTranslate fa risparmiare ore di lavoro manuale.
Come Utilizzare lo Script PowerShell (Windows)
Segui questi passaggi per confrontare in modo sicuro le tue traduzioni attuali con il pacchetto linguistico più recente.
1.Installazione di PowerShell
La maggior parte delle installazioni di Windows lo include già.
In caso contrario, scaricalo da Microsoft.
2. Scarica lo Script
Scarica nop-lang-compare.ps1 e posizionalo nella tua cartella di lavoro.

3. Apri PowerShell nella tua cartella di lavoro
Hai due opzioni:
Opzione A: Utilizzando il comando cd
Opzione B: Utilizzando Esplora File (più semplice)
Apri la tua cartella → clicca nella barra degli indirizzi → digita powershell → premi Invio.
PowerShell si aprirà direttamente in quella cartella.
4.Esporta le Risorse Locali Correnti
In NopCommerce Admin:
Configurazione → Lingue → seleziona una lingua → Esporta Risorse
Sposta il file XML scaricato nella tua cartella di lavoro e rinominalo come:
5.Scarica il Pacchetto Linguistico Più Recente
Vai alla pagina ufficiale delle traduzioni sul sito di NopCommerce e scarica il pacchetto più recente per la tua versione.
Posiziona il file nella tua cartella di lavoro e rinominalo come:
6.Verifica che Tutti i File Siano Presenti
In PowerShell, esegui:
Dovresti vedere:
-
nop-lang-compare.ps1
-
old.xml
-
new.xml

7.Esegui lo Script
Esegui:

Lo script creerà:
-
added.xml
-
removed.xml
-
changed.xml
nella stessa cartella.
Cosa Fare con i Risultati
✔ Importa added.xml
Sicuro da importare — aggiunge solo gli elementi mancanti.
✔ Rivedi changed.xml
Decidi quali valori vuoi mantenere:
-
Se la voce contiene la tua traduzione personalizzata → elimina quella voce da changed.xml
-
Se vuoi la nuova traduzione → lasciala così com'è
Salva il file e importalo.
Solo le voci che rimangono verranno aggiornate.
✔ Normalmente ignora removed.xml
Serve solo come riferimento.
Di solito non è necessario reimportare le voci rimosse nel tuo negozio.
nop-lang-compare.ps1
# Determina la directory di output (directory dove si trova questo script)
$OutDir = $PSScriptRoot
# Carica i file XML
[xml]$old = Get-Content "old.xml"
[xml]$new = Get-Content "new.xml"
# Costruisce hashtable: Nome -> Valore Trimmed
$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()
}
# Funzione helper per creare un documento XML con le risorse
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
}
# --- Determina AGGIUNTE ---
$added = @()
foreach ($key in $newMap.Keys) {
if (-not $oldMap.ContainsKey($key)) {
$added += [pscustomobject]@{
Name = $key
Value = $newMap[$key]
}
}
}
# --- Determina RIMOSSE ---
$removed = @()
foreach ($key in $oldMap.Keys) {
if (-not $newMap.ContainsKey($key)) {
$removed += [pscustomobject]@{
Name = $key
Value = $oldMap[$key]
}
}
}
# --- Determina MODIFICATE ---
$changed = @()
foreach ($key in $oldMap.Keys) {
if ($newMap.ContainsKey($key) -and $oldMap[$key] -ne $newMap[$key]) {
$changed += [pscustomobject]@{
Name = $key
Value = $newMap[$key] # memorizza il nuovo valore trimmed
}
}
}
# Salva i file XML di diff nella cartella dello script
(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 "Creati added.xml, removed.xml, changed.xml in $OutDir" -ForegroundColor Green
