Laravel localization in Greek Ελληνικά

Everything you need to ship Greek in a Laravel app: the right locale codes, the exact plural forms trans_choice() expects, real localized Carbon output and Greek-script considerations. Every value on this page was generated by running ICU, CLDR and Carbon — not copied from another article.

ISO 639-1

el

Script / Direction

Greek · LTR

Plural forms (Laravel)

2

Text vs English

Expands

Locale codes

Set the base locale in config/app.php. For regional variants, Greek commonly uses: el_GR, el_CY

// config/app.php
'locale' => 'el',
'fallback_locale' => 'en',

// Or switch at runtime
App::setLocale('el');

Plural rules: what Greek actually needs

CLDR defines 2 cardinal categories for Greek. The sample numbers below were computed by ICU for this exact locale:

CLDR category Numbers that select it
one 1
other 0, 2–130, 200, 1000, 1000000, 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/el/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 Greek (el locale), generated by Carbon for March 21, 2026:

$date = now()->locale('el');

$date->translatedFormat('l, j F Y');
// "Σάββατο, 21 Μαρτίου 2026"

$date->isoFormat('LLLL');
// "Σάββατο, 21 Μαρτίου 2026 2:30 ΜΜ"

$date->isoFormat('L');
// "21/03/2026"

$date->subDays(3)->diffForHumans();
// "πριν 3 μήνες"

What to watch out for in Greek

A different alphabet, and the characters that look identical

Greek uses its own alphabet, and several letters are visually indistinguishable from Latin ones while being entirely different characters. Greek Α, Β, Ε, Ζ, Η, Ι, Κ, Μ, Ν, Ο, Ρ, Τ, Υ, Χ render identically to Latin A, B, E, Z, H, I, K, M, N, O, P, T, Y, X in most fonts, and compare unequal in every string comparison your code performs.

This produces a class of bug that survives review indefinitely, because the two versions of a string look the same on screen. A record entered with a Latin Ο will not be found by a search using the Greek Ο, a deduplication routine will treat them as distinct, and a translator who typed one while the source used the other has introduced a mismatch nobody can see.

It is also a security consideration. Homograph substitution using Greek letters is a standard technique for spoofing domain names and usernames, so any field where visual identity matters — usernames, display names, organisation names — should be normalised or restricted to a single script rather than accepting mixed input silently.

Detecting mixed-script input

<?php

// Flag values that mix Greek and Latin letters,
// which is almost never intentional in a name
$hasGreek = preg_match('/\p{Greek}/u', $value);
$hasLatin = preg_match('/\p{Latin}/u', $value);

if ($hasGreek && $hasLatin) {
    // Likely a homograph or a typing-layout mistake
}

Sorting needs a Greek collator. Byte order places the entire Greek block after every Latin character, so a mixed list sorts into two separate blocks rather than into anything a user would recognise as alphabetical.

The final sigma, and why case conversion is not reversible

Greek has two lowercase forms of sigma. The letter is written σ in the middle of a word and ς at the end, so κόσμος uses both. There is only one uppercase form, Σ.

That asymmetry makes case conversion lossy in a way most languages are not. Uppercasing κόσμος gives ΚΟΣΜΟΣ; lowercasing ΚΟΣΜΟΣ requires knowing that the final Σ becomes ς rather than σ, which depends on word position. PHP's mb_strtolower() handles this correctly; naive character mapping does not.

Accents add a second complication. Modern Greek marks the stressed vowel with a tonos (ά, έ, ή, ί, ό, ύ, ώ), and the accent is dropped when a word is written in all capitals. So Ελλάδα becomes ΕΛΛΑΔΑ, not ΕΛΛΆΔΑ. An uppercase transformation that preserves the accent produces text Greek readers see as wrong.

Uppercasing Greek correctly

<?php

mb_strtoupper('Ελλάδα');  // 'ΕΛΛΆΔΑ' — accent kept, wrong

// Strip the tonos when uppercasing for display
$upper = mb_strtoupper(
    \Normalizer::normalize('Ελλάδα', \Normalizer::FORM_D)
);
// then remove combining accents before recomposing

Because of this, CSS text-transform: uppercase on Greek text is unreliable: browsers vary in whether they strip the tonos. Where all-caps Greek matters visually, store the uppercase form as its own translation rather than generating it.

One accent is not dropped: the dialytika (ϊ, ϋ), which marks a vowel pronounced separately rather than as a diphthong. It survives capitalisation because it carries pronunciation information rather than stress.

Four cases and three genders

Greek nouns inflect for four cases and carry one of three genders. Articles, adjectives and participles all agree, which makes assembling sentences from fragments unreliable in the same way it is in German and Czech.

Case Role "file" (αρχείο, neuter)
Nominative subject το αρχείο
Genitive of / possession του αρχείου
Accusative direct object το αρχείο
Vocative addressing αρχείο

