It's 2026 and Swiss Websites Still Default to German
6 min read
The Experience Every Non-German Speaker in Switzerland Knows
You open a Swiss website. SBB, MediaMarkt, Coop, Manor, Swiss Post, your health insurer, doesn’t matter which one. It loads in German.
You’re in Lausanne. Your browser is set to French. Your OS is in French. Your phone, your laptop, everything screams “this person speaks French.” The website doesn’t care. German.
So you hunt for the language switcher. Sometimes it’s in the top right. Sometimes it’s buried in the footer. Sometimes it’s a flag icon (because apparently Switzerland has language-specific flags now). You click “FR,” the page reloads, and maybe, if you’re lucky, it remembers your choice next time. More often, it doesn’t.
It’s 2026. The Accept-Language header has existed since HTTP/1.1 in 1997. That’s almost 30 years. And the majority of Swiss websites still pretend it doesn’t exist.
This Is a Solved Problem
Let me be clear: detecting a user’s preferred language is trivially easy. Every single browser sends an Accept-Language header with every single request. If your browser is set to French, it sends something like:
Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7
This literally says: “I prefer Swiss French, then French, then English, then German.” The server receives this on the very first request. Before any cookies, before any JavaScript loads, before the user does anything at all.
Matching this against your available languages takes a few lines of code. In any framework. In any language. Laravel has middleware for it. Next.js can do it in middleware. Even a static site behind Cloudflare can do it with a Worker in 10 lines.
This isn’t new technology. This isn’t experimental. This is basic HTTP that every web server on the planet has supported for decades.
The Excuses (And Why They Don’t Hold Up)
“Our primary market is German-speaking Switzerland”
Then default to German for users whose browser is set to German. For everyone else, respect their preference. That’s the whole point. You’re not losing your German-speaking users by also serving French to French speakers.
”We don’t want to guess wrong”
You’re already guessing wrong, for 35% of your Swiss visitors. Roughly 23% of Switzerland speaks French as their primary language, 8% Italian, and 4% other languages. By defaulting to German for everyone, you’re guaranteed to get it wrong for over a third of your audience.
And the browser preference isn’t a “guess.” It’s an explicit signal from the user about what language they want. Ignoring it is like asking someone a question and then ignoring the answer.
”Users can just switch the language”
Sure. And users can also type URLs directly into the address bar instead of using links. Doesn’t mean they should have to. Every unnecessary click is friction. Every time a user lands on a page they can’t read, you’ve lost their attention for a few seconds, and some percentage of them just leave.
For government services and healthcare sites, this isn’t just bad UX, it’s an accessibility issue. Forcing someone to navigate a German interface to find the French version of a form they need to fill out is genuinely exclusionary.
”It’s too complex to implement”
No, it isn’t. Here’s the logic:
- Check if the user has a language cookie (they’ve chosen before) → use that
- Check the
Accept-Languageheader → match against your available languages - Fall back to your default
That’s it. Three steps. This is a solved problem in every web framework, with libraries and middleware available off the shelf.
The Real Reason: Nobody Prioritizes It
The honest truth is that language detection doesn’t show up in sprint planning. It doesn’t have a Jira ticket. The product owner is German-speaking, the development team is German-speaking, and the site works fine for them. The French, Italian, and Romansh experience is an afterthought, if it’s a thought at all.
This is a cultural blind spot baked into the development process. When your entire team operates in the majority language, the minority language experience is invisible until someone complains. And by then, the backlog is full of “higher priority” items.
It’s the same reason most Swiss sites handle French and Italian content as translations of German originals, rather than treating each language version as a first-class citizen. The German version gets updated first, the French version lags behind (sometimes by weeks), and the Italian version might not exist at all.
What Good Looks Like
It’s not that no one does this right. Some sites handle it well:
- Detect on first visit using
Accept-Language - Redirect to the correct language version (e.g.,
/fr/for French speakers) - Store the preference in a cookie so it persists
- Show a subtle banner if the detected language doesn’t match the URL, letting the user confirm or switch (“Préférez-vous le français?”)
- Never force a redirect for returning users who’ve already chosen
- Keep all language versions in sync with the same content and functionality
This isn’t a premium feature. This is baseline competence for a multilingual market.
The Numbers Make the Case
Switzerland has approximately 8.9 million residents. Of those:
- ~63% speak German (including Swiss German)
- ~23% speak French
- ~8% speak Italian
- ~0.5% speak Romansh
- ~5.5% speak other languages as their primary language
That means roughly 3.3 million people in Switzerland don’t speak German as their primary language. Add tourists, cross-border workers, and international residents, and the number is even higher.
If your website defaults to German without checking preferences, you’re delivering a degraded experience to millions of potential users. For an e-commerce site, that’s lost revenue. For a government service, that’s a failure of public duty. For a bank or insurer, it’s a trust issue.
A Challenge
If you work on a Swiss website that serves multiple languages, try this: open your site in an incognito window with your browser language set to French or Italian. See what happens.
If it loads in German, you have work to do. And honestly, that work should have been done years ago.
Key Takeaways
- The
Accept-Languageheader exists. Use it. It’s been part of HTTP since 1997. - Defaulting to German excludes 35%+ of Swiss users. That’s not a rounding error, it’s a third of the country.
- Language detection is trivially simple. A few lines of middleware in any framework.
- Store the user’s choice in a cookie and respect it on return visits.
- Treat every language version as first-class, not as a translation afterthought.
In a country that puts four languages on its money, the bar for web i18n should be higher than “hope they find the language switcher.”
Need help building a properly multilingual site for the Swiss market? Get in touch or visit tedbin.com.