# Language labels clients actually use

**Status:** Drafting · **Opened:** 2026-07-10

Nostr has no ratified way to say what language an event is written in. Soapbox's own founder tried — NIP-37 "Language Tag" closed unmerged in 2024, with the standing objection that "all automatic translation tools will already detect the language automatically anyway." A second proposal (PR #1127) is still open, still unmerged. Meanwhile the read side already shipped: NIP-50 defines a `language:` search filter and relay software implements it — but almost nothing on the publish side labels consistently, so there is nothing reliable to filter. Result: a Spanish-speaking user cannot dependably ask for their own language.

## The gap

This is not a missing spec. NIP-32 labeling is ratified and its spec literally contains the example — `["L","ISO-639-1"], ["l","en","ISO-639-1"]`. What's missing is a publish-side convention plus an adoption loop. And the auto-detection objection fails exactly where we live: short notes, code-mixed Spanish/English, and relay-level filtering that shouldn't require content analysis of every event.

## What we're sketching

A thin convention document: NIP-32 language labels on kinds 1 and 30023, localized NIP-89 handler metadata so app directories aren't English-only, and a namespace caution (NIP-C0 already uses an `l` tag for *programming* language). Reference implementations, not just prose: an MKStack skill, and our es-layer forks labeling on publish. Where PR #1127 overlaps, we support it rather than compete with it.

## Why us

Bilingual isn't a feature for us; it's the firm's thesis. We ship Spanish layers with symmetric EN/ES parity gates, and we hit this gap on every one of them.

## Receipts

- [NIP-37 "Language Tag" — PR #632](https://github.com/nostr-protocol/nips/pull/632) — closed unmerged 2024-06-07, objection quoted from the thread
- [PR #1127 — Internationalization and Localization](https://github.com/nostr-protocol/nips/pull/1127) — still open, unmerged
- [NIP-32: Labeling](https://github.com/nostr-protocol/nips/blob/master/32.md) — ratified; contains the ISO-639-1 language example
- [NIP-50: Search Capability](https://github.com/nostr-protocol/nips/blob/master/50.md) — `language:` filter, read-side
- [NIP-C0: Code Snippets](https://github.com/nostr-protocol/nips/blob/master/C0.md) — the other `l` tag; namespace caution
- [ditto-relay](https://gitlab.com/soapbox-pub/ditto-relay) — shipping `language:` search filtering today
