Laravel localization in Danish Dansk

Everything you need to ship Danish 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

da

Script / Direction

Latin · LTR

Plural forms (Laravel)

2

Text vs English

Similar

Locale codes

Set the base locale in config/app.php. For regional variants, Danish commonly uses: da_DK, da_GL

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

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

Plural rules: what Danish actually needs

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

CLDR category Numbers that select it
one 1, 1.5
other 0, 2–130, 200, 1000, 1000000

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/da/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 Danish (da locale), generated by Carbon for March 21, 2026:

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

$date->translatedFormat('l, j F Y');
// "lørdag, 21 marts 2026"

$date->isoFormat('LLLL');
// "lørdag d. 21. marts 2026 kl. 14:30"

$date->isoFormat('L');
// "21.03.2026"

$date->subDays(3)->diffForHumans();
// "for 3 måneder siden"

What to watch out for in Danish

The definite article is a suffix, not a word

Danish marks definiteness by attaching an ending to the noun rather than placing a word in front of it. En fil is a file; filen is the file. There is no separate word for the in the ordinary case, so the noun itself changes shape.

English Danish Form
a file en fil indefinite
the file filen definite suffix
files filer indefinite plural
the files filerne definite plural suffix
the new file den nye fil separate article with adjective

The last row is the complication. When an adjective is present, Danish switches to a free-standing article — den nye fil rather than nye filen. So whether definiteness appears as a suffix or as a separate word depends on whether the phrase carries an adjective, which a template cannot know.

Why a template cannot supply the article

// English keeps 'the' constant:
//   'Delete the :type'
//
// Danish needs the suffix on the noun:
//   filen      (the file)
//   projektet  (the project)
//   mappen     (the folder)
//
// The ending also depends on the noun's gender,
// so ':type' cannot carry it.

This is a stronger argument for complete-sentence keys than the equivalent problem in German or Spanish, because there is no article to concatenate at all — the grammar lives inside the word your placeholder holds.

Two genders you cannot predict

Danish nouns are either common gender (taking en) or neuter (taking et), and there is no reliable rule for guessing which. Roughly three quarters are common gender, and the remaining quarter must be learned per word — exactly as with Dutch de and het.

Noun Indefinite Definite English
fil en fil filen file
projekt et projekt projektet project
bruger en bruger brugeren user
billede et billede billedet image
mappe en mappe mappen folder

The gender determines the definite suffix (-en or -et) and the form of any accompanying adjective, so getting it wrong is visible in several places at once. Since the gender is arbitrary, no amount of string manipulation will derive it, and any code assembling noun phrases will be wrong for roughly a quarter of values.

Adjectives also inflect for definiteness: en ny fil but den nye fil. A shared adjective string reused across definite and indefinite contexts will be wrong in one of them.

There is no reliable shortcut here, and no equivalent of the semantic hints that help a little in German. Words for concepts that feel parallel take different genders — en fil but et dokument — so a translator supplies the gender as part of knowing the word, and any interface that builds noun phrases programmatically will produce errors a Danish reader registers as basic.

Danish numbers are built on twenties

Danish uses a vigesimal system for the tens above forty, and the number names are contractions of expressions counting in twenties. This has almost no effect on displayed digits and considerable effect on anything involving spoken or written-out numbers.

Number Danish Literally
50 halvtreds half-third [of twenty] = 2.5 × 20
60 tres three [twenties]
70 halvfjerds half-fourth = 3.5 × 20
80 firs four [twenties]
90 halvfems half-fifth = 4.5 × 20

Units are also spoken before tens, so 21 is enogtyve — one-and-twenty. Any feature that writes numbers out in words, reads them aloud, or parses spoken input cannot derive Danish number names from a rule built for English, and the ordering means a naive parser will assemble digits in the wrong order.

For most applications this only surfaces in written-out amounts, such as on invoices, and in voice interfaces. Use the platform's number-spelling support with the Danish locale rather than composing the words yourself.

Ordinals follow their own pattern too, formed with a following full stop — 1., 2., 3. — rather than with letter suffixes as in English. Any code appending st, nd or th to a number will produce something meaningless in Danish, and this shows up most often in date components and ranked lists.

Compounds, æ ø å, and sorting

