Jak aktualizovat zdroje lokalizačních řetězců v NopCommerce bez ztráty vlastních úprav

Pokud provozujete svůj obchod NopCommerce již několik let, je pravděpodobné, že jste provedli mnoho vlastních úprav ve zdrojích lokalizačních řetězců.

Kvůli tomu může import nového jazykového balíčku působit riskantně — jedním kliknutím můžete přepsat desítky nebo dokonce stovky překladů, které jste pečlivě upravovali v průběhu času.

Oficiální doporučení od NopCommerce je exportovat vaše aktuální lokální zdroje, ručně je porovnat s novým jazykovým balíčkem pomocí nástrojů jako WinMerge a poté rozdíly zkopírovat jeden po druhém.
Tento přístup funguje, ale je pomalý a náchylný k chybám, zvláště pokud má váš obchod tisíce záznamů.

Abych tento proces usnadnil a zpříjemnil, vytvořil jsem jednoduchý PowerShell skript, který porovná dva XML soubory a řekne vám přesně, co se změnilo — bez nutnosti ručních porovnávacích nástrojů.

Co skript dělá

Skript porovnává dva XML soubory:

  • old.xml — vaše aktuální zdroje řetězců pro lokalizaci

  • new.xml — nejnovější jazykový balíček pro vaši verzi NopCommerce

Porovnává záznamy podle jejich atributu Name a generuje tři přehledné výstupní soubory:

added.xml

Obsahuje zdroje, které existují v novém jazykovém balíčku, ale chybí ve vašem aktuálním.

removed.xml

Obsahuje zdroje, které existují ve vaší aktuální instalaci, ale již nejsou přítomny v novém jazykovém balíčku.

changed.xml

Obsahuje zdroje, které existují v obou souborech, ale mají odlišné hodnoty (váš vlastní překlad vs.aktualizovanou).

Tím získáte přehledný přehled všeho, co se změnilo – aniž byste cokoli upravovali ve svém obchodě.

Chcete ještě jednodušší řešení?Vyzkoušejte EasyTranslate

Pokud jste ochotni vynaložit malý rozpočet, abyste tento úkol ještě více zjednodušili, podívejte se na můj plugin EasyTranslate .
EasyTranslate plugin for multilingual NopCommerce stores

S EasyTranslate můžete:

  • Vidět chybějící a nepřeložené jazykové prostředky přímo v administračním panelu NopCommerce

  • Přeložit je okamžitě pomocí Google Translation API

  • Exportovat je jako XML, pokud dáváte přednost ruční úpravě

  • Detekovat nepřeložený obsah v celém vašem obchodě
    (katalog, blogové příspěvky, novinky, témata – cokoli přeložitelného)

  • Přeložit veškerý tento obsah pomocí Google jen několika kliknutími

Pro obchody s mnoha jazyky ušetří EasyTranslate hodiny manuální práce.

Jak používat PowerShell skript (Windows)

Postupujte podle těchto kroků, abyste bezpečně porovnali své aktuální překlady s nejnovějším jazykovým balíčkem.

1.

Instalace PowerShellu

Většina instalací Windows jej již má. Pokud ne, stáhněte si jej od Microsoftu.

2. Stažení skriptu

Stáhnout nop-lang-compare.ps1 a umístěte jej do své pracovní složky.

3.

Otevřete PowerShell ve vaší pracovní složce

Máte dvě možnosti:

Možnost A: Použití příkazu cd

 
cd C:\Path\To\Your\Dir


Možnost B: Použití Průzkumníka souborů (jednodušší)

Otevřete svou složku → klikněte na adresní řádek → napište powershell → stiskněte Enter.
PowerShell se otevře přímo v této složce.

4.

Exportujte své aktuální lokalizační zdroje

V administraci NopCommerce:

Konfigurace → Jazyky → vyberte jazyk → Exportovat zdroje

Přesuňte stažený XML soubor do vaší pracovní složky a přejmenujte ho na:

old.xml


5.

Stáhněte si nejnovější jazykový balíček

Přejděte na oficiální stránku překladů na webu NopCommerce a stáhněte si nejnovější balíček pro vaši verzi.

Umístěte soubor do vaší pracovní složky a přejmenujte ho na:

new.xml


6.

Potvrďte, že jsou přítomny všechny soubory

V PowerShellu spusťte:

dir

Měli byste vidět:

  • nop-lang-compare.ps1

  • old.xml

  • new.xml



7.Spusťte skript

Spusťte:

.\nop-lang-compare.ps1



Skript vytvoří:

  • added.xml

  • removed.xml

  • changed.xml

ve stejné složce.



Co dělat s výsledky

✔ Importujte added.xml

Je bezpečné importovat — pouze přidává chybějící položky.

✔ Projděte changed.xml

Rozhodněte, které hodnoty chcete zachovat:

  • Pokud záznam obsahuje vaši vlastní překlad → odstraňte tento záznam ze souboru changed.xml

  • Pokud chcete nový překlad → ponechte jej beze změn

Uložte soubor a importujte jej.

Budou aktualizovány pouze položky, které zůstanou.

✔ Obvykle ignorujte removed.xml

Slouží pouze pro referenci.
Obvykle není potřeba odstraněné položky znovu importovat do vašeho obchodu.

nop-lang-compare.ps1

# Určení výstupního adresáře (adresář, kde se tento skript nachází) $OutDir = $PSScriptRoot # Načtení XML souborů [xml]$old = Get-Content "old.xml" [xml]$new = Get-Content "new.xml" # Vytvoření hashtable: Název -> Oříznutá Hodnota $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() } # Pomocná funkce pro vytvoření XML dokumentu s prostředky 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 } # --- Určení PŘIDANÝCH --- $added = @() foreach ($key in $newMap.Keys) { if (-not $oldMap.ContainsKey($key)) { $added += [pscustomobject]@{ Name = $key Value = $newMap[$key] } } } # --- Určení ODEBRANÝCH --- $removed = @() foreach ($key in $oldMap.Keys) { if (-not $newMap.ContainsKey($key)) { $removed += [pscustomobject]@{ Name = $key Value = $oldMap[$key] } } } # --- Určení ZMĚNĚNÝCH --- $changed = @() foreach ($key in $oldMap.Keys) { if ($newMap.ContainsKey($key) -and $oldMap[$key] -ne $newMap[$key]) { $changed += [pscustomobject]@{ Name = $key Value = $newMap[$key] # uložit NOVOU oříznutou hodnotu } } } # Uložení XML souborů s rozdíly do složky skriptu (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 "Vytvořeno added.xml, removed.xml, changed.xml v $OutDir" -ForegroundColor Green

Leave your comment
*
Only registered users can leave comments.