I don't live in Denmark. I don't speak Danish. I have no particular connection to Denmark. Moreover, I have never been to Denmark. And yet, according to my computer, I'm Danish. Why? Because I want my calendar to start on Monday.
Locales suck. I can't be the only English speaker who doesn't live in the US or the UK. I want my interfaces in English, I want my weekdays in English, I want my months in English, but I don't want miles, I don't want Fahrenheit, and I most certainly don't want my calendar starting on Sunday. What do I do?
Surprisingly, it's an actual problem. But software is better now. You can choose your locale independently from your language. You can do so in GNOME, you can do so in Windows and I would be really surprised if you couldn't do that in macOS or KDE. If I recall correctly, it wasn't always the case.
And the solution is to pick a country whose conventions don't differ too much
from what I am used to. Which happens to be Denmark. Obviously, I can't have
everything I want. I'm more accustomed to Russian-style 20.10.2026 date
format, but Denmark's ISO format, which is 2026-10-20, works for me. But why
does it have to be like that? Why do I have to pretend that I'm from a country I
have no connection to? Aside from that, some programs might assume that I want
content in Danish. Hasn't happened to me so far, but it wouldn't be too weird if
it did.
Why Denmark specifically?
GNOME lists 12 English locale options. Here they are with my reasoning:
- Canada. Uses US Letter and AM/PM.
- Denmark. This is what I picked.
- Hong Kong. Uses AM/PM.
- India. AM/PM and weird number formatting starting from lakhs.
- Ireland. Actually a great option, although slashes in dates confuse me.
- Israel. Weeks start on Sundays and workweek runs Sunday through Thursday.
- New Zealand. Slashes in dates.
- Nigeria. Slashes in dates.
- Philippines. AM/PM, US Letter.
- South Africa. Slashes in dates, week starts on Sunday.
- United Kingdom. Half metric, half imperial, slashes in dates.
- United States. Everything that can be wrong is wrong.
The real solution
A good solution would be to use a locale that is as international as it could
possibly be. Which already exists! And it is called "English (World)" and uses
code en_001. But I don't see that option in GNOME regional settings. "English
(International)" is not among offered options either. Moreover, if I recall
correctly, some platforms that do offer this option, still default to American
units. Which completely defeats the point. Another problem is that en_001 can
and will break locale parsers. Moreover, en_001 is supported by Unicode CLDR,
but not even glibc ships it as a standard locale. And even if it did, I don't
find it likely that lots of software would support it. Unrelated fun fact: CLDR,
for some reason, prefers 12 hour clock despite trying to steer away from
American conventions.
Okay. Let's create a new locale and let's name it en_ISO. Amazing, right?
English text, international units without attachment to any particular country.
But it will break parsers. We could settle for en_SI instead. SI as in
International System of Units. But SI is Slovenia's country code. And we can't
really just pick whatever two-letter combination to assign it as a locale code.
There's only 676 possible combinations and 249 are officially assigned to
countries and territories. Should a new country gain its independence, it might
not get the two-letter code you'd expect from its name. For example, the country
code of Caribbean Netherlands is BQ. How does it make sense? No clue. The
actual ISO entry for the region is "Bonaire, Sint Eustatius and Saba". Ok, I can
see where the B is coming from, but what about Q? There are so many such
examples. Bosnia and Herzegovina uses BA, because BH is reserved by Bahrain.
And Bahrain uses BH, because BA is reserved by Bosnia. Try to guess what's
the country code of Åland Islands.
The workaround
What do you do if your desktop environment doesn't support separate entries for
language and locale? Or if you don't use a desktop environment at all? You use
localectl. What I do is:
sudo localectl set-locale \
LANG=en_US.UTF-8 \
LC_TIME=en_DK.UTF-8 \
LC_MEASUREMENT=en_DK.UTF-8 \
LC_MONETARY=kk_KZ.UTF-8 \
LC_PAPER=en_DK.UTF-8
These are the only parameters I care about, but there's much more. You can set
currency formats, address and phone number formats, paper formats and many
others. Linux allows different aspects of your locale to be configured
independently. LANG provides the default, while individual LC_* variables
override specific categories. LC_ALL overrides all of them. Look at all these
options:
| Field | Description |
|---|---|
LC_TIME | Dates, time, weekday/month names, week conventions |
LC_NUMERIC | Decimal and thousands separators |
LC_MONETARY | Currency symbol and monetary formatting |
LC_MEASUREMENT | Metric vs US customary preferences |
LC_PAPER | Default paper dimensions |
LC_MESSAGES | Translated program messages |
LC_COLLATE | Alphabetical sorting and collation |
LC_CTYPE | Character classification and encoding behavior |
LC_NAME | Personal-name formatting and titles |
LC_ADDRESS | Postal-address formats |
LC_TELEPHONE | Telephone-number conventions |
LC_IDENTIFICATION | Locale metadata |
Also, this changes the system-wide locale defaults. Your desktop environment may
override them, so check the effective locale settings using locale.
What I wish happened
Dunno, to be honest. We could introduce a new locale, but it will take a while
before it gets adopted and it will simply break old software. We could fix and
adapt software for en_001 and actually standardize it, but I don't see that
happening either. For now, we, the people who want international language and
international standards and units, will have to pretend we are from somewhere
else.
P.S.
Huh. According to glibc sources, I wasn't the first one to come up with
adopting Denmark as my region. Check out line 112 on
this page.