Πώς να Ενημερώσετε τους Πόρους Συμβολοσειρών Τοπικής Ρύθμισης Χωρίς να Χάσετε τις Προσαρμοσμένες Αλλαγές σας στο NopCommerce

Αν τρέχετε το κατάστημά σας στο NopCommerce για χρόνια, είναι πιθανό να έχετε κάνει πολλές προσαρμογές στους τοπικούς πόρους συμβολοσειρών.Για αυτόν τον λόγο, η εισαγωγή ενός νέου πακέτου γλώσσας μπορεί να φαίνεται επικίνδυνη — με ένα κλικ μπορείς να αντικαταστήσεις δεκάδες ή ακόμα και εκατοντάδες μεταφράσεις που προσαρμόσες προσεκτικά με τον καιρό.

Η επίσημη σύσταση από τη NopCommerce είναι να εξάγεις τα τρέχοντα τοπικά σου πόρους, να τα συγκρίνεις χειροκίνητα με το νέο πακέτο γλώσσας χρησιμοποιώντας εργαλεία όπως το WinMerge, και μετά να αντιγράφεις τις διαφορές μία προς μία.
Αυτή η προσέγγιση λειτουργεί, αλλά είναι αργή και επιρρεπής σε λάθη, ειδικά αν το κατάστημά σου έχει χιλιάδες εγγραφές.

Για να κάνω αυτή τη διαδικασία ευκολότερη και ασφαλέστερη, δημιούργησα ένα απλό PowerShell script που συγκρίνει δύο XML αρχεία και σου λέει ακριβώς τι άλλαξε — χωρίς την ανάγκη για χειροκίνητα εργαλεία σύγκρισης.

Τι Κάνει το Script

Το script συγκρίνει δύο XML αρχεία:

  • old.xml — οι τρέχουσες τοπικές σου συμβολοσειρές πόρων

  • new.xml — το νεότερο πακέτο γλώσσας για την έκδοση της NopCommerce σου

Ταιριάζει τις εγγραφές με βάση το χαρακτηριστικό Name και δημιουργεί τρία ξεκάθαρα αρχεία εξόδου:

added.xml

Περιέχει πόρους που υπάρχουν στο νέο πακέτο γλώσσας αλλά λείπουν από το τρέχον σου.

removed.xml

Περιέχει πόρους που υπάρχουν στην τρέχουσα εγκατάστασή σου αλλά δεν υπάρχουν πλέον στο νέο πακέτο γλώσσας.

changed.xml

Περιέχει πόρους που υπάρχουν και στα δύο αρχεία αλλά έχουν διαφορετικές τιμές (η προσαρμοσμένη σου μετάφραση έναντι.το ενημερωμένο).

Αυτό σας δίνει μια καθαρή επισκόπηση όλων των αλλαγών — χωρίς να τροποποιείτε τίποτα στο κατάστημά σας.

Θέλετε μια Ακόμα Ευκολότερη Λύση;Δοκιμάστε το EasyTranslate

Αν είστε ανοιχτοί στο να διαθέσετε ένα μικρό προϋπολογισμό για να απλοποιήσετε περαιτέρω αυτήν την εργασία, ρίξτε μια ματιά στο πρόσθετο EasyTranslate μου.
EasyTranslate plugin for multilingual NopCommerce stores

Με το EasyTranslate, μπορείτε να:

  • Βλέπετε ελλείπουσες και μη μεταφρασμένες πηγές τοπικής γλώσσας απευθείας στον πίνακα διαχείρισης του NopCommerce

  • Τις μεταφράζετε αμέσως χρησιμοποιώντας το Google Translation API

  • Τις εξάγετε ως XML αν προτιμάτε χειροκίνητη επεξεργασία

  • Ανιχνεύετε μη μεταφρασμένο περιεχόμενο σε ολόκληρο το κατάστημά σας
    (κατάλογος, αναρτήσεις ιστολογίου, νέα, θέματα — οτιδήποτε μεταφράσιμο)

  • Μεταφράζετε όλο αυτό το περιεχόμενο με το Google με λίγα μόνο κλικ

Για καταστήματα με πολλές γλώσσες, το EasyTranslate εξοικονομεί ώρες χειροκίνητης εργασίας.

Πώς να Χρησιμοποιήσετε το PowerShell Script (Windows)

Ακολουθήστε αυτά τα βήματα για να συγκρίνετε με ασφάλεια τις τρέχουσες μεταφράσεις σας με το πιο πρόσφατο πακέτο γλώσσας.

1.Εγκαταστήστε το PowerShell

Οι περισσότερες εγκαταστάσεις Windows το έχουν ήδη. Εάν όχι, κατεβάστε το από τη Microsoft.

2. Κατεβάστε το Σενάριο

