ManuceTranslate a fileTranslate a Laravel App into Spanish

Translate a Laravel App into Spanish

Upload your Laravel JSON language file and get the same file back with every value in Spanish, ready to save as lang/es.json. Keys stay exactly as they were, placeholders such as :name are checked, and a report lists what was translated and what was left alone.

Upload my file See pricing

What it costs

For the language files of a Laravel app totalling about 2,500 words, into Spanish:

Essentiel
€15

To understand, internal use.

Professional
€45

Ready to send, by the technical specialist.

Premium
€88

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 Laravel expects: a lang/es.json file

Laravel's JSON translations live in one file per language inside the lang directory (resources/lang in older versions). The key is the source sentence itself and the value is its translation: "Forgot your password?": "¿Olvidaste tu contraseña?". In a Blade view, {{ __('Forgot your password?') }} then renders the Spanish value whenever the active locale is es.

Because the key is the lookup, it must not change by a single character, or Laravel falls back to the source sentence. Manuce never touches keys; only values are translated. Your source does not have to be English: lang/de.json or lang/fr.json works the same way. If you serve several markets, Laravel happily loads lang/es.json and lang/es_MX.json side by side; each is a separate file to translate.

Parameters are prefixed with a colon: :name, :count, :attribute. Laravel also recognises :Name (capitalised) and :NAME (upper case), and the exact form must survive in Spanish even when word order changes: "Hello :name, you have :count new messages" becomes "Hola, :name. Tienes :count mensajes nuevos".

Spanish-specific traps in an interface

  • Inverted punctuation. Questions and exclamations open with ¿ or ¡: "Are you sure?" becomes "¿Estás seguro?". If a sentence is split across several keys ("Are you" + variable + "sure?"), the opening mark ends up in a different value from the closing one. Use one full sentence with a parameter instead.
  • Capitalisation. Spanish capitalises only the first word of a heading or button: "Reset Password" becomes "Restablecer contraseña". Days and months are lower case.
  • Tú or usted, Spain or Latin America. Consumer apps usually use informal tú (Inicia sesión); business tools often prefer usted (Inicie sesión). Vocabulary differs too: ordenador or computadora, móvil or celular, vosotros in Spain and ustedes elsewhere. Settle on your audience before reviewing.
  • Grammatical gender. "Welcome back, :name!" becomes "¡Bienvenido de nuevo, :name!", which is masculine. For a mixed audience, a neutral phrasing such as "¡Hola de nuevo, :name!" avoids the agreement.
  • Plurals. CLDR lists three categories for Spanish (one, many, other); many only applies to large round numbers written as words (un millón de usuarios). Laravel's plural selector uses just two forms for Spanish, so "{0} No hay mensajes|{1} Un mensaje|[2,*] :count mensajes" is enough. The number of |-separated segments should match the source.
  • Length. Spanish runs longer than English: "Settings" becomes Configuración, "Sign out" becomes Cerrar sesión. Leave room in menus, badges and buttons.

What Manuce delivers, and what it does not do

You upload your source file and receive the same file in the same format with Spanish values: indentation, key order, quotation marks, line endings, encoding and BOM are all preserved. Save it as lang/es.json and it is ready to drop into the project.

  • Every translated value is compared with its source: parameters such as :name and :count, and tags such as <strong>, must still be there. If a mismatch persists, the source value is kept and the report says so.
  • Left untouched: keys, empty values, URLs, email addresses, numbers, colours, date formats, identifiers and anything marked as non-translatable.
  • The report lists translated strings and those left as they were, with the reason.
  • Pricing is based on the words in values only, excluding keys and tags. In a Laravel JSON file, where every key repeats the source sentence, that matters: keys are not counted.

Manuce does not handle PHP array translation files (lang/en/validation.php, lang/en/auth.php and so on); convert them to JSON first. It does not scan your Blade templates either: a hard-coded sentence without __() or @lang is not in the file and will not be translated. Manuce does not produce sworn or certified translations, which is worth bearing in mind if terms and conditions stored in these files need legal standing in a Spanish-speaking country.

Preparing the project and checking the result

  1. Get every string into the JSON file. Make sure visible text goes through __(). For PHP arrays, a short script that flattens validation.php into JSON pairs and converts the translated file back does the job; community packages also ship ready-made Spanish validation messages.
  2. Pick your variant. Plain es for a broad audience, or one file per country (es_ES, es_MX, es_AR) when vocabulary and register need to differ.
  3. Ask for the free sample. One paragraph translated at your chosen level lets you judge the register (tú or usted) before paying. For a customer-facing interface, the Professional level is the one meant for text ready to hand over.
  4. Check the screens. Switch the application locale to es and click through: cramped buttons, a missing ¿ in a split sentence, feminine agreement, and any m/d/Y date format inherited from a US source, which you will need to change to d/m/Y yourself since date formats are not translated.
  5. Read the report. A value kept in the source language because a parameter went missing is easy to spot: open the relevant screen and fix that string.

In practice

  1. Put your strings in a Laravel JSON file (for example lang/en.json), converting any PHP arrays first.
  2. Upload the file to Manuce, choose Spanish and a level: the quote appears straight away.
  3. Check the free sample for register and vocabulary, then pay.
  4. Save the returned file as lang/es.json and read the report.
  5. Switch the app locale to es and review every screen.

Frequently asked questions

My translations are in lang/en/*.php. Can Manuce handle them?

No, PHP array files are not supported. Convert them to JSON first, for instance with a small script that flattens nested keys, then convert the translated file back. A lang/en.json file is accepted as it is.

Will :name and :count placeholders survive?

Each translated value is checked against its source to confirm that parameters and tags are present. If a mismatch persists, the source value is kept and flagged in the report so you can fix it yourself.

Should I target Spain or Latin America?

It depends on your users: vocabulary (ordenador or computadora) and the plural 'you' (vosotros or ustedes) differ. Laravel accepts one file per variant, such as lang/es_ES.json and lang/es_MX.json. The free sample helps you judge the output before paying.

Am I charged for the JSON keys?

No. Pricing covers the words in values, excluding keys and tags. In a Laravel JSON file where each key is a full sentence, that roughly halves the text you see in the file.

Do I need three plural forms for Spanish?

CLDR defines three, but the many category only covers large numbers written out in words. Laravel's plural selector uses two forms for Spanish. Just check that the number of |-separated segments matches the source.

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