Danish compounds nouns without spaces, as German and Dutch do, and Danish orthography is strict about it: writing a compound as two words is a common enough error to have a name in Danish (særskrivning) and is treated as a real mistake rather than a stylistic choice.

For layout that means the usual German-family problem. Compounds arrive as single unbreakable tokens, so a container sized for English will overflow rather than wrap. Danish expands around twenty to thirty per cent over English overall.

Allow long compounds to break

<span class="hyphens-auto break-words" lang="da">
    Brugerkontoindstillinger
</span>

<!-- lang="da" is required for hyphenation to
     have a dictionary to work from. -->

The letters æ, ø and å are distinct letters of the alphabet, not decorated vowels, and they sort at the very end after z. A byte-order sort or a collator configured for German — where ä sorts with a — produces an order Danish users do not recognise.

Danish collation places æ ø å after z

<?php

$collator = new Collator('da_DK');
$collator->sort($words);

// Correct Danish order: ... x, y, z, æ, ø, å
// Note: 'aa' is traditionally sorted as 'å'.

The digraph aa is an older spelling of å and still appears in place names and surnames, where it sorts as though it were å. A Danish collator handles this; a generic Unicode one does not.

Formality, plurals and formatting

Danish has a formal pronoun (De) but it is effectively obsolete. Danish culture is strongly informal and essentially all software, including banking and government services, addresses users as du. Using De reads as archaic or faintly comic rather than respectful, which makes this one of the few European languages where the register decision needs no deliberation.

Plurals use two CLDR categories, so trans_choice() takes a two-part string. Formation is irregular — -er, -e or no change at all, depending on the word — so both forms must be written out rather than derived. Zero takes the plural, as in English.

Danish convention
Thousands 1.234.567
Decimal 1234,56
Currency 1.234,56 kr.
Short date 21.03.2026
Long date 21. marts 2026
First day of week Monday
Time 24-hour (14.30)

Dates carry a full stop after the day number as an ordinal marker, and month names are lowercase. Times use a full stop rather than a colon, as in Finnish. The krone symbol follows the amount as kr. with the full stop included. Denmark uses the krone rather than the euro despite being in the European Union, which is a detail billing code written for a generic European market frequently gets wrong.

The decimal comma creates the same numeric-input hazard as elsewhere in continental Europe: floatval('1234,56') returns 1234, discarding the øre without any error.

Danish, Norwegian and Swedish are not interchangeable

The three mainland Scandinavian languages are close enough that speakers can often read each other, which regularly tempts teams into treating them as one locale or machine-translating between them. Users notice immediately, and the reaction is not neutral — each market reads the substitution as being served another country's product.

Written Danish and Norwegian Bokmål are especially close, sharing much vocabulary and the same æ, ø and å letters. Swedish uses ä and ö instead, and sorts them differently. The differences that matter in an interface are small in number and high in visibility: exactly the profile of errors that make a product feel foreign.

English Danish Norwegian Swedish
file fil fil fil
user bruger bruker användare
settings indstillinger innstillinger inställningar
search søg søk sök
now nu nu

Norwegian adds a further complication: it has two official written standards, Bokmål and Nynorsk, with distinct locale codes. Bokmål covers the large majority of users, but public-sector requirements sometimes specify both, and the generic no code is ambiguous between them.

Be careful with no in configuration files for a second reason. In YAML, an unquoted no parses as the boolean false, so a language list containing Norwegian silently loses it. This is well known enough to be called the Norway problem, and it is a real cause of missing locales in translation pipelines.

Model each Scandinavian language as its own locale from the start. They are cheap to add and expensive to separate later, because a shared translation memory built on the assumption that they are one language contaminates all three.

What ships broken most often

Danes read English fluently, so missing translations produce no complaints and survive indefinitely. As with Dutch and the other Nordic languages, verify coverage with a key-parity check in CI rather than waiting for reports that will not come.

Install the Laravel-Lang Danish files for framework strings. Validation messages involve gender-dependent suffixes and irregular plurals across dozens of rules, and reproducing that by hand is tedious work already done and reviewed.

Two habits prevent most of the rest. Write complete messages rather than assembling noun phrases, since Danish definiteness and gender both live inside the noun and neither can be supplied by a template. And render every Danish string into its real container in a test that flags overflow, using a long compound as the worst case — truncated compounds are the most visible defect and the easiest to catch automatically.

Framework strings already translated

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

Translate your app into Danish today

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