Is your site leaking translation keys?
When a key is missing, users see cart.checkout_button
instead of "Proceed to checkout". Enter a URL and we'll crawl up to 5 pages of the site
looking for leaked keys, missing-translation markers and unrendered placeholders.
Public pages only, up to 5 per scan. Nothing is stored. Scans are rate-limited per visitor.
Crawling pages and analyzing rendered text — this can take up to 30 seconds…
potential found
Leaked keys mean missing translations. LangSyncer catches these before your users do: translation coverage per language, missing-key alerts and one-click AI translation for whatever's left.
Fix them with LangSyncer →What the detector looks for
- Dot-notation keys rendered as visible text or attributes (
messages.welcome) - Missing-translation markers printed by i18n libraries ("translation missing: es.cart.title")
- Unrendered template syntax reaching the page (
{{ username }}) - Translation helper calls leaking as literal text (
__('auth.failed')) - Whole elements containing only snake_case identifiers
Frequently asked questions
What does the detector actually check?
It fetches the page you give it and looks for signs that a translation never resolved: dot-notation identifiers rendered as visible text or attributes, missing-translation markers printed by i18n libraries, and unrendered template syntax that reached the HTML.
Can I scan a page behind a login?
No. The detector requests the URL as an anonymous visitor, so it only sees publicly reachable pages. For authenticated screens, scan your own codebase instead — leaked keys almost always come from a lang file that is missing an entry rather than from the template.
Why would a translation key show up on a live site?
Because the key exists in the code but not in the target language's file. Laravel renders the key itself when a translation is missing, so the user sees cart.checkout.title instead of text. It is invisible in your source language and easy to miss in the languages you do not read.
It found nothing — does that mean my translations are complete?
It means no leaked keys are visible on that one page. Coverage gaps on other pages, in emails, or in states you have to trigger by hand will not appear here. A full coverage report per language is the reliable way to answer that question.
Does it work on sites that are not built with Laravel?
Yes. The patterns it looks for are produced by most i18n libraries across frameworks, so the detector works on any server-rendered page. The fixes it links to are Laravel-specific, but the diagnosis is not.
Other free tools
Blade Hardcoded String Scanner
Paste a Blade template and find text that should be behind __() — with suggested keys and a generated lang file.
Pluralization Tester
Pick a language, type a number, see which CLDR plural category applies — live, via your browser's Intl.PluralRules.
AI Translation Cost Calculator
Keys × languages = quota units. Estimate the initial run and the monthly churn for your project.
Lang File Converters
Convert between Laravel PHP arrays, JSON, YAML and CSV — nesting, placeholders and plural pipes preserved.
Catch missing translations before your users do
A leaked key on a live page means a lang file is missing an entry. LangSyncer reports coverage per language, flags what's missing, translates the gaps with AI and publishes the fix without a deploy.