Skip to content

feat(agent,agent-installer): add Swedish localization - #2031

Merged
Benoît Cortier (CBenoit) merged 2 commits into
masterfrom
thenextman-swedish-installer-localization
Oct 5, 2026
Merged

Benoît Cortier (CBenoit) merged 2 commits into
masterfrom
thenextman-swedish-installer-localization

Conversation

@thenextman

@thenextman Richard Markiewicz (thenextman) commented Oct 5, 2026 •

Copy link
Copy Markdown
Member

Devolutions Agent now installs in Swedish on systems using a Swedish UI language, and the Desktop Agent tray menu and messages are translated.
Swedish was contributed by Daniel Nylander.

Co-authored-by: Daniel Nylander github@danielnylander.se

Copilot AI balanced review requested due to automatic review settings October 5, 2026 13:23
@thenextman

Richard Markiewicz (thenextman) commented Oct 5, 2026 •

Copy link
Copy Markdown
Member Author

Implementation notes (supersedes #1984):

  • The sv-SE installer strings are now Strings_sv-SE.json, converted from feat(agent): add Swedish Desktop Agent localization #1984's hand-written .wxl so the translations are unchanged except FeatureSessionDescription, which was updated to match the current English text. DevolutionsAgent_sv-se.wxl is generated by the T4 template, not hand-edited.
  • feat(agent): add Swedish Desktop Agent localization #1984's .wxl would have failed the full MSI build: WiX 3's firewall extension only ships strings for a few cultures, so light rejects sv-SE with LGHT0102 unless the dialogs.firewall strings are defined. They are now translated, as already done for fr-FR.
  • New package/Update-InstallerLocalization.ps1 runs the T4 templates headlessly with Visual Studio's TextTransform.exe, since $(SolutionDir) is not expanded outside VS. It normalizes line endings and keeps BOMs. Regenerating en-US/fr-FR/de-DE reproduces the committed files, so there is no drift apart from the new "generated, do not edit" header comment in the template output.
  • Program.cs picks the installer UI language through a switch on the two-letter language code, like the Gateway installer.
  • ci/package-assembled.ps1 (the local assemble script described in ci/README.md) was hardcoded to fr-FR. It now loops over Get-GatewayPackageLanguages/Get-PackageLanguages, so it also embeds the Gateway de-DE transform. The signed CI flow in package.yml does not use this script: it calls tlk.ps1 package -PackageOption generate|assemble, which already loops over the language lists, so adding sv-SE to tlk.ps1 is what covers it. The Gateway path was not run locally.
  • Resources.sv.resx for the Desktop Agent is taken unchanged from feat(agent): add Swedish Desktop Agent localization #1984. It is a regular .NET satellite resource, and the installer already harvests the sv folder.
  • Agent guidance: a section in AGENTS.md, a new installer-localization skill, and a Localization section in the installer README.

Testing:

  • Regenerated all T4 output and confirmed a clean diff.
  • Built the Agent MSI with dummy payloads: the full build embeds the 1036 and 1053 transforms with package languages 1033,1036,1053, and ci/package-assembled.ps1 agent produces the same result.
  • Built the Desktop Agent and confirmed an sv satellite is produced.

I did not add a CI check that fails when generated files drift. It would need a Windows runner with Visual Studio's text templating component.

Note

Human-tuned, LLM-assisted content.

@github-actions

github-actions Bot commented Oct 5, 2026

Copy link
Copy Markdown

Let maintainers know that an action is required on their side

  • Add the label release-required Please cut a new release (Devolutions Gateway, Devolutions Agent, Jetsocat, PowerShell module) when you request a maintainer to cut a new release (Devolutions Gateway, Devolutions Agent, Jetsocat, PowerShell module)

  • Add the label release-blocker Follow-up is required before cutting a new release if a follow-up is required before cutting a new release

  • Add the label publish-required Please publish libraries (`Devolutions.Gateway.Utils`, OpenAPI clients, etc) when you request a maintainer to publish libraries (Devolutions.Gateway.Utils, OpenAPI clients, etc.)

  • Add the label publish-blocker Follow-up is required before publishing libraries if a follow-up is required before publishing libraries

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The Windows-only T4 generation and MSI transform embedding paths require confirmation from CI artifacts.

Review effort: Balanced
Findings: None

What changed in this PR

Adds Swedish localization for the Agent installer and Desktop Agent, while generalizing multilingual MSI assembly. No material static-review findings were identified.

Changes:

  • Adds Swedish installer and tray resources.
  • Embeds all configured language transforms.
  • Documents and automates localization generation.
File Description
package/​WindowsManaged/​Resources/​Strings.g.tt Adds generated-file notice.
package/​WindowsManaged/​Resources/​DevolutionsGateway_fr-fr.wxl Regenerates French localization.
package/​WindowsManaged/​Resources/​DevolutionsGateway_en-us.wxl Regenerates English localization.
package/​WindowsManaged/​Resources/​DevolutionsGateway_de-de.wxl Regenerates German localization.
package/​WindowsManaged/​README.md Documents localization workflow.
package/​Update-InstallerLocalization.ps1 Adds localization regeneration script.
package/​AgentWindowsManaged/​Resources/​Strings.g.tt Registers Swedish generation.
package/​AgentWindowsManaged/​Resources/​Strings_sv-SE.json Adds Swedish installer strings.
package/​AgentWindowsManaged/​Resources/​DevolutionsAgent_sv-se.wxl Adds generated Swedish WiX localization.
package/​AgentWindowsManaged/​Resources/​DevolutionsAgent_fr-fr.wxl Regenerates French localization.
package/​AgentWindowsManaged/​Resources/​DevolutionsAgent_en-us.wxl Regenerates English localization.
package/​AgentWindowsManaged/​README.md Documents Agent regeneration command.
package/​AgentWindowsManaged/​Program.cs Selects and embeds Swedish localization.
package/​AgentWindowsManaged/​DevolutionsAgent.csproj Embeds the Swedish WiX resource.
package/​AgentWindowsManaged/​.gitignore Ignores Swedish build outputs.
dotnet/​DesktopAgent/​Properties/​Resources.sv.resx Adds Swedish Desktop Agent strings.
ci/​tlk.ps1 Registers Swedish packaging metadata.
ci/​package-assembled.ps1 Embeds every configured transform.
ci/​package-agent-windows.ps1 Updates generated-output documentation.
ci/​Build/​Build.psm1 Adds Swedish to Agent languages.
AGENTS.md Establishes localization conventions.
.agents/​skills/​installer-localization/​SKILL.md Adds installer-localization workflow guidance.

💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Devolutions Agent now installs in Swedish on systems using a Swedish
UI language, and the Desktop Agent tray menu and messages are
translated. Swedish was contributed by Daniel Nylander.

Issue: #1983

Co-authored-by: Daniel Nylander <github@danielnylander.se>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@thenextman
Richard Markiewicz (thenextman) force-pushed the thenextman-swedish-installer-localization branch from f395591 to 58fc00b Compare October 5, 2026 13:32
@thenextman Richard Markiewicz (thenextman) changed the title feat(installer,agent,agent-installer): add Swedish localization feat(agent,agent-installer): add Swedish localization Oct 5, 2026
@thenextman

Copy link
Copy Markdown
Member Author

Copilot review overview

🔵 Needs a closer look

The Windows-only T4 generation and MSI transform embedding paths require confirmation from CI artifacts.

I ran the .msi from CI with ProductLanguage=1053 and confirmed the localization for the installer looks good

Comment thread AGENTS.md Outdated
Comment on lines +40 to +50
#### Windows installer localization
The installer strings under `package/WindowsManaged/Resources` and `package/AgentWindowsManaged/Resources` are generated.
**Never edit `*.wxl` or `Strings.g.cs` by hand.**
Edit `Strings_<culture>.json` (`en-US` is the source of truth), then regenerate:
```powershell
package\Update-InstallerLocalization.ps1
```
Commit the JSON and the regenerated files together, and make sure regeneration leaves no further diff.
Missing keys in a non-English JSON fall back to English.
To add a language, follow `.agents/skills/installer-localization/SKILL.md`.
The `Resources.<culture>.resx` files of the Desktop Agent are ordinary .NET satellite resources and are edited directly.

@CBenoit Benoît Cortier (CBenoit) Oct 5, 2026 •

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: This is already a problem today, as-is, but I want to reduce the size of the AGENTS.md file in favor of smaller, targeted skills.

suggestion: Since you already added a skill, there is low value to this being here, and I suggest we don’t grow the top-level AGENTS.md file further.
As an alternative, I think it could be good to have that in a different AGENTS.md file living under package/ instead, or even better: under AgentWindowsManaged and WindowsManaged (duplicate the contents).

The reason is that I want to split Gateway and Agent in two repos, and these instructions are almost always relevant when modifying the installer specifically, and much less so when modifying the linux/Docker packages

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed, thanks!

@CBenoit Benoît Cortier (CBenoit) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

…ojects

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@CBenoit
Benoît Cortier (CBenoit) enabled auto-merge (squash) October 5, 2026 15:06
@CBenoit
Benoît Cortier (CBenoit) merged commit f13a9a1 into master Oct 5, 2026
45 checks passed
@CBenoit
Benoît Cortier (CBenoit) deleted the thenextman-swedish-installer-localization branch October 5, 2026 15:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants