Как да актуализирате вашите ресурси за локални низове без да загубите персонализираните промени в NopCommerce

Ако управлявате вашия NopCommerce магазин от години, вероятно сте направили много персонализирани промени в локалните низови ресурси.Поради това, импортирането на нов езиков пакет може да изглежда рисковано — с едно щракване може да презапишете десетки или дори стотици преводи, които сте внимателно нагласявали с времето.

Официалната препоръка от NopCommerce е да експортирате текущите си локални ресурси, да ги сравните ръчно с новия езиков пакет, използвайки инструменти като WinMerge, и след това да копирате разликите една по една.
Този подход работи, но е бавен и податлив на грешки, особено ако вашият магазин има хиляди записи.

За да улесня и направя този процес по-безопасен, създадох прост PowerShell скрипт, който сравнява два XML файла и ви казва точно какво се е променило — без нужда от ръчни инструменти за разлики.

Какво Прави Скриптът

Скриптът сравнява два 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 скрипта (Windows)

Следвайте тези стъпки, за да сравните безопасно текущите си преводи с най-новия езиков пакет.

1.Инсталирайте PowerShell

Повечето Windows инсталации вече го имат. Ако не, изтеглете го от Microsoft.

2. Изтеглете скрипта

Изтеглете nop-lang-compare.ps1 и го поставете в работната си папка.

3. Отворете PowerShell във вашата работна папка

Имате две възможности:

Вариант А: Използване на командата cd

 
cd C:\Path\To\Your\Dir


Вариант Б: Използване на File Explorer (по-лесно)

Отворете вашата папка → кликнете в адресната лента → напишете powershell → натиснете Enter.
PowerShell ще се отвори директно в тази папка.

4.

Експортиране на текущите локални ресурси

В NopCommerce администрация:

Конфигурация → Езици → изберете език → Експортиране на ресурси

Преместете изтегления 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

# Определяне на изходната директория (директорията, където се намира този скрипт) $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

Leave your comment
*
Only registered users can leave comments.