Laravel localization in Italian Italiano
Everything you need to ship Italian in a Laravel app: the right locale codes,
the exact plural forms trans_choice() expects,
real localized Carbon output and Latin-script considerations.
Every value on this page was generated by running ICU, CLDR and Carbon — not copied from another article.
ISO 639-1
it
Script / Direction
Latin · LTR
Plural forms (Laravel)
2
Text vs English
Expands
Locale codes
Set the base locale in config/app.php. For regional variants,
Italian commonly uses:
it_IT, it_CH
// config/app.php
'locale' => 'it',
'fallback_locale' => 'en',
// Or switch at runtime
App::setLocale('it');
Plural rules: what Italian actually needs
CLDR defines 3 cardinal categories for Italian. The sample numbers below were computed by ICU for this exact locale:
| CLDR category | Numbers that select it |
|---|---|
| one | 1 |
| many | 1000000 |
| other | 0, 2–130, 200, 1000, 1.5 |
Laravel's trans_choice() maps numbers to
2 pipe-separated
forms for this locale:
| Form index | Numbers that select it |
|---|---|
| 0 | 1 |
| 1 | 0, 2–130, 200, 1000 |
// lang/it/messages.php
'items' => ':count item|:count items'
// Usage
trans_choice('messages.items', $count, ['count' => $count]);
Try any number live in the pluralization tester.
Localized dates with Carbon
Real output for Italian (it locale),
generated by Carbon for March 21, 2026:
$date = now()->locale('it');
$date->translatedFormat('l, j F Y');
// "sabato, 21 marzo 2026"
$date->isoFormat('LLLL');
// "sabato 21 marzo 2026 14:30"
$date->isoFormat('L');
// "21/03/2026"
$date->subDays(3)->diffForHumans();
// "3 mesi fa"
What to watch out for in Italian
- Tu/Lei formal-informal distinction; decide on register before translating UI copy.
- Nouns are gendered and articles change form by sound (il/lo/la/l'), making article + placeholder patterns fragile.
- Adjectives agree in gender and number with nouns.
- Decimal comma with dot as thousands separator (1.234,56).
The apostrophe that breaks string assembly
Italian elides articles and prepositions before a vowel, replacing the final letter with an apostrophe. Lo utente is never written; it is l'utente. This looks like a minor orthographic detail and it is actually the reason you cannot build Italian sentences from fragments, because the correct form depends on the first sound of the word that follows.
| Before a consonant | Before a vowel | Meaning |
|---|---|---|
| il file | l'archivio | the file / the archive |
| del progetto | dell'utente | of the project / of the user |
| nel campo | nell'elenco | in the field / in the list |
| la cartella | l'immagine | the folder / the image |
| una cartella | un'immagine | a folder / an image |
The last row is worth pausing on. The masculine indefinite article is un with no apostrophe (un utente), while the feminine is un' with one (un'immagine). Getting this backwards is one of the most common errors in machine-translated Italian, and native speakers spot it instantly.
Why templates cannot work in Italian
// Building 'delete the X' from parts:
// il file -> Eliminare il file
// l'utente -> Eliminare l'utente
// lo studente -> Eliminare lo studente
//
// Three different articles, chosen by the sound
// of the next word. No template can pick correctly.
__('actions.delete_the') . ' ' . __("types.{$type}") // broken
Write complete sentences as single keys and the problem vanishes entirely. This is good practice in every language and mandatory in Italian.
The apostrophe itself is worth a word of warning on the storage side. Italian copy is full of them, and an apostrophe is also the character that terminates a single-quoted PHP string. Generated language files must escape it correctly, and any hand-editing of lang/it/ risks producing a parse error from a perfectly ordinary word like dell'utente. It is a good argument for keeping Italian in a format where quoting is handled for you rather than typed by hand.
Watch for typographic apostrophes too. A spreadsheet or word processor will silently convert the straight apostrophe into a curly one, which looks almost identical, compares unequal, and will break any test asserting on the string.
Il, lo, la: gender plus a phonological rule
Italian nouns are masculine or feminine, and adjectives and past participles agree with them. On top of that, the masculine definite article has two forms chosen not by meaning but by the sound that starts the following word.
| Article | Used before | Example |
|---|---|---|
| il | most consonants | il file, il progetto |
| lo | s + consonant, z, gn, ps, x, y | lo studente, lo zaino |
| l' | vowels | l'utente, l'account |
| i | plural of il | i file |
| gli | plural of lo and l' | gli studenti, gli utenti |
| le | all feminine plurals | le cartelle |
So lo studente but il progetto, and in the plural gli studenti but i progetti. The rule is phonological rather than semantic, which means it applies to loanwords by their Italian pronunciation: lo smartphone, because sm is s followed by a consonant.
Adjective agreement compounds this. A past participle used as a status changes ending with the gender and number of its subject, so a single shared 'deleted' string will be wrong in most contexts.
Agreement in status messages
// il file eliminato (masculine singular)
// la cartella eliminata (feminine singular)
// i file eliminati (masculine plural)
// le cartelle eliminate (feminine plural)
// Four forms of one English word: 'deleted'
Tu or Lei, and the capital that changes meaning
Italian distinguishes informal tu from formal Lei. The convention in software has moved firmly toward tu for consumer products and most SaaS, while banking, insurance, government and formal B2B communications keep Lei.
| English | Informal (tu) | Formal (Lei) |
|---|---|---|
| Your account | il tuo account | il Suo account |
| Save your changes | Salva le tue modifiche | Salvi le Sue modifiche |
| Do you want to continue? | Vuoi continuare? | Desidera continuare? |
| Welcome back | Bentornato | Bentornato |
Lei is grammatically third-person feminine regardless of the addressee's gender, so the verb conjugates as though speaking about a woman even when addressing a man. This surprises developers who expect a simple pronoun substitution and is another reason the choice cannot be swapped late.
In formal register, Lei and its possessive Suo are conventionally capitalised mid-sentence as a mark of respect. Lowercase lei means 'she', so the capital is doing semantic work, not decorative work.
As in French and Spanish, Italian interfaces lean on the infinitive for buttons — Salva, Annulla, Elimina — which sidesteps the register question for the majority of interface strings.
Text expansion and accented characters
Italian runs roughly fifteen to twenty per cent longer than English. Words are separated rather than compounded, so text wraps naturally and layouts survive better than in German, but short labels still grow substantially.
| English | Italian | Growth |
|---|---|---|
| Save | Salva | +25% |
| Settings | Impostazioni | +50% |
| Sign up | Registrati | +25% |
| Search | Cerca | -17% |
| Upload | Carica | 0% |
| Forgot password? | Password dimenticata? | +35% |
Italian uses grave and acute accents on final vowels, and they are meaning-bearing rather than optional. Perché (because) takes an acute; caffè (coffee) takes a grave; è (is) and e (and) differ only by the accent, and confusing them is the classic marker of careless Italian.
Only final-syllable stress is marked. Interior stress is unwritten, which means the accent never appears mid-word in native vocabulary — a useful sanity check when reviewing machine output that has invented accents in the wrong places.
Uppercasing must preserve accents: È, not E. PHP's strtoupper() will corrupt multi-byte characters, so use mb_strtoupper() or Str::upper(). A heading rendered as E VIETATO instead of È VIETATO changes 'it is forbidden' into 'and forbidden'.
Plurals, dates and numbers
Italian takes two plural forms, so trans_choice() works with a straightforward two-part string. Formation changes the final vowel rather than adding a suffix: masculine -o becomes -i (file stays file, but progetto becomes progetti), and feminine -a becomes -e (cartella becomes cartelle).
Loanwords from English are invariable: un file and due file, un account and due account. Adding an English -s (due files) is a common and visible error, since Italian does not import foreign plural morphology.
The zero case uses the plural, as in English: 0 progetti. Laravel maps zero to the 'other' form for Italian, so this works provided the translator filled in the plural rather than duplicating the singular.
| Italy (it_IT) | Switzerland (it_CH) | |
|---|---|---|
| Thousands | 1.234.567 | 1'234'567 |
| Decimal | 1234,56 | 1234.56 |
| Currency | 1.234,56 € | CHF 1234.56 |
| Short date | 21/03/2026 | 21.03.2026 |
| Long date | 21 marzo 2026 | 21 marzo 2026 |
Months and weekdays are lowercase unless they open a sentence — 21 marzo 2026, never 21 Marzo 2026. The decimal comma causes the same class of bug as in German and Spanish: a user typing 1234,56 into a price field gives floatval() a string it reads as 1234, silently discarding the cents.
Register changes with the channel, not just the product
Deciding between tu and Lei for the interface does not settle the question everywhere. Italian business communication is markedly more formal than its interface conventions, so a product that addresses users as tu in the app will still be expected to use Lei in invoices, contractual notices and support correspondence with companies.
This matters architecturally, because it means register is a property of the message rather than of the locale. Treating it as a per-locale setting forces one choice across the whole product and guarantees that either the interface reads stiffly or the legal email reads impertinently. Split the namespaces instead: keep transactional and legal copy in their own translation files with their own register, and note that convention where translators will see it.
Formal Italian correspondence also has fixed openings and closings that have no English equivalent and cannot be translated word by word. Gentile Cliente opens a message to a customer, and Cordiali saluti or Distinti saluti closes it depending on distance. A literal rendering of 'Hi there' or 'Best' reads as a translation error rather than as friendliness.
There is a compliance dimension too. Italian electronic invoicing runs through the national Sistema di Interscambio, and invoices carry mandatory fields — codice fiscale, partita IVA, and a recipient code — whose labels users expect in their standard Italian forms rather than in translated approximations. Where a term is legally defined, use the legal term and resist the urge to make it friendlier.
Finally, set the full locale rather than a bare it wherever formatting happens. Carbon, the Number helper and PHP intl formatters all need the region to choose separators and date order, and Italian-speaking Switzerland differs from Italy in both. Passing the language alone silently applies Italian defaults to Ticino.
What ships broken most often
- Missing or wrong elision. Lo utente instead of l'utente, or un'utente for a masculine noun.
- Concatenated sentences. The article depends on the following word's first sound, so assembly is unfixable by rule.
- Anglicised plurals. Due files instead of due file — loanwords do not inflect in Italian.
-
Lost accents on capitals.
strtoupper()turning È into E, which changes the word. - Capitalised months. Marzo instead of marzo, inherited from English date formatting.
- Decimal comma in numeric input. Prices losing everything after the comma.
- Mixed tu and Lei. Two translators, two defensible choices, one inconsistent product.
Install the Laravel-Lang Italian files for framework strings rather than translating validation and authentication messages yourself. They already handle agreement and elision correctly across several hundred messages, which is a considerable amount of detail to get right by hand.
Set the full locale rather than a bare it if you serve Italian-speaking Switzerland, since the separators and date format differ enough that Swiss users notice. Italy and San Marino share conventions; Ticino does not.
Framework strings already translated
Laravel's own validation, auth and pagination strings are maintained in Italian by the open-source Laravel-Lang project (MIT). Install them, then manage your app's own strings live:
composer require laravel-lang/common --dev
php artisan lang:add it
php artisan lang:update
Translate your app into Italian today
Import your lang files, translate every key into Italian with one AI click, and publish changes live — no deploy. Set up in 5 minutes.