Ако управлявате вашия NopCommerce магазин от години, вероятно сте направили много персонализирани промени в локалните низови ресурси.Поради това, импортирането на нов езиков пакет може да изглежда рисковано — с едно щракване може да презапишете десетки или дори стотици преводи, които сте внимателно нагласявали с времето.
Официалната препоръка от NopCommerce е да експортирате текущите си локални ресурси, да ги сравните ръчно с новия езиков пакет, използвайки инструменти като WinMerge, и след това да копирате разликите една по една.
Този подход работи, но е бавен и податлив на грешки, особено ако вашият магазин има хиляди записи.
За да улесня и направя този процес по-безопасен, създадох прост PowerShell скрипт, който сравнява два XML файла и ви казва точно какво се е променило — без нужда от ръчни инструменти за разлики.
Какво Прави Скриптът
Скриптът сравнява два XML файла:
-
old.xml — вашите текущи ресурси с низове за локала
-
new.xml — най-новият езиков пакет за вашата версия на NopCommerce
Той съпоставя записи по техния Name атрибут и генерира три ясни изходни файла:
added.xml
Съдържа ресурси, които съществуват в новия езиков пакет, но липсват в текущия ви.
removed.xml
Съдържа ресурси, които съществуват във вашата текуща инсталация, но вече не присъстват в новия езиков пакет.
changed.xml
Съдържа ресурси, които съществуват и в двата файла, но имат различни стойности (вашия персонализиран превод срещуактуализираната).
Това ви дава ясен преглед на всичко, което се е променило — без да променяте нищо в магазина си.
Искате още по-лесно решение?Опитайте EasyTranslate
Ако сте отворени да похарчите малък бюджет, за да опростите тази задача още повече, разгледайте моя плъгин EasyTranslate .
С EasyTranslate можете да:
-
Виждате липсващи и непреведени локални ресурси директно в административния панел на NopCommerce
-
Да ги превеждате моментално чрез Google Translation API
-
Да ги експортирате като XML, ако предпочитате ръчно редактиране
-
Да откривате непреведено съдържание в целия ви магазин
(каталог, блог постове, новини, теми — всичко, което може да се преведе) -
Да превеждате цялото това съдържание с Google само с няколко клика
За магазини с много езици, EasyTranslate спестява часове ръчна работа.
Как да използвате PowerShell скрипта (Windows)
Следвайте тези стъпки, за да сравните безопасно текущите си преводи с най-новия езиков пакет.
1.Инсталирайте PowerShell
Повечето Windows инсталации вече го имат.
Ако не, изтеглете го от Microsoft.
2. Изтеглете скрипта
Изтеглете nop-lang-compare.ps1 и го поставете в работната си папка.

3. Отворете PowerShell във вашата работна папка
Имате две възможности:
Вариант А: Използване на командата cd
Вариант Б: Използване на File Explorer (по-лесно)
Отворете вашата папка → кликнете в адресната лента → напишете powershell → натиснете Enter.
PowerShell ще се отвори директно в тази папка.
4.Експортиране на текущите локални ресурси
В NopCommerce администрация:
Конфигурация → Езици → изберете език → Експортиране на ресурси
Преместете изтегления XML файл в работната си папка и го преименувайте на:
5.Изтеглете най-новия езиков пакет
Отидете на официалната страница за преводи на уебсайта на NopCommerce и изтеглете най-новия пакет за вашата версия.
Поставете файла във вашата работна папка и го преименувайте на:
6.Потвърдете, че всички файлове са налични
В PowerShell, изпълнете:
Трябва да видите:
-
nop-lang-compare.ps1
-
old.xml
-
new.xml

7.Изпълни скрипта
Изпълни:

Скриптът ще създаде:
-
added.xml
-
removed.xml
-
changed.xml
в същата папка.
Какво да Правите с Резултатите
✔ Импортирайте added.xml
Безопасно за импортиране — добавя само липсващи елементи.
✔ Прегледайте changed.xml
Решете кои стойности искате да запазите:
-
Ако записът съдържа вашия персонализиран превод → изтрийте този запис от changed.xml
-
Ако искате новия превод → оставете го както е
Запазете файла и го импортирайте.Само записите, които останат, ще бъдат обновени.
✔ Обикновено игнорирайте removed.xml
Той е само за справка.
Обикновено не е необходимо да импортирате премахнати записи обратно във вашия магазин.
nop-lang-compare.ps1
# Определяне на изходната директория (директорията, където се намира този скрипт)
$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 diff файловете в папката на скрипта
(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
