Store form of address, pronouns and gender as language-neutral concepts #1019
No reviewers
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo!1019
Loading…
Reference in a new issue
No description provided.
Delete branch "921-addressing-concepts"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #921
What changed
Form of address, pronouns and gender are now stored as language-neutral concepts (
mrs,doctor_f,they,non_binary...) and drawn in the language of the page or the document. Switching a record from English to French shows "il" forhewith nothing stored changed. "Other" is the one exception: free text, stored and shown as typed in every language.accounts/addressing.py: concept keys, per-language word tables with sources, the subset each language offers,label(field, key, language)(the language's table, then the gettext catalogues for a language or concept the tables lack) andconcept_of/stored_value(a word of any catalogued language, or a pre-#864 gender word, is the concept; anything else stays as typed).accounts/0047_addressing_concepts: existing values become concepts where they match one in any language, unmatched text is kept as typed; reversible (writes the word of the career record's language, English where none).(key, label); a bound form keeps what was sent; a word typed under Other that a list has is stored as its concept.printing/rendering), the vCardPRONOUNSline and the CV form's help texts resolve the label in their own language.ProfileOutreturns{key, label}for each of the three (breaking shape change);ProfilePatchaccepts a key, a word of a list, or free text.demonyms.is_femininecompares withfemale.Decisions
doctor/doctor_f,professor/professor_f,engineer/engineer_f. English and French print "Dr"/"Prof."/"Pr" for both; Portuguese prints Dr./Dr.ª, Prof./Prof.ª; a bare "Dr"/"Prof." migrates to the unmarked concept.Tests
New and updated: form of address, gender, language registry, demonyms, CV prints (EN/FR/PT), vCard, candidate file, security (personal details, profile API), browser (form of address, CV prints, 320px lists), plus a migration test (forward, backward, forward again) and an archive round trip from format 73.
Library check: none needed.
Model use: written with Claude Code, reviewed by the person who opens the PR.
🤖 Generated with Claude Code
A profile held one language's words ("Mme", "iel", "Féminin"), so a record switched from English to French kept showing the English word, and a CV in another language printed the words of the language they were typed in. The maintainer decided (2026-10-15) to store language-neutral concepts and draw them in the language of the page or document, with "Other" the one exception: free text stored and shown as typed. - accounts/addressing.py: concept keys (mr, doctor, doctor_f, she, he, they, female, non_binary ...), per-language word tables with their sources, the subset each language offers, label(field, key, language) (table, then the catalogues for a language or concept the tables lack) and concept_of / stored_value (a word of any language, or a pre-#864 gender word, is the concept; anything else stays as typed). - Gendered titles have a neutral fallback: English and French print Dr and Prof. for both doctor and doctor_f; Portuguese prints Dr./Dr.ª; a bare Dr or Prof. becomes the unmarked concept. - Migration accounts 0047 turns existing values into concepts (frozen table, unmatched text kept), reversible to the word of the record's language. - The form offers (key, label) options, keeps a posted value on a bound form, and stores a word typed under Other as its concept. Documents and the vCard PRONOUNS line resolve the label in their own language; the profile API returns {key, label} and accepts a key, a word or free text. - Archive format 74 and candidate format 22; the importer and the candidate reader map older words to concepts. - Gender never decides pronouns or form of address, or the reverse. Closes #921 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>