The definite article alone has distinct forms across gender, number and case — ο, η, το, του, της, τον, την, οι, τα, των, τους — and it is obligatory in contexts where English omits it. Greek uses the article before proper nouns and abstract concepts, so a translated string will often contain one where the English source had none.

The practical rule is the familiar one: write complete messages as single keys rather than concatenating a noun onto a fragment. A shared "Delete :type" template will produce the wrong article and the wrong case for most values of the placeholder.

Greek plurals use two CLDR categories, so trans_choice() takes a straightforward two-part string. That is the one area where Greek is simpler than the Slavic languages, though the noun and its article still change form between singular and plural, so both segments must be written out rather than derived.

Punctuation that is not what it appears to be

Greek uses a distinct question mark: the erotimatiko, which looks exactly like a Latin semicolon (;). A Greek question ends with ; rather than ?, and the character is U+037E, separate from the Latin semicolon at U+003B even though they render identically.

This trips up validation and normalisation routines constantly. Code that strips or replaces semicolons will delete question marks from Greek copy, and code that appends a Latin ? to build a question produces something a Greek reader sees as an error. Unicode normalisation forms even map U+037E onto the Latin semicolon, so round-tripping through NFKC changes the character.

The ano teleia (·), a raised dot, serves the role of a Latin semicolon or colon. It is a distinct character from the middle dot used in other contexts and is easily lost to aggressive normalisation.

Greek quotation marks are guillemets («»), as in French, rather than the curly quotes used in English. A smart-quote routine written for English will replace them with the wrong marks, and a translator's guillemets will be silently converted if the copy passes through a word processor.

The safe rule for Greek is to leave punctuation entirely alone. Every normalisation step that touches punctuation risks converting a Greek character into a visually identical Latin one that means something different.

Layout, formality and formatting

Greek expands considerably over English — often thirty to forty per cent — because the language uses obligatory articles, longer word forms and case endings where English relies on word order. Plan for German-like overflow in buttons and labels even though the language behaves quite differently.

English Greek Growth
Save Αποθήκευση +150%
Settings Ρυθμίσεις +13%
Delete Διαγραφή +50%
Search Αναζήτηση +83%
Sign in Σύνδεση +14%

As in the Romance languages, Greek interfaces favour noun forms for buttons — Αποθήκευση (saving) rather than an imperative verb — which sidesteps the formality question for most short labels.

Where the interface does address the user, Greek distinguishes informal εσύ from formal εσείς. Consumer software generally uses the informal form; banking, government and formal business communication use the plural formal. The distinction runs through verb conjugations, so it cannot be swapped cheaply.

Greek convention
Thousands 1.234.567
Decimal 1234,56
Currency 1.234,56 €
Short date 21/3/2026
Long date 21 Μαρτίου 2026
First day of week Monday

Long dates put the month in the genitive — Μαρτίου rather than the nominative Μάρτιος — which is another reason to format dates through Carbon with the locale rather than assembling them from a month-name lookup. The decimal comma creates the same numeric-input hazard as elsewhere in continental Europe.

Encoding, storage and the polytonic question

Modern Greek uses the monotonic system, with a single accent marking stress. Until the 1982 reform it used the polytonic system, with three accents and two breathing marks, and polytonic Greek is still used for classical texts, in some religious contexts and by a minority of writers who prefer it.

The two systems occupy different Unicode ranges. Monotonic Greek sits mostly in the Greek and Coptic block, while polytonic characters live in Greek Extended. A search or comparison that does not normalise between them will fail to match the same word written in each system, and a font covering one range may have gaps in the other.

Unicode normalisation is worth applying deliberately here. Greek accented characters have both precomposed and decomposed representations, so the same visible word can be stored as one code point or as a base letter plus a combining mark. They look identical and compare unequal. Normalising to NFC on input removes the ambiguity, and it is worth doing at the boundary rather than discovering the inconsistency later in a search index.

For search, fold accents as well. A user typing without the tonos expects to find accented records, and requiring the accent to match is a real barrier on mobile keyboards. Fold for comparison while preserving the accents for display, as with any accented language.

Set the full locale rather than a bare language code. Greek is spoken in Greece and Cyprus, which share the language and the euro but differ in some administrative conventions, and a locale-aware collator is required in any case for alphabetical ordering to make sense.

What ships broken most often

The homograph problem is the one worth building a check for, because it is the only item on this list that a Greek reader cannot catch either. Flagging mixed-script values at the point of entry costs a few lines and prevents data that is permanently ambiguous.

Install the Laravel-Lang Greek files for framework strings rather than translating validation and authentication messages yourself. They already handle the article, case and gender agreement that runs through several hundred framework messages, and reproducing that by hand is a substantial piece of work with little to show for it.

Framework strings already translated

Laravel's own validation, auth and pagination strings are maintained in Greek 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 el
php artisan lang:update

Translate your app into Greek today

Import your lang files, translate every key into Greek 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