data.placeholder.com/text

Placeholder text

Classic lorem ipsum, realistic filler copy in 17 languages, strings that break layouts on purpose, and pseudo-localization for your own UI text. All seeded: the same URL returns the same text forever.

Lorem ipsum

https://data.placeholder.com/text/lorem[?paragraphs=N | sentences=N | words=N | headlines=N][&format=][&start=][&seed=]
ParameterValuesDefault
paragraphs / sentences / words / headlinesPick one. Max 100 / 500 / 10,000 / 100. Same as type=paragraph&count=N.3 paragraphs
formatplain, html, markdown, jsonplain
startclassic (begins "Lorem ipsum dolor sit amet") or randomclassic
seedAny string up to 128 characters. Change it for different text.0

Realistic copy in 17 languages

Neutral website and product copy that reads like the real thing, so you can judge typography, line length and layout in each locale. It is a parallel corpus: the same seed gives the same content in every language, so you can compare one layout across locales.

https://data.placeholder.com/text/<lang>[?type=paragraph|sentence|headline|product|ui][&count=N][&format=][&seed=]
CodeLanguageCodeLanguage
enEnglishptPortuguese (Brazil, pt-BR)
svSwedishplPolish
noNorwegian (Bokmål, nb)arArabic (right-to-left)
daDanishheHebrew (right-to-left)
fiFinnishjaJapanese
deGermanzhChinese (Simplified, zh-Hans)
nlDutchkoKorean
frFrenchitItalian
esSpanish

Aliases: nb, pt-br, zh-hans, zh-cn, iw. Responses carry Content-Language, and HTML output is wrapped in <div lang="…" dir="…">.

Types: paragraph (default 3), sentence (5), headline (5), product (3), ui (5); max 100 each, 500 for sentences. Shortcuts paragraphs=, sentences=, headlines= and products= work here too.

Stress-test strings

Hand-picked strings that break layouts, encodings and i18n: each with a note, a language tag, its length in code points, UTF-16 units and UTF-8 bytes, and the exact code points.

KindWhat it tests
long-wordsLong compound words, unbroken strings, long URLs, e-mails and paths
rtlRight-to-left scripts, mixed bidirectional text and bidi controls
cjkChinese, Japanese and Korean, full-width forms, astral ideographs
emojiZWJ sequences, skin tones, flags, keycaps, presentation selectors
namesPerson names from 1 to 100+ characters: apostrophes, hyphens, particles, diacritics, scripts
combiningCombining marks, NFC vs NFD, stacked diacritics, Zalgo-style overflow, Indic and Thai
whitespaceZero-width characters, no-break and fixed-width spaces, line separators, control characters
numbersLocale number, currency, date and time formats, plus floating-point traps
casingCase-mapping traps: Turkish I, sharp s, final sigma, digraphs, ligatures
confusablesLook-alike characters: homograph domains, styled letters, dashes and quotes
scriptsLanguage names in 30 scripts, for font fallback and line height
pseudoPseudo-localized UI strings

format=plain puts one entry per line; some whitespace entries contain line breaks themselves, so prefer JSON for exact tests.

Pseudo-localization

Turn your own strings into accented look-alikes that are about 30 to 40 % longer and wrapped in brackets. You'll see at a glance which strings aren't translatable, which get cut off and which are glued together. Placeholders ({name}, {{count}}, %s, ${x}), HTML tags, entities, URLs and e-mail addresses are left intact.

curl --data-binary @messages.txt "https://data.placeholder.com/text/pseudo"

?text= takes up to 4,000 characters; POST the raw UTF-8 text as the body for up to 64 KB (not cached). Options: expand=false, brackets=false, format=plain|json.

Notes