Skip to content

chore(l10n): translator context hints + Transifex skill watermark#112

Merged
luflow merged 8 commits into
mainfrom
claude/transifex-9adcdd
Jul 24, 2026
Merged

chore(l10n): translator context hints + Transifex skill watermark#112
luflow merged 8 commits into
mainfrom
claude/transifex-9adcdd

Conversation

@luflow

@luflow luflow commented Jul 24, 2026

Copy link
Copy Markdown
Owner

What changed

TRANSLATORS context hints (comments only, no string/key changes):

  • Answers given to translators on Transifex are now persisted as TRANSLATORS comments next to the strings, per the Nextcloud translation docs, so they reach every language via the .pot instead of a single comment thread.
  • Covers: check-in status chips ({count} attended/absent/pending tense question), "Check-in" as noun (heading + audit-log label), "Attendance is not available" (app name), reminder-target buttons and admin radio options (non-responder semantics: people without a response, "no" answers are deliberately not reminded), "Open" (verb), "Others" (response-summary section), standalone ToS/Privacy button labels.

Transifex skill improvements (.claude/skills/transifex/):

  • Skill now mandates a context hint in the code for every answered translator question (with syntax rules for PHP/JS/Vue).
  • New answered-watermark: tx_feedback.py learns list --new and mark-answered; state.json records answered_up_to so future runs only surface threads with newer activity and nothing gets answered twice — especially open issues we cannot resolve ourselves (translator tokens get 403).
  • Watermark initialized to 2026-07-24T17:24:24Z after this session's reply was posted.

Why

Translator questions (tlend, rakekniven) kept resurfacing because answers lived only in Transifex comment threads and unresolvable open issues reappeared on every run. Hints in the code document the answers for all languages permanently; the watermark keeps skill runs idempotent.

Notes for review

  • No translation keys changed → no impact on the Flutter client or existing translations; hints appear in Transifex after the next .pot sync.
  • npm run build passes. npm run lint currently fails in this environment before touching any files (ESM/CJS conflict loading @nextcloud/eslint-config) — pre-existing, unrelated to these comment-only changes.

🤖 Generated with Claude Code

luflow added 8 commits July 24, 2026 18:40
- Answering a translator question now always also adds a TRANSLATORS
  context hint next to the string in the code (per Nextcloud docs), so
  the answer reaches every language via the .pot instead of one thread.
- tx_feedback.py learns 'list --new' and 'mark-answered': state.json
  next to the skill records answered_up_to, so subsequent runs only
  surface threads with newer activity and nothing is answered twice.
…reads

Persist the answers given to translators (tlend, rakekniven) as context
hints next to the strings, so they reach every language via the .pot:
check-in status chips (tense), Check-in noun/heading, Attendance app
name, reminder-target buttons and radio options (non-responder
semantics), Open verb, Others section, standalone ToS/privacy labels.
Customer feedback: booking push notifications now thank the person and
speak to them directly ('Thank you! You are scheduled for this
appointment.' / 'Thank you! Unfortunately, you are not part of this
appointment this time.') — generic 'appointment' wording, not
customer-specific terms.

All scheduling-family strings get TRANSLATORS hints clarifying that
scheduling means giving a person a place in the appointment (German
'einplanen'/'eingeplant', not 'planen'/'geplant') — the action button,
the status labels, the close-dialog groups, admin settings and the push
subjects. IcalService pulls the status label onto its own line so the
hint binds to the right string.

tx_feedback.py: new 'find' command (search source strings for ids),
'reply --issue' opens a Transifex issue instead of a comment, and curl
-g so paginated API links with [] work.
The feature/noun 'scheduling' translates as 'Planung'; only the
per-person action ('einplanen') and status ('eingeplant') differ from
the 1:1 translation.
@luflow
luflow merged commit 30e6826 into main Jul 24, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant