Translate a Flutter app into Italian: your .arb files, kept intact
To translate a Flutter app into Italian, upload your template .arb file. Manuce returns the same file with Italian values, @@locale set to it, placeholders and ICU messages checked, and the Italian many plural category added. Registering the locale in your project and checking the screens remain your part of the job.
What it costs
For the language files of a Flutter app totalling about 2,000 words, into Italian:
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 Italian changes in a Flutter UI
Italian runs noticeably longer than English. ‘Save’ becomes Salva, but ‘Settings’ becomes Impostazioni and ‘Sign out’ Esci dall'account or Disconnetti. In a fixed-width Row or a tab bar, that is where the yellow-and-black overflow stripes show up in debug mode.
- Register. The translation uses the formal register (Lei): Inserisca il codice. Many Italian consumer apps address users informally (Inserisci il codice) or use a neutral infinitive (Inserire il codice). Decide this before release, and review those strings if your brand uses the informal tu.
- Accents. è, più, perché, città. At the start of a sentence the correct capital is
È, notE'. If you bundle a custom font subset to a limited character set, make sure the accented vowels are included. - Gender and agreement. Participles agree with the noun: file eliminato, but foto eliminata and foto eliminate. A string that drops a variable noun into a fixed sentence can end up wrong depending on what is inserted.
- Apostrophes. Italian is full of them: l'utente, un'immagine, dell'app. They matter inside ICU messages, as explained below.
one, many, other: Italian plurals and ICU placeholders
The CLDR plural categories for Italian are one, many and other. An English template usually has only one and other; Manuce adds the missing category to the Italian value. For example:
{count, plural, =0{Nessun file} one{{count} file eliminato} many{{count} file eliminati} other{{count} file eliminati}}
The many branch only applies to very large round numbers (millions). With a count shown in digits it simply repeats the other text; it only differs for a spelt-out form such as un milione di file.
- Placeholders.
{name},{count}and{date}stay untouched, but they may move: {count} photos shared by {name} becomes {name} ha condiviso {count} foto. Every translated value is compared with the source; if a placeholder goes missing and the mismatch persists, the source value is kept and the report says so. - Select. Existing
selectbranches are translated, for instance{gender, select, female{Benvenuta} male{Benvenuto} other{Le diamo il benvenuto}}. If your source only says Welcome, {name}, the file has no gender branch: review that string, as a neutral phrasing like Le diamo il benvenuto, {name} avoids guessing the agreement. - Apostrophes and escaping. If your generation settings enable single-quote escaping, the
'in l'utente may be read as the start of quoted text inside an ICU message. Check that setting inl10n.yamland test a string containing an apostrophe after generation.
What you get back, and what Manuce does not do
You upload your source .arb file; you get the same file back, in the same format, ready to drop into the project:
- only the values change: indentation, key order, quotes, comments, line endings, encoding and BOM are preserved;
@@localeis set toit;@metadata keys are left alone, but their descriptions are used as context: a description such as ‘button that empties the basket’ helps choose Svuota rather than Cancella;- not translated: keys, empty values, URLs, email addresses, numbers, colours, date formats, identifiers and anything marked as non-translatable;
- a report comes with the file: strings translated, strings left as they were and why.
The word count covers the values only, keys and tags excluded. Manuce does not touch your Dart code: it does not add it to supportedLocales or run flutter gen-l10n. Material widget labels (date picker buttons such as Annulla) are not in your .arb files; they come from the flutter_localizations package. Nor is this a sworn translation: if terms of use need certifying, you will need a sworn translator.
Preparing the file and checking the app in Italian
Before uploading:
- Start from one template file, usually
app_en.arb, complete and up to date. - Fill in descriptions for short or ambiguous strings: ‘Share’ (verb or noun?), ‘Open’ (action or state?). In Italian, Condividi and Condivisione, Apri and Aperto are not interchangeable.
- Avoid concatenation in Dart:
'Delete ' + itemcannot agree in Italian. Use a message with a placeholder instead. - Mark as non-translatable any product or plan names you keep as they are.
Once the file is back in the project as app_it.arb:
- add
Locale('it')tosupportedLocalesand, for iOS, add Italian to the languages declared inInfo.plist; - run the app on a device set to Italian and go through the narrow spots: tabs, buttons,
AppBar, dialogs; - test plurals with 0, 1 and 2;
- check that dates and numbers go through
intlwith theitlocale: 12 marzo 2025 (lower-case months), 1.234,50; these formats are not part of the translation; - read the report: any string still in English is listed there with its reason.
In practice
- Upload your template .arb file (for example app_en.arb): the quote appears straight away, based on the words in the values.
- Choose Italian and a level, then read the free sample before paying.
- Download the translated file, with @@locale set to it, and the report on strings left unchanged.
- Save it as app_it.arb, run flutter gen-l10n and test the app on a device set to Italian.
Frequently asked questions
My plurals only have one and other. Will that break in Italian?
No. Manuce adds the many category that CLDR expects for Italian to the translated value. For a count shown in digits its text is usually the same as other, but the branch is there.
Could my {name} and {count} placeholders get translated or broken?
They are preserved, and every translated value is checked against the source. Their position in the sentence may change, which is normal in Italian. If a mismatch persists, the source value is kept and the report flags it.
Will the translation use tu or Lei?
It uses the formal Lei. Many Italian apps use the informal tu or an infinitive on buttons; if that is your style, plan a review of those strings.
Why does the date picker still show English buttons?
Those labels are not in your .arb files; they are supplied by the flutter_localizations package. Add its localisation delegates and Locale('it') to your app configuration and they will switch to Italian.
Do I need to rename the returned file?
The content is ready, with @@locale set to it, but you save it under the name your configuration expects, usually app_it.arb in your localisation folder. Then regenerate the localisations.
The specialist in charge
This subject goes to Dédale, the technical specialist. See how it works.
The same file, into another language
Into Italian, 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.