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.
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
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:
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:
6. Confirmar que todos os ficheiros estão presentes
No PowerShell, executa:
Deves ver:
-
nop-lang-compare.ps1
-
old.xml
-
new.xml

7. Executar o Script
Executar:

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
