The language promise

Language is an address, not a note in your browser.

The site has been bilingual for a long time, but the second language could not be reached: the choice lived in the browser, so every shared link opened in Finnish, the server showed search engines only Finnish, and «html lang» told screen readers Finnish while the text was English. A translation you cannot link to is a translation nobody reads. English now has its own address, and this page says where the promise still falls short.

Translated strings
0
across 135 files · checked 29.7.
Creatives in English
—
Destinations in both
—
Oldest open request
—
The promise

Three tiers, not one promise

«The site is bilingual» holds up until you look for something specific. These are the boundaries, written at the precision at which they can actually be kept.

Always in both languages
  • The whole public site and the partner portal, every view and every tab.
  • Attribution rules, payout terms and hold reasons — everything that touches money.
  • Notifications and error pages, including the last page you see when something falls over.
  • The tour's chapters: a constraint refuses to store half a tour.
On request, visibly queued
  • The asset shelf. There is more of it in Finnish, and the figure below says so without rounding.
  • Interactive product demos. Requests are counted, and the most-asked one is translated first.
  • Recordings. Caption languages are recorded before the shoot, not after.
Finnish on purpose
  • The binding text of the partner agreement. A translation would be indicative only, and an indicative contract is worse than a clearly labelled summary.
  • The substance of those terms is readable in both languages at /tracking and /payouts instead, and it is labelled as a summary.
Content

The interface is the frame — the content is the picture

The site's 1,977 string pairs are the buttons and the labels. The programme descriptions, the brand taglines and the campaign briefs live in the database, and they existed in Finnish only. This is where that stands now.

Translatable cells
0
registered, not estimated
Translated into English
0,0 %
0 / 0
Signed off by a person
0
0 are AI-assisted and awaiting review
Glossary terms
0
0 machine-enforced

The signed-off count is zero today, and that is an honest number rather than a fault. The English is an AI-assisted draft nobody has read through yet — the database refuses to mark it approved without a name and a date, and the pages mark it visibly. It is not being hidden behind a rounded figure.

Addresses

English is its own URL, not a state

Two languages on one address cannot appear separately in search results, however good the translation is. So Finnish is the bare path and English is the same path with a parameter — and each names the other.

/payouts                → fi   (canonical, x-default)
/payouts?lang=en        → en

html[lang]              fi | en  — set by the address
<link rel="canonical">  points at the language being read
<link rel="alternate" hreflang="fi|en|x-default">
sitemap.xml             both languages, xhtml:link alternates

The choice is still stored in the browser, but it is written into the address immediately. What you see is therefore always what you can send onward — including to someone who has never been here.

Coverage by resource

What exists in both, and what does not

Merge tokens

Two vocabularies, one map

Finnish templates use {{etunimi}} and English ones {{firstname}} — as they should, since an English variable inside a Finnish template reads like a bug to the person using it. That is only right while the pairing is written down. Undeclared, a partner switching language loses their variables silently.

{{etunimi}}{{firstname}}First name
{{nimi}}{{name}}Full name
{{linkki}}{{link}}Tracking link
{{ongelma}}{{problem}}Problem
{{ratkaisu}}{{result}}Result
{{tulos}}{{result}}Result
{{tuote}}{{product}}Product
{{ohjelma}}{{program}}Programme
{{provisio}}{{commission}}Commission
{{aika}}{{time}}Time
{{edut}}{{benefits}}Benefits
{{kilpailija}}{{competitor}}Competitor
{{maksuehto}}{{payment_terms}}Payment terms
The check

Translations are checked by machine, not by eye

2 065 string pairs is too many to read through. The translation check runs as part of linting, and it fails rather than warns.

Link parity

A path named in the Finnish sentence has to appear in the English one. This is the failure that actually costs: the sentence is translated, the destination is not, and the reader is pointed somewhere else.

Untranslated

Strings identical in both languages, excluding product names and acronyms, which are listed explicitly.

Leaked letters

An ä, ö or å inside an English string is always a leftover, never a style choice.

Figures and variables

Figures are compared after normalising: 1 000 = 1,000, 1,4 = 1.4, 40 000 = 40k, and 14.5. is a date rather than a decimal.

Key table symmetry

Both languages in the key table have to hold the same set of keys.

Hardcoded language

An «html lang» literal anywhere but the document shell is rejected — that exact defect is what told screen readers the wrong language.

What we do not do

Four things that stay out

We do not machine-translate binding contract text and call it a translation. The summary is translated, and labelled as a summary.

We do not serve another language in silence. If a destination does not exist in yours, the card says so before you click — including when that makes us look unfinished.

We do not keep the language choice in the browser alone. The address carries it, so a shared link opens in the language you sent it in.

We do not round coverage up. 12.5% is on this page as its own number, because a figure nobody publishes never improves.