Product
For a real person, Normatico preserves identity by default: Иван → Ivan for CRM and email. It returns a traditional equivalent like Иван → John only when you explicitly ask. Uncertainty is never hidden.
// every response, always "result": { "output": "Ivan", "display": "Ivan", "greeting": "Dear Ivan,", "sort_key": null, "monogram": "I" }, "quality": { "confidence": 0.99, "level": "human_verified", "method": "verified_dictionary", "needs_review": false, "graph_status": null }, "warnings": [], "provenance": [{ "source": "name_graph", "license": "internal" }], "cache": { "status": "hit" }
Transliterate and localize a name for a target locale and purpose — CRM display, greeting, passport, matching.
Extract a human name from an email address and render it for your locale.
Decide whether two spellings are the same person — across scripts, diminutives, and typos.
Build a culturally correct greeting: register (formal/informal), channel (email, letter, SMS).
Standards-compliant romanization: ICAO 9303, BGN/PCGN, GOST 7.79, Ukrainian 2010.
Detect broken encodings, company names in person fields, swapped given/surname.
Phonetic guidance so your team says the name right on the first call.
Every rendering carries a quality level. Machine guesses are served with needs_review until independently verified, and low-confidence answers are flagged — not presented as truth.
Honesty is a feature. These are hard guarantees, not fine print.
It is not a general translator: it won't rename a real person to a cultural equivalent (Иван → John) unless you explicitly ask.
It does not present unverified guesses as truth — new renderings carry needs_review until independently verified.
It does not claim full CLDR compliance — CLDR is a locale and formatting layer, used as a practical subset, never as a name dictionary.
It never stores raw names under no_store, and never logs raw names in production — structured logs use a strict field whitelist.
It never caches low-trust answers as truth: the deterministic floor never guesses, and only verified, high-confidence renderings enter the cache.
It does not guarantee correctness for unseen names — it returns an honest confidence and flags low-confidence answers with needs_review instead of hiding them.