ManuceTranslate a fileTranslate a Flutter app into English

Translate a Flutter app into English

Upload your Flutter app's .arb file and Manuce translates the values into English, returning the same file ready to drop next to your template. Placeholders and ICU messages are checked, and English plural categories are added where they are missing. A report lists every string left unchanged and why.

Upload my file See pricing

What it costs

For the language files of a Flutter app totalling about 2,000 words, into English:

Essentiel
€12

To understand, internal use.

Professional
€36

Ready to send, by the technical specialist.

Premium
€70

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.

From your template .arb to app_en.arb

A Flutter app localised with flutter gen-l10n keeps its strings in .arb files, one per language. Your template might be app_de.arb, app_es.arb or app_ja.arb; English expects an app_en.arb with the same structure. That is the file Manuce produces from yours.

In an .arb file, only the values are translated:

  • "@@locale": "es" becomes "@@locale": "en".
  • "cartTitle": "Tu cesta" becomes "cartTitle": "Your basket" (cart in American English); the key stays as it is.
  • "@cartTitle": {"description": "Title of the basket screen"} is not translated, because it is metadata. Its description is used as context, which helps decide between Save and Record, or Confirm and Submit, when the source word could mean either.

Placeholders stay identical, but their position follows English word order: German "{count} Fotos wurden von {userName} geteilt" becomes "{userName} shared {count} photos". A renamed or missing placeholder would break Dart code generation, which is why every translated value is compared with the source, variables and tags included.

What English changes: plurals, punctuation, spelling

Plurals. English has two CLDR categories, one and other, and one covers exactly 1. That differs from many source languages:

  • French puts 0 under one; English puts it under other (“0 items”).
  • Russian or Polish use few and many, which English does not need.
  • Japanese, Chinese or Korean often have only other, so English needs a one branch: {count, plural, one{{count} item} other{{count} items}}.

Manuce checks ICU plural and select messages and adds the English categories where they are missing. An explicit =0{...} branch in the source is kept and translated (No items).

Select messages. Branch keys such as male, female and other are left as they are; only the text inside each branch is translated. English rarely inflects adjectives for gender, so several branches may end up almost identical. That is expected.

Punctuation. English uses no space before colons or question marks, and quotation marks become “ ” or ‘ ’. If your l10n.yaml enables use-escaping, a single quote acts as an escape character, so contractions such as don't or you've deserve a check after generation.

British or American. Decide early: colour/color, cancelled/canceled, postcode/ZIP code. Date formats declared in placeholders ("format": "yMd") are not translated; the locale sets the order. With en, yMd puts the month first; for day first you need en_GB. Also settle on sentence case or Title Case for buttons (Save changes or Save Changes).

What Manuce returns, and what it does not do

You get back the same .arb file, in the same format, ready to put back in the folder your configuration points to (often lib/l10n): indentation, key order, quotation marks, comments, line endings, encoding and BOM are preserved. Only the values change, so your version-control diff reads line by line.

The accompanying report lists the strings translated and those left unchanged, with the reason. The following are not translated: keys, empty values, URLs, email addresses, numbers, colours (#1E88E5), date formats, identifiers and anything marked as non-translatable. If a translated value keeps losing a placeholder or tag, the source value is kept and the report says so, so you know exactly which string to revisit.

Limits worth knowing:

  • only the content of the uploaded file is translated; strings hard-coded in Dart outside the .arb files are not;
  • images and screenshots inside the app are not handled;
  • Manuce does not produce certified (sworn) translations, should a legal text in your app ever require one.

The price is based only on the words in the values, with keys and tags excluded, and English is charged at the base rate (coefficient ×1).

Preparing the file and checking the result

Before uploading:

  • Add a description to ambiguous keys: "@validate": {"description": "Final button of the payment form"} points towards Pay now or Confirm rather than Validate.
  • Upload the complete template, not a half-filled English file.
  • Make sure plurals are written as ICU messages in the .arb, not assembled in Dart (count > 1 ? 'Fotos' : 'Foto'); those strings never reach the file.
  • Identify brand or feature names that must stay as they are and flag them as non-translatable.

After delivery:

  1. Place app_en.arb next to your template and run flutter gen-l10n; any ICU syntax problem would show up here.
  2. For iOS, check that English is listed in the declared languages of Info.plist (CFBundleLocalizations).
  3. Test each plural message with 0, 1 and 2, and display a date to check day/month order.
  4. Read the report and deal with any strings left in the source language.

In practice

  1. Upload your template .arb file (for example app_de.arb): the quote appears at once, based on the words in the values.
  2. Read the free sample at the level you choose, then pay to start the translation.
  3. Download app_en.arb and the report from your client area.
  4. Put the file in your project, run flutter gen-l10n and test plurals and dates.

Frequently asked questions

Are the @ keys and their descriptions translated?

No. The @ keys are metadata and are left untouched; their descriptions are only used as context to pick the right term. The one change is @@locale, which is set to en.

Could my {count} or {userName} placeholders be altered?

Every translated value is compared with the source, variables and tags included. If a mismatch persists, the source value is kept and the report flags it, so Dart code generation is not broken.

My source language has no 'one' plural form. Will English plurals work?

Yes. ICU plural messages are checked and the English categories, one and other, are added where they are missing, so “1 item” and “2 items” both display correctly. Test with 0, 1 and 2 after running flutter gen-l10n.

How do I handle British and American English?

The differences are mostly spelling (colour/color) and date order, which depends on the locale (en or en_GB). Review the affected words for your target market. If you target both, Flutter accepts a general app_en.arb plus an app_en_GB.arb containing only the strings that differ.

Can I translate the same file into several languages at once?

Yes, and a discount applies to the whole order from two languages: −20% for 2, −30% for 3, −40% for 4 and −50% from 5. You receive one .arb file per language, each with its own @@locale.

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