ManuceTranslate a fileTranslate a Symfony app into Spanish

Translate a Symfony app into Spanish

Upload your Symfony translation file, in XLIFF or YAML, in whatever language your app is written in. Manuce returns the same file with Spanish values, every parameter checked against the source, and a report of anything left as it was. Rename it to messages.es.xlf, drop it into translations/ and clear the cache.

Upload my file See pricing

What it costs

For the language files of a Symfony app totalling about 3,000 words, into Spanish:

Essentiel
€18

To understand, internal use.

Professional
€54

Ready to send, by the technical specialist.

Premium
€105

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 Symfony interface goes Spanish

Spanish uses the Latin script and reads left to right, so the layout survives. The friction is elsewhere, often in Twig templates written with English in mind.

  • Opening punctuation. Questions start with « ¿ » and exclamations with « ¡ »: Delete this item? becomes ¿Eliminar este elemento?. If a template appends the question mark outside the string, as in {{ 'confirm.delete'|trans }}?, the Spanish will look broken. Keep punctuation inside the translated value.
  • Length. Spanish runs longer than English, roughly like French: Sign in becomes Iniciar sesión, Settings becomes Configuración. Leave room in buttons, tabs and table headers.
  • Form of address. Many Spanish apps use informal tú (Introduce tu contraseña); banking or public-sector tools often prefer usted (Introduzca su contraseña). For the plural, Spain uses vosotros, Latin America ustedes.
  • Gender. Welcome, %name% is Bienvenido or Bienvenida. Either add an ICU select on gender in your source, or use a neutral phrasing such as Hola, %name%.
  • Vocabulary. ordenador or computadora, móvil or celular: decide on your market first.

Plurals, ICU messages and number formats

Symfony supports two plural syntaxes, and Spanish behaves differently in each.

  • Legacy pipe syntax: {0} No hay mensajes|{1} Un mensaje|]1,Inf[ %count% mensajes. The intervals stay exactly as they are; only the text changes.
  • ICU format, in a messages+intl-icu.es.xlf file: {count, plural, one {# archivo} other {# archivos}}. Spanish has three CLDR categories: one, many and other. many only applies to very large round numbers, as in un millón de archivos; other is mandatory and acts as the fallback. A source with just one and other therefore works correctly in Spanish.

Never hard-code numbers or dates inside a string. Spain writes 12.345,67, Mexico 12,345.67: let the Intl extension's format_number and format_date filters handle it per locale. Manuce does not translate numbers or date formats found in values anyway.

What Manuce returns, and what it does not do

Manuce handles translations/messages.<locale>.xlf and .yaml files. You get back the same file in the same format: indentation, key order, quotes, comments, line endings, encoding and BOM are preserved; only the values change.

  • Parameters such as %name%, %count% and {name} are checked: every translated value is compared with the source, variables and tags included. If a mismatch persists, the source value is kept and the report says so.
  • Left untranslated: keys (user.profile.title), empty values, URLs, email addresses, numbers, colours, date formats, identifiers and anything you mark as non-translatable.
  • The report lists translated strings and those left as they were, with the reason.
  • Pricing counts the words in values only, keys and tags excluded; Spanish is charged at the base rate (×1 coefficient).

Manuce does not extract strings from your Twig templates or PHP code, create keys, edit config/packages/translation.yaml, or restructure a string to add a gender select. Nor does it produce sworn translations: if your terms of sale need a certified version for a Spanish-speaking market, you will need a sworn translator.

Preparing the file and checking the result

Before uploading:

  • Run php bin/console translation:extract on your most up-to-date locale so recently added strings are included.
  • Skip Symfony's built-in validators and security messages: Spanish versions already ship with the framework. Only your own domains and custom constraint messages need translating.
  • Mark brand or plan names (Pro, Team) as non-translatable if they must stay unchanged.

After delivery:

  • Rename the file to messages.es.xlf or messages.es.yaml. In XLIFF, adjust the target-language attribute if your tooling relies on it; Symfony itself reads the locale from the file name.
  • For Latin America, keep the full text in es and put only the differences (computadora, celular) in messages.es_MX.xlf: Symfony falls back to es for everything else.
  • Add es to enabled_locales, clear the cache, then check your densest screens and any confirmation starting with « ¿ ».
  • Read the report: a string left in the source language usually points to a variable worth checking.

In practice

  1. Generate a complete source translation file (XLIFF or YAML) with translation:extract.
  2. Upload it to Manuce and review the quote and the free Spanish sample.
  3. Download the translated file and its report of strings left unchanged.
  4. Rename it to messages.es.xlf or .yaml and place it in translations/.
  5. Enable the es locale, clear the cache and test your busiest screens.

Frequently asked questions

Should I target Spain or Latin America?

It depends on your users: vocabulary (ordenador or computadora) and the plural form of address (vosotros or ustedes) differ. In Symfony, a practical approach is a complete es file plus an es_MX file holding only the strings that change. Manuce translates the file you upload; it does not generate a second regional variant on its own.

Will %count% and {name} survive translation?

Yes, they are checked: each translated value is compared with the source, variables and tags included. If a mismatch persists, the source value is kept and flagged in the report, so nothing breaks on screen.

Do I need to translate validators.es.xlf?

Not for Symfony's own messages, which the Validator component already provides in Spanish. Messages for your custom constraints, if they live in your validators domain, do need translating like the rest.

My source is French or German, not English. Is that a problem?

No. You upload the translation file in its existing language and receive the Spanish version in the same format, XLIFF or YAML, with structure, quotes and comments intact. Pricing is based on the words in values only.

Can I judge the quality before paying?

Yes. On upload you get a quote based on the exact word count and a free sample: one paragraph of your file translated at the level you choose. Payment comes after that, before the work starts.

The specialist in charge

This subject goes to Dédale, the technical specialist. See how it works.

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.

Upload my file