Template-system and proof-of-concept for rendering gender-neutral text- and email-templates with the correct pronouns of all people involved.
Project description
Template-system for rendering gender-neutral text- and email-templates properly gendered and with the correct pronouns of all people involved.
Ever had the struggle of correctly gendering people in your automated emails? Are you sick of writing email templates that are unsupportive of non-binary people, gender everyone with ugly underscores, or clumsily avoid pronouns alltogether, costing you hours of work to frickle them together? With gender*render, you can write easy, gender-neutral templates for your emails, and automatically render them into correctly gendered emails, given the pronouns and names of all people concerned! [Jump to quickstart]
Gender*render is not only a piece of software that can definitely come in handy if you want to write progressive automated emails, but also a proof of concept. Many people say that correctly gendering non-binary people, people with unusual pronouns, or people with no pronouns at all in automated fashions is impossible. And many live by said premise. gender*render as a concept is supposed to be a proof that this is simply false, and that any such claims come from a mixture of missing will and laziness, with technical limitations merely being a pretext. Gender*render comes with an in-depth specification, so you can easily implement it in any language of your choice, port it to other (human) languages or read about the thoughts behind this project! [Download spec]
Advantages/Features
Using gender*render offers a set of advantages over traditional "one for men and one for women"-email templates:
-
Supportive: Supports addressing one or multiple people in your texts, talking about them in the first as well as second person and multiple grammatical contexts, supports addressing people with no preferred way of addressing, supports preferences regarding noun gendering, supports neo-pronouns.
-
Easy: Easy enough for non-tech people to write templates with it - writing one template for all genders with gender*render may actually be easier than writing two templates for two genders.
-
Slim & Handy: gender*render doesn't get into your way and doesn't cluster up your template with syntax for things you don't need right now.
-
Portable: Comes as a python-module, but with a full specification that encourages re-implementation in different languages.
-
Reliable: Tested with 100% code- and branch coverage and a more than 2:1 testing code to actual code ratio.
-
Well-documented: Written with inspiration from literate programming, gender*render comes with a specification with in-depth elaboration on the underlying concepts, as well as full documentation of all methods, and a getting started guide.
If your web forms ask your customers for their pronoun preferences instead of their gender, preferably with text entry boxes instead of dropdowns, and you have these pronoun information in a nice data base, you can easily automate the process of correctly gendering your emails based on the person they are directed to.
Quick Start 🚗💨
Installation • Usage • Template Syntax
Installation
pip3 install gender-render
Usage
import gender_render as gr
# use:
rendered_template_as_a_str = gr.render_template(
template_as_a_string,
pronoun_data_as_a_string_or_dict
)
# or:
rendered_template_as_a_str = gr.render_template(
template_file_path,
pronoun_data_file_path,
takes_file_path=True
)
Template Syntax
Template & Pronoun Data | Result |
Addressing one person:
Dear {Mr_s Doe},
Yesterday, I was asked about your
wellbeing, "Is there reason to worry
about {them}?", and I told the
person who asked that [...]
{
"address": "Mrs",
"family-name": "Smith",
"object": "her"
}
Having more value in the pronoun data than needed is, of course, also allowed! |
Dear Mrs Smith,
Yesterday, I was asked about your
wellbeing, "Is there reason to worry
about her?", and I told the
person who asked that [...]
|
Addressing multiple persons:
Dear {seller* Mr_s Doe},
According to our guidelines, the
issue with {reseller* Mr_s Doe} is
best resolved if {reseller*they}
publically apologizes to
{buyer* Mr_s Doe} for {reseller*their}
behavior.
Best regards,
{customer_support* Jean Doe}
{
"seller": {
"address": "Mrs",
"name": "Brown"
},
"reseller": {
"address": "Mr",
"name": "Jones",
"subject": "he",
"dpossessive": "his"
},
"buyer": {
"address": "Mx",
"name": "Ainge"
},
"customer_support": {
"first-name": "Emma",
"name": "Ackernick"
}
}
Note that all these attributes can take any value; not only "Mr" and "Mrs" is valid! |
Dear Mrs Brown,
According to our guidelines, the
issue with Mr Jones is
best resolved if he
publically apologizes to
Mx Ainge for his
behavior.
Best regards,
Emma Ackernick
|
gender*render doesn't get into your way, since you can fuse any sequence of tags into one tag:
"{Mr_s} {Doe}"
equals
"{Mr_s Doe}".
{
"address": "Ind.",
"name": "Abrams"
}
|
"Ind. Abrams"
equals
"Ind. Adams"
|
Address individuals who don't want to get a special title:
Dear {Mr_s Doe},
[...]
{
"gender-addressing": "false",
"name": "Chase",
"first-name": "Joey"
}
|
Dear Joey Chase,
[...]
|
Refer to individuals with hyponyms for person or by their profession:
I hope the {actor} is doing well.
{
"gender-nouns": "female"
}
Available values are "male", "female" and "neutral". |
I hope the actress is doing well.
Note that this also works for words that start with capital letters - "Actor" would've been gendered as "Actress"! |
Every gendered noun has a neutral version available:
As a {salesman}, {they} had to face
great hardships!
{
"subject": "they",
"gender-nouns": "neutral"
}
"neutral" is also the default value. |
As a salesperson, they had to face
great hardships!
|
If a noun has no explicit specific version for a grammatical gender, the neutral version of the noun is used:
Since tuesday, {they} serve as a
{cadet}.
{
"subject": "they",
"gender-nouns": "female"
}
|
Since tuesday, they serve as a
cadet.
|
Define your own properties:
After {they} ate {their}
{<favorite_food>} like any
other {child}, {they} slept.
{
"subject": "ze",
"dpossessive": "zen",
"<favorite_food>": "spaghetti"
}
|
After ze ate zen
spaghetti like any
other child, ze slept.
|
GitHub badges
Implementation
attribute | value |
---|---|
PyPi | |
license | |
maintenance | |
tests | |
documentation | |
build |
Specification
attribute | value |
---|---|
license | |
download latest | |
other downloads |
License
Specification and implementation are licensed separately. For the specification, see here (OWFa 1.0). For the implementation, see here (MIT).
About this post-release:
You might have noticed that the previous version of this module on PyPi (version 1.0.0
) had "MIT" filled into its License-field on PyPi;
this did, as expected from the contents of a license field on a package manager, only refer to the python files that are actually installed by the project, not to the whole .tar.gz archive on PyPi, which we believe was and is also properly communicated by the License-files included in the .tar.gz archive as well as the License-section of the README, which refers to these files.
It was and is also impossible to download and open the .tar.gz archive without stumbling across the properly separated and labeled LICENSE files before stumbling across the files they refer to, so misconceptions regarding the scope of the license specified within the license field of the project's description page on PyPi were and are excluded not only in theory, but also in practice.
This post-release (1.0.0-post0
) ensures that it is even easier to find information on the license terms surrounding the project's documentation and specification that come with the archive, by adding a hint regarding the exact scope of the license defined in LICENSE-implementation.md
, and by directing at said file, so it is even easier to find.
This does, of course, not invalidate the fact that the information given in 1.0.0
-version entails the exact same information and license terms, only more cumbersome to overview.
This post-release also increases the explicitness in which credit is given to GitHub-user ecmonsen, whose gendered words data set is partially used by the program.
Development & Contributing
Questions, suggestions and issues as well as pre-discussed pull requests are welcome. See here for additional information.
Code of Conduct
In general, be decent and don't put shame on the 21st century. See here for additional information.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for gender_render-1.0.0.post0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5f73267da5a800a5c8897469502f36b52e07604136194db090e5ea86ecf68290 |
|
MD5 | 9ec5ce2e36011a8fbf47a06526734985 |
|
BLAKE2b-256 | 4f3d84f33e1239fc2d536412545c4685b5585939efb0eefad09339a8b0bb9833 |