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

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

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.

We use cookies to improve your experience and analyze site traffic. Cookie Policy

Cookie Preferences

Essential

Required for the site to work

Analytics

Help us improve the site

Marketing

Personalized ads and content