Emoji Translator
Convert plain text into emoji-rich messages or decode emoji back to keywords. Replace-or-append mode, 150+ built-in dictionary, plural support, grapheme-aware emoji parsing. Free and 100% private.
What is the Emoji Translator?
Emoji Translator runs both directions with a built-in dictionary of 150+ entries covering the workhorse emoji users reach for in chat: faces and emotion, food and drink, animals, weather, transport, technology, hands and gestures. Text → emoji matches whole words case-insensitively (with simple plural handling so 'cats' still resolves to 🐱). The 'replace' mode swaps the word for the emoji; 'append' keeps the word and adds the emoji after it — perfect for spicing up a paragraph without changing its meaning. Emoji → text uses Intl.Segmenter so ZWJ-joined sequences and skin-tone modifiers stay intact as a single grapheme, then maps each known emoji to its canonical `:keyword:` form for readable decoded output. A clickable dictionary panel at the bottom doubles as a discovery aid — click any entry to insert it directly into your input. Pure functions, no network.
How to use it
- Pick a direction: Text → Emoji or Emoji → Text.
- Paste or type your message into the input.
- Toggle 'Replace word' or 'Append emoji' for text → emoji mode.
- Copy the translated output or browse the dictionary to discover more.
Benefits
- Bi-directional: text → emoji and emoji → text in one tool.
- 150+ built-in dictionary covering faces, food, animals, weather, tech and gestures.
- Plural support — 'cats' resolves to 🐱 via -s suffix fallback.
- Replace or append mode — swap words outright or just decorate them.
- Grapheme-aware emoji parsing via Intl.Segmenter so ZWJ sequences and skin-tone modifiers stay whole.
- Coverage percentage shows how many of your words/emoji matched the dictionary.
- Clickable dictionary panel — discover emoji by keyword and insert in one click.
- Runs entirely in your browser — no upload, no API.
Frequently asked questions
How does the text → emoji matching work?
Each word in your input is lowercased and looked up in the built-in dictionary. If found, the matching emoji is either substituted in place of the word ('replace') or appended after it ('append'). Words not in the dictionary pass through unchanged.
Why didn't my word match?
The dictionary is curated at ~150 high-traffic entries to keep it small and snappy. Common synonyms work (love, happy, fire, coffee, …) but obscure or technical words may not. The full keyword list is shown at the bottom — use 'Append' mode to leave non-matches untouched.
How does emoji → text handle compound emoji?
Toollyz uses Intl.Segmenter for grapheme-level splitting, so ZWJ-joined sequences (👨🚀, 👩❤️👨) and skin-tone modifiers are treated as a single emoji. Each known emoji becomes `:keyword:`.
Does it handle plurals like 'cats' → 🐱?
Yes — if a word ends in 's' and the singular form is in the dictionary, the singular emoji is used.
Is there a way to add my own entries?
Not in the UI today. The dictionary is a static module — fork the repo on GitHub if you'd like to contribute additions.
Will the output work on Discord / Slack / WhatsApp?
Yes. The output is standard Unicode emoji code points that render anywhere fonts support them.
What's the 'coverage' percentage?
In text → emoji direction it's the fraction of words that matched a dictionary entry. In the reverse direction it's the fraction of emoji in your input that were recognised.
Why are short words like 'is' or 'a' ignored?
Stopwords and very-short tokens generally don't have a good single-emoji counterpart, so they pass through. This keeps the output readable rather than peppered with random emoji.
Can I translate paragraphs?
Yes. The whole input is processed, preserving original spacing and punctuation so the result reads naturally.
Is my text uploaded anywhere?
No. The dictionary is bundled with the page; translation is a pure browser computation.
Why does the same word always pick the same emoji?
The dictionary is keyword-keyed — each word maps to one canonical emoji. Multi-emoji synonyms (love → ❤️ vs 🥰) are picked by the first dictionary entry that lists the keyword.