Repository: tauri-apps/tauri (language: rust)

Issue:
[feat] add [Portuguese] language in NSIS available language
### Describe the problem

![image](https://github.com/user-attachments/assets/4ad41cb8-2860-4c66-9a61-6f464a06ee5c)

This language is available in the specified url. This is the tauri.conf.json

```json
"windows": {
  "nsis": {
    "languages": ["French", "English", "Portuguese", "Spanish"]
  }
}
```

I only have the warning for Portuguese

### Describe the solution you'd like

Add this language to the available list removing the warning

### Alternatives considered

_No response_

### Additional context

_No response_
[feat] add [Portuguese] language in NSIS available language
### Describe the problem

![image](https://github.com/user-attachments/assets/4ad41cb8-2860-4c66-9a61-6f464a06ee5c)

This language is available in the specified url. This is the tauri.conf.json

```json
"windows": {
  "nsis": {
    "languages": ["French", "English", "Portuguese", "Spanish"]
  }
}
```

I only have the warning for Portuguese

### Describe the solution you'd like

Add this language to the available list removing the warning

### Alternatives considered

_No response_

### Additional context

_No response_


Discussion / hints:
we have `PortugeseBR`, but we didn't get any PRs for just `Portugese`, would you be willing to open a PR for it? it is a simple as translating this file https://github.com/tauri-apps/tauri/blob/dev/crates/tauri-bundler/src/bundle/windows/nsis/languages/English.nsh.
I'm on it, PR is coming. Let me know if the PR follows the guidelines.
Thank you
we have `PortugeseBR`, but we didn't get any PRs for just `Portugese`, would you be willing to open a PR for it? it is a simple as translating this file https://github.com/tauri-apps/tauri/blob/dev/crates/tauri-bundler/src/bundle/windows/nsis/languages/English.nsh.
I'm on it, PR is coming. Let me know if the PR follows the guidelines.
Thank you

Fix patch:
diff --git a/.changes/bundler-nsis-portuguese.md b/.changes/bundler-nsis-portuguese.md
new file mode 100644
index 000000000000..e0a586c38380
--- /dev/null
+++ b/.changes/bundler-nsis-portuguese.md
@@ -0,0 +1,8 @@
+---
+"tauri-bundler": "patch:enhance"
+"tauri-cli": "patch:enhance"
+"@tauri-apps/cli": "patch:enhance"
+---
+
+Add support for `Portuguese` language for NSIS windows installer.
+
diff --git a/crates/tauri-bundler/src/bundle/windows/nsis/languages/Portuguese.nsh b/crates/tauri-bundler/src/bundle/windows/nsis/languages/Portuguese.nsh
new file mode 100644
index 000000000000..59ff992dec8c
--- /dev/null
+++ b/crates/tauri-bundler/src/bundle/windows/nsis/languages/Portuguese.nsh
@@ -0,0 +1,27 @@
+LangString addOrReinstall ${LANG_PORTUGUESE} "Adicionar/Reinstalar componentes"
+LangString alreadyInstalled ${LANG_PORTUGUESE} "Já instalado"
+LangString alreadyInstalledLong ${LANG_PORTUGUESE} "${PRODUCTNAME} ${VERSION} já está instalado. Selecione a operação que deseja realizar e clique em Seguinte para continuar."
+LangString appRunning ${LANG_PORTUGUESE} "${PRODUCTNAME} está em execução! Por favor, feche-o primeiro e tente novamente."
+LangString appRunningOkKill ${LANG_PORTUGUESE} "${PRODUCTNAME} está em execução!$\nClique em OK para encerrá-lo."
+LangString chooseMaintenanceOption ${LANG_PORTUGUESE} "Escolha a opção de manutenção a realizar."
+LangString choowHowToInstall ${LANG_PORTUGUESE} "Escolha como deseja instalar o ${PRODUCTNAME}."
+LangString createDesktop ${LANG_PORTUGUESE} "Criar atalho no ambiente de trabalho"
+LangString dontUninstall ${LANG_PORTUGUESE} "Não desinstalar"
+LangString dontUninstallDowngrade ${LANG_PORTUGUESE} "Não desinstalar (Instalar uma versão anterior sem desinstalar está desativado neste instalador)"
+LangString failedToKillApp ${LANG_PORTUGUESE} "Falha ao encerrar ${PRODUCTNAME}. Por favor, feche-o primeiro e tente novamente."
+LangString installingWebview2 ${LANG_PORTUGUESE} "A instalar WebView2..."
+LangString newerVersionInstalled ${LANG_PORTUGUESE} "Uma versão mais recente do ${PRODUCTNAME} já está instalada! Não é recomendada a instalação de uma versão mais antiga. Se realmente deseja instalar esta versão mais antiga, é melhor desinstalar a versão atual primeiro. Selecione a operação que deseja realizar e clique em Seguinte para continuar."
+LangString older ${LANG_PORTUGUESE} "mais antiga"
+LangString olderOrUnknownVersionInstalled ${LANG_PORTUGUESE} "Uma versão $R4 do ${PRODUCTNAME} está instalada no sistema. Recomenda-se desinstalar a versão atual antes de instalar. Selecione a operação que deseja realizar e clique em Seguinte para continuar."
+LangString silentDowngrades ${LANG_PORTUGUESE} "Rebaixamentos estão desativados neste instalador, não é possível prosseguir com a instalação silenciosa. Por favor, utilize o instalador com interface gráfica.$\n"
+LangString unableToUninstall ${LANG_PORTUGUESE} "Não foi possível desinstalar!"
+LangString uninstallApp ${LANG_PORTUGUESE} "Desinstalar ${PRODUCTNAME}"
+LangString uninstallBeforeInstalling ${LANG_PORTUGUESE} "Desinstalar antes de instalar"
+LangString unknown ${LANG_PORTUGUESE} "desconhecida"
+LangString webview2AbortError ${LANG_PORTUGUESE} "Falha ao instalar o WebView2! A aplicação não pode ser executada sem ele. Tente reiniciar o instalador."
+LangString webview2DownloadError ${LANG_PORTUGUESE} "Erro: Falha ao transferir o WebView2 - $0"
+LangString webview2DownloadSuccess ${LANG_PORTUGUESE} "Bootstrapper do WebView2 transferido com sucesso"
+LangString webview2Downloading ${LANG_PORTUGUESE} "A transferir o Bootstrapper do WebView2..."
+LangString webview2InstallError ${LANG_PORTUGUESE} "Erro: Instalação do WebView2 falhou com o código $1"
+LangString webview2InstallSuccess ${LANG_PORTUGUESE} "WebView2 instalado com sucesso"
+LangString deleteAppData ${LANG_PORTUGUESE} "Eliminar os dados da aplicação"
diff --git a/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs b/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs
index 810141214c5c..2d1f70d8e952 100644
--- a/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs
+++ b/crates/tauri-bundler/src/bundle/windows/nsis/mod.rs
@@ -697,6 +697,7 @@ fn get_lang_data(lang: &str) -> Option<(String, &[u8])> {
     "persian" => include_bytes!("./languages/Persian.nsh"),
     "turkish" => include_bytes!("./languages/Turkish.nsh"),
     "swedish" => include_bytes!("./languages/Swedish.nsh"),
+    "portuguese" => include_bytes!("./languages/Portuguese.nsh"),
     _ => return None,
   };
   Some((path, content))


Test patch: