Files
amethyst/docs/changelog/translators.json
T
Claude 765c1dfd7e feat: generate translator credits offline from the committed file
Makes docs/changelog/translators.json self-sufficient so a release no longer
needs to re-query Crowdin:

- sinceLastTag entries now carry each translator's languages ({user, languages}),
  recorded by the --seed run.
- Default mode (no flags) is offline: it generates the "## Translations" block
  straight from the committed file — reading sinceLastTag, grouping by the stored
  languages, and resolving npubs via the mappings registry. No token, no network.
- --seed/--raw remain the online paths (CI seeding / debugging). curl + git +
  credentials are only required there; the offline path needs just jq.

RELEASE_OPS now points at the tokenless `scripts/translators.sh` for the
changelog credits.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FWQWVdWLAwBUBX2gJ55y6b
2026-06-19 16:02:47 +00:00

28 lines
1.1 KiB
JSON

{
"_comment": [
"Translator credits source for the changelog, kept by scripts/translators.sh.",
"",
"mappings: a forever-growing Crowdin-username (or numeric id) -> Nostr npub",
" registry. Entries are never deleted. The --seed run appends new",
" contributors with a blank npub; fill those in as translators share theirs.",
" Keys match case-insensitively against the Crowdin username; a numeric key",
" matches the Crowdin user id.",
"",
"sinceLastTag: a rolling snapshot of who has translated since the last release",
" tag. Each entry is { user, languages }. Refreshed on every --seed run; do",
" not hand-edit. The changelog '## Translations' block is generated offline",
" from this list and resolved to npubs via mappings (blanks flagged UNMAPPED).",
"",
"Example mapping (replace with a real Crowdin username):",
" \"vitorpamplona\": \"npub1gcxzte5zlkncx26j68ez60fzkvtkm9e0vrwdcvsjakxf9mu9qewqlfnj5z\""
],
"mappings": {
},
"sinceLastTag": {
"tag": "",
"since": "",
"updated": "",
"translators": []
}
}