Settle “Kind” or “Type” in the interface, once, before more languages are filled #705
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#705
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
From the list: “‘Kind’ or ‘Type’, which is the most accurate term.” The interface uses both words for the same thing, in the same screens, and every language translates whichever it finds. Settling it now costs a catalogue edit in three working languages; later it costs the drafts of all the others.
What exists today
Counted on 2026-10-02 in
src/postulo/locale/fr_FR/LC_MESSAGES/django.po(3,124 entries) and the templates, atf09b6010b:src/postulo/applications/forms.py:119,src/postulo/jobs/models.py:888,:1496), “an unknown file type”, a media type in “That address is %(type)s…”, a “document type declaration”, andTypefor typography._("kind")is the label of 15 model fields:applications/models.py:548,:712,:844;core/models.py:305,:548,:698,:811;documents/models.py:258,:512,:579,:718;jobs/models.py:252,:1373;plugins/models.py:192;resume/models.py:306.Kindstands alone as a label or heading in seven places:jobs/tables.py:94(the companies table's column),templates/applications/report.html:54,templates/cotton/identifier_row.html:24,templates/jobs/capture_page.html:90,templates/partials/phone_numbers.html:61,templates/partials/postal_addresses.html:71,templates/server/design.html:195. The rest of the 46 are sentences (“Choose what kind of identifier this is.”, “No letters of this kind yet.”, “Kinds of letter”) and%(kind)splaceholders, which are code names and unaffected.report.html:54labels the report's period selector (a month, a quarter, the last few weeks, dates you choose) “Kind”.Kindas “Type” and 28 of the 46 strings with “type”, once with “genre” in an idiom (“ce genre de chose”); Portuguese translates 29 with “tipo”. “Genre” and “Género” are used for nothing else in either catalogue. Besides French and the two Portuguese catalogues (European and Brazilian, which carry all 46), 36 more catalogues carry drafts for these strings, and they say sort far more often than type: German “Art”, Dutch “Soort”, Polish “Rodzaj”, Czech and Slovak “Druh”, Croatian and Slovene “Vrsta”, Estonian “Liik”, against “Tipo”, “Typ”, “Type”, “Tip” in the Romance, Scandinavian and some other languages. All are flaggeddraft.msgid "Type"already means typography.Section("type", _("Type"))insrc/postulo/core/design.py:131and the heading atsrc/postulo/templates/server/design.html:99; French and Portuguese translate it “Typographie” and “Tipografia”. A message id with two meanings is one entry:postulo.core.messages_toolkeys messages by (context, msgid) andmergecarries one translation per key (src/postulo/core/messages_tool.py:578-606), so renamingKindtoTypewould silently give the design page “Type” in French, and gettext's own compiler refuses a duplicate id. The tool supportspgettext(messages_tool.py:119-122), already used (src/postulo/plugins/builtin/patterns.py:41).merge“drops what the source lost” (tests/test_messages_tool.py:100): a changed message id arrives empty in all 68 catalogues, and the 39 that carry these strings lose them. The tool has no rename command.Tracking-applications.md:721and:729,Your-career-record.md:178, and as table headers (Cover-letters.md:5,Your-career-record.md:585);docs/TRANSLATING.md:192-205talks of “kinds of letter”.kindis the name everywhere:CompanyKind,DocumentKind,kinds.register, the API'skindfields, the archive's keys, the plugin entry-pointkind=.Checked against
mainatf09b6010b.Proposal
docs/TRANSLATING.mdand the contributor guide: in the interface, what a person picks from a list to say what sort a thing is is called its Type;kindstays in code, in the API, in the archive and in the plugin contract.Typography(French and Portuguese already have “Typographie” and “Tipografia”) on the design page, soTypemeans one thing.draftflag; thenscripts/messages.py extract --checkandcheckpass.report.html:54reads “Period”.TRANSLATING.mdwhich words a translator should not use for it (below).Decisions
pgettextcontext onType, or a new messageTypography. Recommended:Typography, which is also the better English for a design page's heading.TRANSLATING.mduntil it is not, with “Type” (not “genre” or “sort”) named for the field.Builds on
Issues #349 (the Weblate round trip), #347 (the per-commit gate), #269 (the next languages; “one sweep, before more languages are filled”). Related: #706, #690 (the same kind of rename for “Programming languages”), #681.
Done when
grepfinds no label or heading that says “Kind” or “kind” in the interface strings listed above; the wiki anddocs/TRANSLATING.mdsay Type.tests/test_translations.py(or besidetests/test_messages_tool.py) fails if a message id is used both with and without a context, or ifKindreappears as a standalone label, and the three working catalogues carry the translations of every renamed id (French “Type”, Portuguese “Tipo”, British English the source) with no entry lost:scripts/messages.py extract --checkandcheckpass.f09b6010b, untouched); new strings are in the working catalogues (en-GB, fr-FR, pt-PT as drafts) and Weblate (#349).From the list of improvements of 2026-10-02.