Jak zaktualizować zasoby ciągów lokalizacji bez utraty własnych zmian w NopCommerce

Jeśli prowadzisz swój sklep NopCommerce od lat, prawdopodobnie wprowadziłeś wiele własnych modyfikacji w zasobach ciągów lokalizacyjnych.Z tego powodu importowanie nowego pakietu językowego może wydawać się ryzykowne — jedno kliknięcie i możesz nadpisać dziesiątki, a nawet setki tłumaczeń, które starannie dostosowywałeś przez lata.

Oficjalna rekomendacja NopCommerce to wyeksportowanie obecnych zasobów językowych, ręczne porównanie ich z nowym pakietem językowym za pomocą narzędzi takich jak WinMerge, a następnie skopiowanie różnic pojedynczo.
To podejście działa, ale jest powolne i podatne na błędy, szczególnie jeśli twój sklep ma tysiące wpisów.

Aby uczynić ten proces łatwiejszym i bezpieczniejszym, stworzyłem prosty skrypt PowerShell, który porównuje dwa pliki XML i mówi ci dokładnie, co się zmieniło — bez potrzeby używania ręcznych narzędzi do porównywania.

Co robi skrypt

Skrypt porównuje dwa pliki XML:

  • old.xml — twoje obecne zasoby ciągów językowych

  • new.xml — najnowszy pakiet językowy dla twojej wersji NopCommerce

Dopasowuje wpisy według ich atrybutu Name i generuje trzy przejrzyste pliki wyjściowe:

added.xml

Zawiera zasoby, które istnieją w nowym pakiecie językowym, ale brakuje ich w twoim obecnym.

removed.xml

Zawiera zasoby, które istnieją w twojej obecnej instalacji, ale nie są już obecne w nowym pakiecie językowym.

changed.xml

Zawiera zasoby, które istnieją w obu plikach, ale mają różne wartości (twoje własne tłumaczenie vs.zaktualizowaną).

Daje to przejrzysty przegląd wszystkich zmian — bez modyfikowania czegokolwiek w Twoim sklepie.

Chcesz jeszcze prostszego rozwiązania?Wypróbuj EasyTranslate

Jeśli jesteś otwarty na wydanie niewielkiego budżetu, aby jeszcze bardziej uprościć to zadanie, zapoznaj się z moją wtyczką EasyTranslate .
EasyTranslate plugin for multilingual NopCommerce stores

Dzięki EasyTranslate możesz:

  • Zobaczyć brakujące i nieprzetłumaczone zasoby językowe bezpośrednio w panelu administracyjnym NopCommerce

  • Przetłumaczyć je natychmiast za pomocą API Tłumacza Google

  • Eksportować je jako XML, jeśli wolisz ręczną edycję

  • Wykrywać nieprzetłumaczoną treść w całym sklepie
    (katalog, wpisy na blogu, aktualności, tematy — wszystko, co można przetłumaczyć)

  • Przetłumaczyć całą tę treść za pomocą Google w zaledwie kilku kliknięciach

Dla sklepów z wieloma językami EasyTranslate oszczędza godziny ręcznej pracy.

Jak używać skryptu PowerShell (Windows)

Wykonaj te kroki, aby bezpiecznie porównać swoje obecne tłumaczenia z najnowszym pakietem językowym.

1.Zainstaluj PowerShell

Większość instalacji Windows już go posiada. Jeśli nie, pobierz go od Microsoft.

2. Pobierz skrypt

Pobierz nop-lang-compare.ps1 i umieść go w swoim folderze roboczym.

3. Otwórz PowerShell w swoim folderze roboczym

Masz dwie opcje:

Opcja A: Użycie polecenia cd

 
cd C:\Path\To\Your\Dir


Opcja B: Korzystanie z Eksploratora plików (łatwiejsze)

Otwórz swój folder → kliknij w pasek adresu → wpisz powershell → naciśnij Enter.
PowerShell otworzy się bezpośrednio w tym folderze.

4.

Eksportuj bieżące zasoby językowe

W panelu administracyjnym NopCommerce:

Konfiguracja → Języki → wybierz język → Eksportuj zasoby

Przenieś pobrany plik XML do folderu roboczego i zmień jego nazwę na:

old.xml


5.

Pobierz najnowszy pakiet językowy

Przejdź na oficjalną stronę tłumaczeń na stronie NopCommerce i pobierz najnowszy pakiet dla swojej wersji.

Umieść plik w swoim folderze roboczym i zmień jego nazwę na:

new.xml


6.Potwierdź, że wszystkie pliki są obecne

W PowerShell, uruchom:

dir

Powinieneś zobaczyć:

  • nop-lang-compare.ps1

  • old.xml

  • new.xml



7.Uruchom Skrypt

Wykonaj:

.\nop-lang-compare.ps1



Skrypt utworzy:

  • added.xml

  • removed.xml

  • changed.xml

w tym samym folderze.



Co zrobić z wynikami

✔ Zaimportuj added.xml

Bezpieczne do zaimportowania — dodaje tylko brakujące elementy.

✔ Przejrzyj changed.xml

Zdecyduj, które wartości chcesz zachować:

  • Jeśli wpis zawiera twoje własne tłumaczenie → usuń ten wpis z changed.xml

  • Jeśli chcesz nowe tłumaczenie → zostaw bez zmian

Zapisz plik i zaimportuj go.

Zostaną zaktualizowane tylko wpisy, które pozostają.

✔ Zwykle ignoruj removed.xml

Służy tylko do celów referencyjnych.
Zazwyczaj nie musisz importować usuniętych wpisów z powrotem do swojego sklepu.

nop-lang-compare.ps1

# Określenie katalogu wyjściowego (katalog, w którym znajduje się ten skrypt) $OutDir = $PSScriptRoot # Załaduj pliki XML [xml]$old = Get-Content "old.xml" [xml]$new = Get-Content "new.xml" # Zbuduj tablicę skrótów: Nazwa -> Przycięta Wartość $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() } # Funkcja pomocnicza do tworzenia dokumentu XML z zasobami 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 } # --- Określ DODANE --- $added = @() foreach ($key in $newMap.Keys) { if (-not $oldMap.ContainsKey($key)) { $added += [pscustomobject]@{ Name = $key Value = $newMap[$key] } } } # --- Określ USUNIĘTE --- $removed = @() foreach ($key in $oldMap.Keys) { if (-not $newMap.ContainsKey($key)) { $removed += [pscustomobject]@{ Name = $key Value = $oldMap[$key] } } } # --- Określ ZMIENIONE --- $changed = @() foreach ($key in $oldMap.Keys) { if ($newMap.ContainsKey($key) -and $oldMap[$key] -ne $newMap[$key]) { $changed += [pscustomobject]@{ Name = $key Value = $newMap[$key] # zapisz NOWĄ przyciętą wartość } } } # Zapisz pliki różnicowe XML w folderze skryptu (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 "Utworzono added.xml, removed.xml, changed.xml w $OutDir" -ForegroundColor Green

Leave your comment
*
Only registered users can leave comments.