-
Couldn't load subscription status.
- Fork 413
MSC4247: User Pronouns #4247
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
MSC4247: User Pronouns #4247
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Implementation requirements:
- Client
- Server
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Conduwuit already supports this by supporting arbitrary fields in #4133 so I'd assume this MSC only requires a client implementation that can read/write the field?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With gomuks/gomuks#574, Gomuks supports rendering pronouns (setting them is not implemented in the UI yet, but is supported on the backend).
Co-authored-by: Travis Ralston <[email protected]>
Co-authored-by: Travis Ralston <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems pretty straightforward. A few mostly-nitpicky comments.
| "avatar_url": "…", "displayname": "…", | ||
| "m.pronouns": [ | ||
| { | ||
| "grammatical_gender": "inanimate", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What grammatical genders are available? I think they need to be enumerated. I don't know what grammatical gender "they/them" would be, for example.
I also think they need to be prefixed (m.male for example) and defined what that means in terms of how the UIs should adapt their rendering. This will also allow for future grammatical genders from other languages or linguistic innovations to be defined later (and use unstable prefixes).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some languages distinguish between "animate" and "inanimate" so @everypizza1 may want to consider whether it's important to consider bot accounts as "inanimate" or whether we just anthropomorphise every user, but from brief research into a few African, Asian, and European languages, I think this should cover most of them:
{
"m.pronouns": [
{
"grammatical_pattern": "masculine",
"forms": {
"en": {
"subject": "he",
"object": "him",
"possessive_determiner": "his",
"possessive_pronoun": "his",
"reflexive": "himself",
"dependent": "him"
}
},
"display": { "en": "he/him" }
},
{
"grammatical_pattern": "feminine",
"forms": {
"en": {
"subject": "she",
"object": "her",
"possessive_determiner": "her",
"possessive_pronoun": "hers",
"reflexive": "herself",
"dependent": "her"
}
},
"display": { "en": "she/her" }
},
{
"grammatical_pattern": "neuter",
"forms": {
"en": {
"subject": "it",
"object": "it",
"possessive_determiner": "its",
"possessive_pronoun": "its",
"reflexive": "itself",
"dependent": "it"
}
},
"display": { "en": "it/its" }
},
{
"grammatical_pattern": "common",
"forms": {
"sv": {
"subject": "hen",
"object": "hen",
"possessive_determiner": "hens",
"possessive_pronoun": "hens",
"reflexive": "sig",
"dependent": "hen"
}
},
"display": { "sv": "hen/hens" }
},
{
"grammatical_pattern": "plural",
"forms": {
"en": {
"subject": "they",
"object": "them",
"possessive_determiner": "their",
"possessive_pronoun": "theirs",
"reflexive": "themself",
"dependent": "them"
}
},
"display": { "en": "they/them" }
},
{
"grammatical_pattern": "epicene",
"forms": {
"en": {
"subject": "ze",
"object": "zir",
"possessive_determiner": "zir",
"possessive_pronoun": "zirs",
"reflexive": "zirself",
"dependent": "zir"
}
},
"display": { "en": "ze/zir" }
},
{
"grammatical_pattern": "none",
"forms": {
"fi": {
"subject": "hän",
"object": "häntä",
"possessive_determiner": "hänen",
"possessive_pronoun": "hänen",
"reflexive": "itsensä",
"dependent": "hänen"
}
},
"display": { "fi": "hän/häntä" }
}
]
}There are extra forms not covered here, e.g. some languages have "noble" versions, but this MSC might want to just state an assumption that a chat protocol does not necessarily need or want to record the nobility level of the user 🙂
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
may want to consider whether it's important to consider bot accounts as "inanimate" or whether we just anthropomorphise every user
It's not just bot accounts that would have that - some users also use inanimate pronouns. The extended classes of pronouns will probably end up being removed, because most users will just want the summary and grammatical gender.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
To nudge this back on point, I agree that these really could do with being enumerated: free text isn't useful here as clients need to know what values are possible and how to handle them. I don't think they need m. prefixes as I doubt we'd ever allow custom reverse DNS values here. I do think that expanding on JContact's definitions by giving the sets of pronouns they're intended to map to (in whatever language) alongside each one, and probably setting a standard for the set of English pronouns to use. For example, it's unclear what "animate" is actually supposed to mean given that in English there would be animate-feminine, animate-masculine, etc.
I'd also argue for giving some hints as to how clients might use these. For example, I'd suggest offering a dropdown of common sets of pronouns and then also allowing free text. If the user picks a common one, the grammatical_gender can be set accordingly. If they enter free text, grammatical_gender gets omitted.
Also also, I'd argue that we don't need to get this 100% complete on the first go. I'd suggest starting off simply with the common English ones: 'neuter' meaning (they/them), 'masculine' (he/him), 'feminine' (she/her) and 'inanimate' (it/its) - anything else is expressed with free text (or a client could even add others to the dropdown if it chooses, it would just leave grammatical_gender unset). Others mappings between pronouns and grammatical_gender can be added in other MSCs.
We could also remind clients that "Not specified" must be an option (indeed, the default!)
Co-authored-by: Sumner Evans <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ara4n pointed out JSContact (RFC9553) in #4175 (comment). Looks like they have a pronoun field and ended up with basically the same design of declaring a grammatical gender and summary: https://www.rfc-editor.org/rfc/rfc9553.html#name-speaktoas
Main difference is that they only allow declaring 1 grammatical gender, which seems quite dumb. It's also a lot more complicated overall (translations are in an entirely separate top-level object and I have no idea what those k19 and k32 keys are)
| ## Proposal | ||
|
|
||
| Profiles may have an optional `m.pronouns` field as an | ||
| array. These fields can be fetched through the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
With regards to this being an array, note that JContact is a dictionary with context and preference order which means it's possible to designate different pronouns for different situations, and also to have pronouns of equal preference. However, given that this also has to be easy for a user to input and read, I think I'm leaning towards the solution of an array and assuming that if some are context-dependent then it will be apparent to the reader which to use when. In any case, a machine won't know this context so it's useful to express a default for this. I do think it's worth adding as an alternative though: this proposal lacks an alternatives section and it could probably use one.
| "m.pronouns": [ | ||
| { | ||
| "grammatical_gender": "inanimate", | ||
| "language": "en", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would probably vote for removing 'language' here, at least for a first cut of this feature. It's not 100% clear whether it's describing just the summary field or the grammatical_gender field too, and what the latter would mean. I feel like it's probably a vestige from when this MSC had the full set of pronouns individually. If it is included, I think it would need a fair bit of explanation on how it would actually be applied.
| The example uses it/its pronouns followed by she/her pronouns, both in English. | ||
| The array is ordered by preference, `language` should be a | ||
| [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language code, and | ||
| clients should render the `summary` for the pronouns. Clients SHOULD use the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Firstly, this is duplicative with the first paragraph of the proposal. Secondly, this is nontrivial. I think we need to give clients some hints on how they'd actually do this, ie. by picking an appropriate translation using the grammatical_gender field, accepting that this might get quite complex in different language, however I think it's okay to leave the specifics of what to use in different languages to the clients. I think it's worth specifying that they should be using grammatical_gender and not trying to parse the summary.
Also, I wouldn't use the phrase "state events" here (the events themselves are protocol-level), I would generalise to whenever the client refers to the user as you did above, calling out display name changes as an example.
|
|
||
| ## Security issues | ||
|
|
||
| None. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Potential for abusive content in the free-text field (obviously no more so than display names though, but I think it's worth noting).
Rendered
Implementations:
SDK: