Como atualizar os seus recursos de string de localização sem perder as suas alterações personalizadas no nopCommerce

Se tens gerido a tua loja NopCommerce há anos, é provável que tenhas feito muitos ajustes personalizados aos recursos da tua string local. Por isso, importar um novo pacote de línguas pode parecer arriscado — um clique e pode sobrescrever dezenas ou até centenas de traduções que ajustou cuidadosamente ao longo do tempo.

A recomendação oficial do NopCommerce é exportar os recursos locais atuais, compará-los manualmente com o novo pacote de idiomas usando ferramentas como o WinMerge, e depois copiar as diferenças uma a uma.
Esta abordagem funciona, mas é lenta e propensa a erros, especialmente se a sua loja tiver milhares de entradas.

Para tornar este processo mais fácil e seguro, criei um script simples em PowerShell que compara dois ficheiros XML e indica exatamente o que mudou — sem necessidade de ferramentas manuais de diferenciais.

O que o guião faz

O script compara dois ficheiros XML:

  • old.xml — os recursos atuais da tua cadeia local

  • new.xml — o pacote de idiomas mais recente para a sua versão NopCommerce

Corresponde às entradas pelo seu atributo Nome e gera três ficheiros de saída claros:

added.xml

Contém recursos que existem no novo pacote de línguas mas que estão em falta no seu atual.

removed.xml

Contém recursos que existem na sua instalação atual mas que já não estão presentes no novo pacote de idiomas.

changed.xml

Contém recursos que existem em ambos os ficheiros mas têm valores diferentes (a sua tradução personalizada vs. a atualizada).

Isto dá-lhe uma visão clara de tudo o que mudou — sem alterar nada na sua loja.

Quer uma solução ainda mais fácil? Experimente o EasyTranslate

Se estiveres aberto a gastar um pequeno orçamento para simplificar ainda mais esta tarefa, dá uma vista de olhos ao meu plugin EasyTranslate.
EasyTranslate plugin for multilingual NopCommerce stores

Com o EasyTranslate, pode:

  • Consulte recursos locais em falta e não traduzidos diretamente no painel de administração do NopCommerce

  • Traduza-os instantaneamente usando a Google Translation API

  • Exporta-os em XML se preferires edição manual

  • Detetar conteúdo não traduzido em toda a sua loja
    (catálogo, publicações no blogue, notícias, tópicos — qualquer coisa traduzível)

  • Traduz todo este conteúdo com o Google em apenas alguns cliques

Para lojas com muitas línguas, o EasyTranslate poupa horas de trabalho manual.

Como Usar o Script PowerShell (Windows)

Siga estes passos para comparar em segurança as suas traduções atuais com o pacote de línguas mais recente.

1. Instalar o PowerShell

A maioria das instalações do Windows já o tem. Se não, descarrega da Microsoft.

2. Descarregar o Argumento

Descarrega nop-lang-compare.ps1 e coloca-o na tua pasta de trabalho.

3. Abra o PowerShell na sua pasta de trabalho

Tens duas opções:

Opção A: Usar o cd comando

 
cd C:\Path\To\Your\Dir


Opção B: Usar o Explorador de Ficheiros (mais fácil)

Abre a tua pasta → clica na barra de endereços → escreve powershell → carrega em Enter.
O PowerShell abre diretamente nessa pasta.

4. Exporte os seus recursos locais atuais

No NopCommerce Admin:

Configuração → Linguagens → selecionar uma língua → Exportar Recursos

Mova o ficheiro XML descarregado para a sua pasta de trabalho e renomeie-o para:

old.xml


5. Descarregar o Pacote de Línguas Mais Recente

Vai à página oficial de traduções no site da NopCommerce e descarrega o pacote mais recente da tua versão.

Coloque o ficheiro na sua pasta de trabalho e renomeie-o para:

new.xml


6. Confirmar que todos os ficheiros estão presentes

No PowerShell, executa:

dir

Deves ver:

  • nop-lang-compare.ps1

  • old.xml

  • new.xml



7. Executar o Script

Executar:

.\nop-lang-compare.ps1



O guião irá criar:

  • added.xml

  • removed.xml

  • changed.xml

na mesma pasta.



O que fazer com os resultados

✔ Importação added.xml

Seguro para importar — só adiciona itens em falta.

✔ Crítica changed.xml

Decida quais os valores que quer manter:

  • Se a entrada contiver a sua tradução personalizada → apague essa entrada da changed.xml

  • Se quiseres a nova tradução→ deixa-a como está

Guarda o ficheiro e importa-o. Apenas as entradas que permanecerem serão atualizadas.

✔ Normalmente ignoro removed.xml

É só para referência.
Normalmente não precisas de importar as entradas removidas de volta para a tua loja.

nop-lang-compare.ps1

# Determine output directory (directory where this script is located) $OutDir = $PSScriptRoot # Load XML files [xml]$old = Get-Content "old.xml" [xml]$new = Get-Content "new.xml" # Build hashtable: Name -> Trimmed Value $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() } # Helper function to create an XML document with resources 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 } # --- Determine ADDED --- $added = @() foreach ($key in $newMap.Keys) { if (-not $oldMap.ContainsKey($key)) { $added += [pscustomobject]@{ Name = $key Value = $newMap[$key] } } } # --- Determine REMOVED --- $removed = @() foreach ($key in $oldMap.Keys) { if (-not $newMap.ContainsKey($key)) { $removed += [pscustomobject]@{ Name = $key Value = $oldMap[$key] } } } # --- Determine CHANGED --- $changed = @() foreach ($key in $oldMap.Keys) { if ($newMap.ContainsKey($key) -and $oldMap[$key] -ne $newMap[$key]) { $changed += [pscustomobject]@{ Name = $key Value = $newMap[$key] # store NEW trimmed value } } } # Save XML diff files to the script’s folder (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 "Created added.xml, removed.xml, changed.xml in $OutDir" -ForegroundColor Green

Leave your comment
*
Only registered users can leave comments.