Si vous gérez votre boutique NopCommerce depuis des années, il est probable que vous ayez apporté de nombreuses modifications personnalisées à vos ressources de chaînes locales.
Pour cette raison, l'importation d'un nouveau pack de langue peut sembler risquée — un simple clic et vous pourriez écraser des dizaines, voire des centaines de traductions que vous avez soigneusement ajustées au fil du temps.
La recommandation officielle de NopCommerce est d'exporter vos ressources locales actuelles, de les comparer manuellement avec le nouveau pack de langue à l'aide d'outils comme WinMerge, puis de copier les différences une par une.
Cette approche fonctionne, mais elle est lente et sujette aux erreurs, surtout si votre boutique contient des milliers d'entrées.
Pour rendre ce processus plus facile et plus sûr, j'ai créé un simple script PowerShell qui compare deux fichiers XML et vous indique exactement ce qui a changé — sans avoir besoin d'outils de comparaison manuels.
Ce que fait le script
Le script compare deux fichiers XML :
-
old.xml — vos ressources de chaînes locales actuelles
-
new.xml — le dernier pack de langue pour votre version de NopCommerce
Il fait correspondre les entrées par leur attribut Name et génère trois fichiers de sortie clairs :
added.xml
Contient les ressources qui existent dans le nouveau pack de langue mais qui manquent dans votre version actuelle.
removed.xml
Contient les ressources qui existent dans votre installation actuelle mais qui ne sont plus présentes dans le nouveau pack de langue.
changed.xml
Contient les ressources qui existent dans les deux fichiers mais qui ont des valeurs différentes (votre traduction personnalisée vs.la version mise à jour).
Cela vous donne une vue d'ensemble claire de tout ce qui a changé — sans rien modifier dans votre boutique.
Vous voulez une solution encore plus simple ?Testez EasyTranslate
Si vous êtes prêt à allouer un petit budget pour simplifier davantage cette tâche, jetez un œil à mon plugin EasyTranslate .
Avec EasyTranslate, vous pouvez :
-
Voir les ressources locales manquantes et non traduites directement dans le panneau d'administration de NopCommerce
-
Les traduire instantanément en utilisant l'API de traduction Google
-
Les exporter en XML si vous préférez les éditer manuellement
-
Détecter le contenu non traduit dans toute votre boutique
(catalogue, articles de blog, actualités, sujets — tout ce qui est traduisible) -
Traduire tout ce contenu avec Google en quelques clics seulement
Pour les boutiques avec de nombreuses langues, EasyTranslate économise des heures de travail manuel.
Comment utiliser le script PowerShell (Windows)
Suivez ces étapes pour comparer en toute sécurité vos traductions actuelles avec le dernier pack de langue.
1.
Installer PowerShell
La plupart des installations Windows l'ont déjà. Sinon, téléchargez-le depuis Microsoft.
2. Télécharger le Script
Télécharger nop-lang-compare.ps1 et placez-le dans votre dossier de travail.

3.
Ouvrez PowerShell dans votre dossier de travail
Vous avez deux options :
Option A : Utiliser la commande cd
Option B : Utiliser l'Explorateur de fichiers (plus simple)
Ouvrez votre dossier → cliquez dans la barre d'adresse → tapez powershell → appuyez sur Entrée.
PowerShell s'ouvrira directement dans ce dossier.
4.
Exporter vos ressources de langue actuelles
Dans l'administration NopCommerce :
Configuration → Langues → sélectionnez une langue → Exporter les ressources
Déplacez le fichier XML téléchargé dans votre dossier de travail et renommez-le en :
5.
Téléchargez le Pack de Langue le Plus Récent
Rendez-vous sur la page officielle des traductions du site NopCommerce et téléchargez le pack le plus récent pour votre version.
Placez le fichier dans votre dossier de travail et renommez-le en :
6.
Confirmer que tous les fichiers sont présents
Dans PowerShell, exécutez :
Vous devriez voir :
-
nop-lang-compare.ps1
-
old.xml
-
new.xml

7.Exécuter le Script
Exécuter :

Le script créera :
-
added.xml
-
removed.xml
-
changed.xml
dans le même dossier.
Que Faire Avec les Résultats
✔ Importer added.xml
Sûr à importer — il ajoute uniquement les éléments manquants.
✔ Examiner changed.xml
Décidez quelles valeurs vous souhaitez conserver :
-
Si l'entrée contient votre traduction personnalisée → supprimez cette entrée de changed.xml
-
Si vous voulez la nouvelle traduction → laissez-la telle quelle
Enregistrez le fichier et importez-le.Seules les entrées qui restent seront mises à jour.
✔ Ignorer normalement removed.xml
Il est uniquement à titre de référence.
Vous n'avez généralement pas besoin de réimporter les entrées supprimées dans votre boutique.
nop-lang-compare.ps1
# Déterminer le répertoire de sortie (répertoire où se trouve ce script)
$OutDir = $PSScriptRoot
# Charger les fichiers XML
[xml]$old = Get-Content "old.xml"
[xml]$new = Get-Content "new.xml"
# Construire la table de hachage : Nom -> Valeur élaguée
$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()
}
# Fonction utilitaire pour créer un document XML avec des ressources
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
}
# --- Déterminer les AJOUTÉES ---
$added = @()
foreach ($key in $newMap.Keys) {
if (-not $oldMap.ContainsKey($key)) {
$added += [pscustomobject]@{
Name = $key
Value = $newMap[$key]
}
}
}
# --- Déterminer les SUPPRIMÉES ---
$removed = @()
foreach ($key in $oldMap.Keys) {
if (-not $newMap.ContainsKey($key)) {
$removed += [pscustomobject]@{
Name = $key
Value = $oldMap[$key]
}
}
}
# --- Déterminer les MODIFIÉES ---
$changed = @()
foreach ($key in $oldMap.Keys) {
if ($newMap.ContainsKey($key) -and $oldMap[$key] -ne $newMap[$key]) {
$changed += [pscustomobject]@{
Name = $key
Value = $newMap[$key] # stocker la NOUVELLE valeur élaguée
}
}
}
# Enregistrer les fichiers de différence XML dans le dossier du 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 "Création de added.xml, removed.xml, changed.xml dans $OutDir" -ForegroundColor Green
