Comment mettre à jour vos ressources de chaînes de localisation sans perdre vos modifications personnalisées dans NopCommerce

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 .
EasyTranslate plugin for multilingual NopCommerce stores

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

 
cd C:\Path\To\Your\Dir


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 :

old.xml


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 :

new.xml


6.

Confirmer que tous les fichiers sont présents

Dans PowerShell, exécutez :

dir

Vous devriez voir :

  • nop-lang-compare.ps1

  • old.xml

  • new.xml



7.Exécuter le Script

Exécuter :

.\nop-lang-compare.ps1



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

Leave your comment
*
Only registered users can leave comments.