Skip to content

PRD-037 · Names in 13 languages: a public glossary page ​

Status · Draft, for operator sign-off Date · 2026-10-22 Owner · Marko Closes into · #612 Builds on · scripts/i18n-tools/native-terms.json (the translation glossary) · /sourcing (the model for a public, data-driven transparency page) · the naming rules (science-terms-native, origin-language rule, src/lib/name-origins.js)

Why this is a PRD. It adds a public route built from an internal translation tool, and it publishes the site's naming rules as a promise readers can check. That needs agreement on what is shown, how gaps are handled and how readers report a wrong form before anything is built.

1 · What ​

A page, /names, listing every name in the glossary with its form in each of Orrery's 14 languages.

  • Rows: one per name. Columns: English, then the 13 locales. The reader's own language is shown first after English.
  • Categories as filters: people (302), stars and constellations (235), surface features (89), bodies (82), places (24), facilities (14), agencies (7), stations (2). 755 names on 2026-10-22.
  • Search: one box matching any form in any script (typing Кеплер, ケプラー or Kepler finds the same row).
  • Wikidata link per row where the glossary has an id (every star and agency, 289 of 302 people, 43 of 82 bodies; few features and places). It opens Wikidata, which links to every language's Wikipedia.
  • The rules, in plain words, at the top: science terms, places and people are written the way each country's schools and agencies write them; built things (vehicles, missions) keep their name except in their origin language; agencies have a local form only in their own language.
  • "Report a wrong form" link per row (§4).

2 · Empty cells: what they mean and what we show ​

The glossary stores a form only where it differs from English, so an empty cell means one of three things:

CaseExampleShown as
Same as English (Latin-script languages)Houston in German; Michael Collins in Frenchthe English form, greyed
Agency, by ruleRoscosmos has only ru Роскосмосthe English form, greyed
Real gap (non-Latin script missing)Hayley Arceneaux has no Serbian or Korean; Chris Sembroski no Arabic, Korean, Serbian; most constellations no Hindimust not ship empty

On 2026-10-22, 277 entries have an empty non-Latin cell; 7 are agencies (by rule), so 270 are real gaps: 131 people, 128 stars and constellations, 10 bodies, 1 place.

Proposal: fill the real gaps by hand before the page ships (free route, same sourcing rules as the glossary: each form as that language's universities, schools or space agency write it; unsure → search native pages). Serbian is the operator's call.

Not checked yet: how the site writes those names in its pages today. The translated text may already carry a form where the glossary is empty; filling the glossary from the site's own form, where one exists, keeps one name per language.

3 · Where the name appears (optional, phase 2) ​

Each row could list the pages that use the name. That needs a scan of the content files per locale. Phase 2, if the operator wants it; phase 1 ships without it.

4 · Reporting a wrong form ​

Per row, a link that opens a prefilled email (or GitHub issue form) naming the entry, the locale and the current form. No accounts, no form backend. Corrections land in native-terms.json like any other edit.

5 · Translation and design ​

  • Page chrome (title, rules text, filters, column labels, the report link) translated into 13 locales by hand.
  • The table is wide (15 columns). Desktop: horizontal scroll with English pinned. Phone: one card per name, the reader's language first, other languages folded.
  • RTL: Arabic cells right-to-left inside the table.
  • Linked from /sourcing, the colophon and the footer's About area.

6 · Data path ​

native-terms.json stays the source of truth. A build step copies the display fields (forms, category, Wikidata id) to static/data/names.json, excluding sources and _comment. validate-data checks that no real gap remains (§2) once the fill is done, so the page cannot regress.

7 · Measurement ​

Umami: page views, searches (search event with surface: names, query length only, the existing pattern), report-link clicks.

8 · Done ​

  • /names renders all glossary entries with filters and search, desktop and phone, in all 14 locales.
  • No real gap left; validate-data enforces it.
  • e2e: search in three scripts finds one row; a category filter; the phone layout.

9 · Non-goals ​

  • Vehicle and mission names (name-origins.js) in phase 1. They follow a different rule (origin language only); a second table later if wanted.
  • Editing names on the page.
  • Pronunciation or audio.

10 · Open questions for the operator ​

  1. Route name: /names (proposed) or under /library?
  2. Report link: email or GitHub issue form?
  3. Phase 2 (where each name appears): wanted?

References ​

  • #612
  • scripts/i18n-tools/native-terms.json, src/lib/name-origins.js
  • /sourcing (src/routes/sourcing/+page.svelte): the transparency-page model

Orrery — architecture documentation · MIT · No tracking