A Linguistic Fingerprint
Every HTTP request carries a small autobiography. Hidden in the Accept-Language header is a trace of where you've lived, what you've studied, whom you've worked with, and what you refuse to read.
Consider this header:
ja-JP-x-kansai, ja-JP;q=0.95, ja;q=0.9, en-GB;q=0.7, en;q=0.6, fr-CH;q=0.4, tlh;q=0.2, *;q=0.1, lol;q=0
Behind this string is a person. Let's call her Yuki.
ja-JP-x-kansai — Yuki grew up in Osaka. Her first choice is Japanese content with Kansai regional flavor—the x-kansai private use subtag signals a preference for interfaces that might say "おおきに" instead of "ありがとう", or "なんでやねん" when something goes wrong. No server actually provides this, but Yuki keeps it there. Optimism, or stubbornness.
ja-JP;q=0.95 — Standard Japanese for Japan is almost as good. The 0.95 quality value means Yuki accepts it, but with a faint sigh.
ja;q=0.9 — Generic Japanese works too. Content localized for other regions—overseas Japanese communities, perhaps—is acceptable, though less preferred than content specifically for Japan.
en-GB;q=0.7 — Yuki spent two years in London for a master's degree. British English feels natural—"colour" looks right, "organization" looks wrong. The preference stuck.
en;q=0.6 — Generic English is fine as a fallback. Yuki reads technical documentation in English daily; the specific variant matters less than having something comprehensible.
fr-CH;q=0.4 — Three months on a project with a Geneva-based team left Yuki with conversational French and a preference for Swiss conventions. Parisian French works, but septante and nonante feel more familiar now.
tlh;q=0.2 — Yuki has been learning Klingon for two years. She's not fluent, but if a website offers tlh localization, she'll take the practice. The low quality value acknowledges her limitations: Klingon is for fun, not for filing taxes.
*;q=0.1 — The wildcard. If nothing else matches, Yuki will accept any language with minimal enthusiasm. Portuguese documentation is better than no documentation. Probably.
lol;q=0 — The Lolcat language (ISO 639-3) is explicitly excluded. Yuki appreciates internet culture, but draws a firm line at "I CAN HAZ CHEEZBURGER" as a user interface language.
Fair warning: reading a linguistic fingerprint is probably more complex than this—certainly more complex than parsing Accept-Language characters in Ruby.