See which language your readers actually use
Cookie-free content analytics built into the SDK you already ship: views by entry, language, model, and country — with a transport that never blocks a page.
Views by language · last 30 days
41,381
Top entries
01 · Two lines
A provider and a hook
Wrap the app once, then call the view hook on the pages you care about. Everything else — batching, retries, unload handling — is the SDK's problem.
- Safe during SSR and static builds — the tracker no-ops off the browser.
- Called outside the provider? It warns once and disables itself instead of crashing.
- Invalid properties throw in development and are stripped in production.
import { useTrackView } from
"@better-i18n/content/adapters/nextjs"
useTrackView("content.view", {
entryId: post.id,
contentModel: "blog",
entrySlug: post.slug,
language: post.locale,
})content.view · tr · blog · 1 event
sent with sendBeacon · 0ms on the main thread
02 · Transport
Never block the page, never lose the event
Three transports are tried in order and every failure is swallowed. An analytics call can slow nothing down and can throw nothing at your app.
Fire-and-forget; survives navigation and tab close.
on failure ↓
For bodies under 51.2 KB when beacon is unavailable.
on failure ↓
Last resort: a regular POST.
still failing → dropped silently
03 · What gets tracked
Explicit by default
The privacy posture is a design decision, not a setting you have to find: nothing is collected unless your code sends it.
Only what you call
No auto-pageview, no fingerprinting, no cookies. An event exists because your code asked for it.
Project context
Organization and project resolve from the API key, so payloads stay small.
Your own properties
entryId, contentModel, language, framework — any primitive you pass. Objects and arrays are rejected.
Country, not IP
The country code comes from Cloudflare's edge metadata; the IP is never stored.
04 · Key safety
A public key that cannot leak your data
The same threat model PostHog, Mixpanel, and Vercel Analytics use: the embedded key writes events and holds no read scope.
Write-only public key
A bi_pub_* key can send events and nothing else — it cannot read content or analytics.
Rate limited at the edge
Per-IP and per-project limits, plus WAF rules, so a leaked key can spam but not exfiltrate.
Scoped to one project
Keys are validated against a single projectId — cross-project reads are impossible.
First-party proxy
Rewrite the track endpoint through your own domain so ad blockers see only first-party requests.
FAQ
Questions teams ask before shipping it
“Nous utilisons Better I18N sur notre plateforme Next.js et nos applications mobiles. Un seul outil pour chaque produit : les traductions sont en ligne dès que nous poussons le code, sans redéploiement ni friction.”

Samet Selcuk
Fondateur, Hellospace
Get started
Find out which locales earn their translation budget
Install the SDK, track one view, and watch the language breakdown fill in — free while you evaluate.
Explorer davantage
Logiciel de localisation
Comparaison des principales plateformes logicielles de localisation
Gestion de la traduction
Systèmes modernes de gestion des traductions
Référencement multilingue
Optimisez votre site pour plusieurs langues
Référencement international
Touchez un public international grâce au référencement naturel (SEO)