Κατεβάστε nop-lang-compare.ps1 και τοποθετήστε το στον φάκελο εργασίας σας.

3. Ανοίξτε το PowerShell στον φάκελο εργασίας σας

Έχετε δύο επιλογές:

Επιλογή Α: Χρησιμοποιώντας την εντολή cd

 
cd C:\Path\To\Your\Dir


Επιλογή Β: Χρήση του Εξερευνητή Αρχείων (πιο εύκολη)

Ανοίξτε τον φάκελό σας → κάντε κλικ στη γραμμή διευθύνσεων → πληκτρολογήστε powershell → πατήστε Enter.
Το PowerShell θα ανοίξει απευθείας σε αυτόν τον φάκελο.

4.

Εξαγωγή των Τρέχουσων Πόρων Τοπικοποίησης

Στο NopCommerce Admin:

Configuration → Languages → επιλέξτε μια γλώσσα → Export Resources

Μετακινήστε το κατεβασμένο αρχείο XML στον φάκελο εργασίας σας και μετονομάστε το σε:

old.xml


5.Λήψη του Νεότερου Πακέτου Γλωσσών

Πηγαίνετε στη επίσημη σελίδα μεταφράσεων στον ιστότοπο της NopCommerce και κατεβάστε το νεότερο πακέτο για την έκδοσή σας.

Τοποθετήστε το αρχείο στον φάκελο εργασίας σας και μετονομάστε το σε:

new.xml


6.Επιβεβαιώστε ότι Όλα τα Αρχεία Είναι Παρόντα

Στο PowerShell, εκτελέστε:

dir

Θα πρέπει να δείτε:

  • nop-lang-compare.ps1

  • old.xml

  • new.xml



7.Εκτέλεση του Σενάριου

Εκτέλεση:

.\nop-lang-compare.ps1



Το σενάριο θα δημιουργήσει:

  • added.xml

  • removed.xml

  • changed.xml

στον ίδιο φάκελο.



Τι να Κάνετε με τα Αποτελέσματα

✔ Εισαγωγή του added.xml

Ασφαλές για εισαγωγή — προσθέτει μόνο τα στοιχεία που λείπουν.

✔ Επιθεώρηση του changed.xml

Αποφασίστε ποιες τιμές θέλετε να διατηρήσετε:

  • Εάν η καταχώρηση περιέχει τη δική σας προσαρμοσμένη μετάφραση → διαγράψτε αυτήν την καταχώρηση από το changed.xml

  • Εάν θέλετε τη νέα μετάφραση → αφήστε την ως έχει

Αποθηκεύστε το αρχείο και εισάγετέ το.Μόνο οι καταχωρήσεις που παραμένουν θα ενημερωθούν.

✔ Κανονικά αγνοήστε το removed.xml

Είναι μόνο για αναφορά.
Συνήθως δεν χρειάζεται να εισάγετε ξανά τις αφαιρεθείσες καταχωρήσεις στο κατάστημά σας.

nop-lang-compare.ps1

# Καθορισμός καταλόγου εξόδου (κατάλογος όπου βρίσκεται αυτό το script) $OutDir = $PSScriptRoot # Φόρτωση αρχείων XML [xml]$old = Get-Content "old.xml" [xml]$new = Get-Content "new.xml" # Δημιουργία πίνακα κατακερματισμού: Όνομα -> Κλασμένη Τιμή $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() } # Βοηθητική συνάρτηση για δημιουργία εγγράφου XML με πόρους 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 } # --- Καθορισμός ΠΡΟΣΤΕΘΕΜΕΝΩΝ --- $added = @() foreach ($key in $newMap.Keys) { if (-not $oldMap.ContainsKey($key)) { $added += [pscustomobject]@{ Name = $key Value = $newMap[$key] } } } # --- Καθορισμός ΑΦΑΙΡΕΘΕΝΤΩΝ --- $removed = @() foreach ($key in $oldMap.Keys) { if (-not $newMap.ContainsKey($key)) { $removed += [pscustomobject]@{ Name = $key Value = $oldMap[$key] } } } # --- Καθορισμός ΑΛΛΑΓΜΕΝΩΝ --- $changed = @() foreach ($key in $oldMap.Keys) { if ($newMap.ContainsKey($key) -and $oldMap[$key] -ne $newMap[$key]) { $changed += [pscustomobject]@{ Name = $key Value = $newMap[$key] # αποθήκευση της ΝΕΑΣ κλασμένης τιμής } } } # Αποθήκευση αρχείων διαφορών XML στον κατάλογο του 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 "Δημιουργήθηκαν τα added.xml, removed.xml, changed.xml στον $OutDir" -ForegroundColor Green

Leave your comment
*
Only registered users can leave comments.