How to Translate .resx Files in a .NET Project
Resx files hold strings, images and files in one XML schema. Translating the wrong node type is what corrupts them as well across the whole state.

Quick answer — A .resx file is XML holding named resources — strings, but also embedded images and file references. Only string values get translated, the name attribute is the lookup key, and the satellite assembly naming decides whether .NET ever loads the result.
Not every resource is a string
Resx is a general resource container. Most entries are <data> nodes holding text, but the same file can hold embedded images, icons and binary blobs referenced through <data type=...> with a mimetype. A process that treats the whole file as text will attempt to translate a base64-encoded icon. The result is a corrupt resource and a runtime exception.
Filter to string nodes before anything else.
The name attribute is the key
<data name="Checkout_Submit"> is what the code requests through the resource manager. The child <value> is what a user reads.
Same rule as every other resource format, and the same silent failure when it is broken: a missing key falls back to the neutral culture and the string appears in English.
Satellite assemblies and culture codes
.NET compiles translated resx files into satellite assemblies organised by culture — fr, fr-CA, pt-BR. The folder and file naming has to match the culture the application requests. Neutral versus specific cultures matter here. A fr resource serves both France and Canada unless a fr-CA exists, which is a useful fallback chain and a common source of confusion when a specific culture is expected and a neutral one is found.
Placeholders are composite format items
.NET uses {0}, {1}, and increasingly interpolated strings. In resx the composite format items must survive exactly, and their order can change for word order while their indices stay bound to their arguments.
Braces intended as literal text must be doubled — {{ — and translations that introduce an unescaped brace throw a format exception at runtime rather than displaying wrongly.
Designer files are generated
Resources.Designer.cs is generated from the resx and provides strongly typed access. It should never be edited by hand and never translated. If it appears in a translation scope, the scope is wrong.
Why the incremental case dominates
Enterprise .NET applications carry very large resource sets that change a little each release. translation memory makes the recurring cost proportional to the diff rather than the bundle, and keeps a term identical across every screen that uses it.
The route through
Upload the resx set, filter to string nodes, lock the name attributes, protect format items, translate, and confirm the culture naming on export. document translation handles the XML and quality control verifies the format items.
Schema and naming specifics are on the resx translation integration page.
WinForms designers store layout in the resource file
In older WinForms projects the designer writes control positions and sizes into the resx alongside the strings. Translated text that runs longer does not reflow, and the control keeps whatever width the designer recorded.
That is why some translated desktop applications show truncated button labels. The string is correct and the layout value sitting beside it was never revisited.
Where to start
Build one satellite assembly and switch the culture at runtime. If the strings change, the naming is right and the rest is volume.
FAQ
What should be translated in a .resx file? Only string values. The same file can hold embedded images and binary blobs, and a process that treats everything as text will try to translate a base64-encoded icon, producing a corrupt resource.
What is the name attribute for? It is the lookup key the resource manager requests. Changing it means the key is not found, so .NET falls back to the neutral culture and the string appears in English with no error.
How does .NET decide which translation to load? Through satellite assemblies organised by culture code. A neutral culture like fr serves both France and Canada unless a specific fr-CA exists, which is a useful fallback and a frequent source of confusion.
Why does a translation throw a format exception? Usually an unescaped brace. Composite format items like 0 must survive exactly and literal braces must be doubled, so a translation that introduces a stray brace fails at runtime rather than displaying wrongly.
Our blog
Lastest blog posts
Tool and strategies modern teams need to help their companies grow.

Automotive
Automotive Brochure Localization by Market
A car brochure is a spec grid, a legal footer and a photo library, all market-specific. What actually has to change, and why the layout decides the schedule.

Automotive
Automotive Campaign Localization Across Markets
Campaigns run through national companies and dealer networks, so one master becomes hundreds of files. Where the offer text and the disclaimers actually break.

Automotive
Car Service Manual Translation for Technicians
A workshop manual is read mid-repair by someone with the car on a lift. What that demands of procedures, torque figures and fault codes, in every language.