Upload your .resx resource files, translate values while keeping the original comments, and export a file your .NET project can load directly.
<?xml version="1.0" encoding="utf-8"?>
<root>
<data name="WelcomeMessage" xml:space="preserve">
<value>Witamy w naszej aplikacji!</value>
<comment>Shown on the home screen after sign-in.</comment>
</data>
<data name="SubmitButton" xml:space="preserve">
<value>Wyślij</value>
<comment>Text on the submit button.</comment>
</data>
<data name="ExitConfirmation" xml:space="preserve">
<value>Czy na pewno chcesz wyjść?</value>
<comment>Shown before closing an unsaved form.</comment>
</data>
<data name="FoundFilesPlural" xml:space="preserve">
<value>{0} plików znaleziono</value>
<comment>Plural form, workaround via a separate key.</comment>
</data>
</root>A RESX file is XML, but the part that matters for translators is the <data> element: a name, a value, and an optional comment. One RESX file holds one language, so a neutral Strings.resx sits next to Strings.pl.resx, Strings.de.resx and so on.
The <comment> element already does the job most other formats need a separate metadata field for: it gives translators context right next to the value they are editing, with no extra setup on your side. RESX itself has no built-in plural syntax, so pluralized strings are typically split into separate keys, one per form.
<data name="FoundFile" xml:space="preserve">
<value>1 file found</value>
</data>
<data name="FoundFiles" xml:space="preserve">
<value>{0} files found</value>
</data>Beyond name and value
The comment element under each key becomes translator-facing context, automatically.
Leading and trailing whitespace in a value is respected, matching what the attribute signals.
Quotes, ampersands and angle brackets in a value are escaped correctly on export.
End-to-end workflow
Upload a neutral Strings.resx file, translate values while keeping the original comments, and export one file per culture, ready to drop into your .NET project.
simplelocalize upload \
--apiKey PROJECT_API_KEY \
--uploadFormat resx \
--uploadLanguageKey en \
--uploadPath ./Strings.resxStrings.resx to SimpleLocalize with the CLI. Every <comment> comes along automatically as context for the corresponding key.Key: WelcomeMessage
Source: Witamy w naszej aplikacji!
Context: Shown on the home screen after sign-in.<data name="SubmitButton" xml:space="preserve">
<value>Senden</value>
</data>simplelocalize download \
--apiKey PROJECT_API_KEY \
--downloadFormat resx \
--downloadPath ./Strings.{lang}.resxStrings.pl.resx, Strings.de.resx and so on, ready to sit next to your neutral resource file with no renaming step.For developers
No mapping step between your resource files and the editor: upload a RESX file and translators already have what they need.
The comment field in each data node is imported as context for the corresponding key, with no configuration needed.
Values containing quotes, ampersands or angle brackets are escaped correctly on export, so the resource file stays valid XML.
Translate new and changed values with DeepL, Google Translate, OpenAI, Claude or Gemini, with the original comment available as context.
Upload and download RESX files from the CLI, or automate the same import and export logic through the REST API.

More conversions
Free online converter, no account required. Upload a .resx file and download it in the format you need.
More on localization workflows and translation file formats.

Stop treating translation as a manual step before release. Learn how to trigger AI translations automatically on every GitHub push, using SimpleLocalize CLI or the GitHub App.

Machine translation often breaks UI strings through missing context, character limits, and grammar rules other languages don't follow. Here's why, and how to fix it.

Why context is the single biggest factor in AI translation quality, and how to structure project context, key descriptions, and glossaries for accurate results.
It is imported as context for the corresponding key and shown to translators in the editor. It is preserved on export.
Not natively. RESX has no built-in plural syntax, so the common approach is separate keys per plural form, the same pattern you would already use in your .NET code.
ASP.NET Core, Blazor, MAUI and WPF all use RESX as their standard localization resource format.