If you build applications with .NET, your user-facing text probably lives in RESX files. They are the standard way to store strings, images and other resources in ASP.NET, Blazor, WPF and WinForms projects, and they are the starting point for localizing a .NET application. This guide explains what a RESX file is, how .NET picks the right language and how to translate RESX files safely.
What Is a RESX File?
A RESX file is an XML-based resource file used by .NET. It stores named resources, mostly strings, as <data> elements. Each entry has a name attribute, a <value> with the text and an optional <comment> for developers or translators. Microsoft documents the format and the resource system in its guide to resources in .NET apps.
How .NET Localization With RESX Works
You create one default resource file, for example Resources.resx, and one file per language with the culture code in the name, such as Resources.de.resx or Resources.fr-CA.resx. When the app builds, .NET compiles the default file into the main assembly and each language into a satellite assembly.
At runtime, the ResourceManager looks for a string in the current UI culture. If fr-CA is missing a value, it falls back to fr, and then to the default file. This fallback chain means a missing translation never crashes the app; users simply see the default language.
What Translators Need to Know About RESX
- Only translate the value. The
nameattribute is the key used in code and must never change. - Use comments as context. A good comment explains where the string appears and any length limits.
- Keep placeholders. .NET uses composite formatting such as
{0}and{1}. They must remain in the translation, although their order can change. - Watch XML escaping. Characters like
&and<must stay correctly escaped. - Skip non-text resources. Images, icons and file references are usually not translated.
Step-by-Step: Translating RESX Files
- Clean the source. Remove unused keys, add comments to unclear strings and avoid concatenated sentences in code.
- Extract the strings. Export the translatable values to a format your translation tool supports, such as XLIFF, CSV or XLSX, or use a tool that reads RESX directly.
- Translate with protection. Use a CAT tool that locks keys and placeholders and applies translation memory and a glossary.
- Run QA. Check for missing placeholders, broken escaping and untranslated values.
- Rebuild the language files with the correct culture names and add them to the project.
- Test in each culture. Switch the UI culture and check layout, dates, numbers and text length.
Common RESX Localization Mistakes
| Mistake | Result |
|---|---|
Translating the name attribute |
The app cannot find the string and shows the default text |
| Wrong culture code in the file name | The language file is ignored |
| Missing or reordered placeholders without numbers | Runtime format errors or wrong values |
| Broken XML escaping | Build errors |
| Sentences built from several resources | Grammatically wrong translations |
Beyond RESX: Formatting and Culture
Translating strings is only part of the job. Use culture-aware formatting for dates, numbers and currencies, design layouts that allow for text expansion and test right-to-left languages if you support them. If you are new to these concepts, our article on internationalization vs localization is a good place to start, and localization testing explains how to catch issues before release.
How WordBeam Helps .NET Teams
WordBeam imports XLIFF, CSV, XLSX and JSON, so RESX strings can be exported to a supported format, translated in the CAT editor with keys and placeholders protected, and rebuilt into RESX files. Translation memory keeps repeated strings consistent between releases, AI engines pre-translate new text, and QA checks catch broken placeholders before they reach your build. It is a practical setup for software localization in the .NET ecosystem.
Frequently Asked Questions
How do I open a RESX file?
Visual Studio opens RESX files in a resource editor. Because the format is XML, any text editor can also open it.
What is the difference between RESX and RESOURCES files?
RESX is the human-readable XML source. RESOURCES is a compiled binary version that is embedded in assemblies.
Where should translated RESX files go?
Next to the default file, with the culture code in the name, for example Resources.es.resx. The build process creates the satellite assemblies.