Translate a .NET app into Spanish: localising your .resx files
Upload your .NET resource files and Manuce translates the values of each <data> element into Spanish, returning the same .resx with keys, comments, encoding and non-text resources untouched. A report lists every string left as it was and why. You then name the file for the right culture and check the UI.
What it costs
For the language files of a .NET app totalling about 2,000 words, into Spanish:
To understand, internal use.
Ready to send, by the technical specialist.
Cross-checked. For documents that commit you.
Price for one language, original layout included. VAT not applicable — article 293 B of the French General Tax Code (CGI). The exact quote, based on your file's word count, is shown before you pay.
What changes when a .NET interface moves to Spanish
Spanish runs longer than English. In a WinForms or WPF app with fixed-width labels, Settings becomes Configuración and Sign in becomes Iniciar sesión, so buttons and grid columns sized for English will clip or overflow.
Three Spanish-specific decisions to make before translating:
- Opening punctuation. Questions and exclamations open with
¿or¡:Delete this file?becomes¿Eliminar este archivo?. If your code appends the question mark itself, the opening mark has nowhere to go. - Register.
Introduce tu contraseña(informal tú, common in consumer apps in Spain) orIntroduzca su contraseña(formal usted, usual in business software and much of Latin America). Mixing them across screens is immediately noticeable. - Variant.
ordenadororcomputadora,ficheroorarchivo,móvilorcelular: decide whether you are targeting Spain, Mexico or a neutral Spanish.
Numbers and dates belong to the .NET culture, not to the translation: under es-ES, {0:N2} renders 1.234,56; under es-MX, 1,234.56. Never hard-code a format inside a resource value.
Composite strings, plurals and grammatical gender
String.Format placeholders are positional, so Spanish can reorder the sentence: {0} of {1} items selected becomes {0} de {1} elementos seleccionados, and {1:d} keeps its format specifier. Every {n} in the source must appear in the translation, no more and no fewer.
.resx has no plural mechanism, so most projects use one key per form, such as FilesCount_One and FilesCount_Other. CLDR gives Spanish three categories: one, many and other. One covers 1 (1 archivo), other covers 0 and everything else (0 archivos, 3 archivos), and many applies to round millions, which take de: 1 millón de archivos. If your counters can reach that range, a simple one-or-other switch is not enough.
Gender is the commonest trap in .NET code that assembles labels. New {0} gives Nueva carpeta but Nuevo documento; {0} saved gives Carpeta guardada but Documento guardado. One value cannot serve both, so create a key per object (NewFolder, NewDocument) rather than a shared template.
What Manuce returns, and what it does not do
In a .resx file, Manuce translates the values of <data> elements and reads <comment> entries as context. You get the same file back: indentation, key order, quotes, comments, line endings, encoding and BOM preserved; only the values change. Accented letters and ñ are written in the file's original encoding.
Left untranslated: keys, empty values, URLs, email addresses, numbers, colours, date formats such as dd/MM/yyyy, identifiers and anything marked as non-translatable. Non-text resources stay intact, including the size and location entries stored in a WinForms form's .resx.
Each translated value is checked against the source. If a {0} or a tag goes missing or appears from nowhere and the mismatch persists, the source value is kept and the report says so, so you know exactly which strings are still in the original language.
What Manuce does not do: resize controls, rename the file, build satellite assemblies or change your code (concatenation, plural logic). Nor does it produce sworn or certified translations; if your app ships a licence agreement or terms with legal weight, have those reviewed separately.
Preparing your .resx files and checking the result
Before uploading:
- Replace concatenation such as
"Delete " + name + "?"with a full value and a placeholder:Delete {0}?, which can become¿Eliminar {0}?. - Comment ambiguous entries: is
Opena button verb (Abrir) or a status (Abierto,Abierta)? Note the register and variant you want there as well. - Mark product names and internal codes as non-translatable.
After delivery:
- Save the file under its culture name:
Strings.es.resxfor shared Spanish, orStrings.es-ES.resx/Strings.es-MX.resxfor a variant. .NET falls back fromes-MXtoes, then to the neutral resources. - Read the report and deal with any strings kept in the source language.
- Run the app with
CurrentUICultureset toes-ESand walk through each screen: clipped labels, missing¿, inconsistent register. - Check menu access keys:
&Archivoand&Ayudashare a letter, which is whyAy&udais common.
In practice
- Replace concatenated strings with full values using {0} and comment any ambiguous entries.
- Upload your .resx files: the quote reflects the exact word count of the values, and a free sample shows the quality.
- Download the translated .resx and the report of strings left unchanged.
- Name it Strings.es.resx (or es-ES, es-MX), rebuild and test the UI under a Spanish culture.
Frequently asked questions
Should I target Spain or Latin American Spanish?
It depends on your users. A Strings.es.resx file acts as a shared base that .NET uses for both es-ES and es-MX when no more specific file exists. If you need both variants, keep two separate files and state the intended variant in the comments.
Can WinForms form .resx files be translated?
Yes: text values are translated, while non-text resources such as control sizes and positions stay intact. Because Spanish runs longer than English, check fixed-width labels afterwards; Manuce does not resize controls.
What happens if a {0} placeholder is lost in translation?
Every translated value is compared with the source. If a placeholder or tag mismatch persists, the source value is kept and flagged in the report, so you can handle that string yourself.
Are keys and comments included in the word count?
No. Pricing is based on the words in the values; keys and tags are excluded. Comments are used as translation context and returned unchanged.
How do I handle Spanish plurals in .resx?
.resx has no built-in plurals, so your code needs one key per form. Spanish uses the CLDR categories one, many and other, with many covering round millions ("1 millón de archivos"). Manuce translates every key you supply but does not change your selection logic.
The specialist in charge
This subject goes to Dédale, the technical specialist. See how it works.
The same file, into another language
Into Spanish, other files
See also
Try it on your own file, free
A sample of your file translated at the level you choose, before any payment. You judge, then you decide.