Merge branch 'main' into credentials
This commit is contained in:
commit
3d6117bd57
|
@ -171,12 +171,6 @@ form[disabled] {
|
|||
list-style: none;
|
||||
li {
|
||||
white-space: nowrap;
|
||||
a:not([href='#']) {
|
||||
display: none;
|
||||
}
|
||||
&:hover a:not([href='#']) {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
>li:before {
|
||||
content: "⋅";
|
||||
|
@ -190,12 +184,6 @@ form[disabled] {
|
|||
list-style: none;
|
||||
li {
|
||||
white-space: nowrap;
|
||||
a:not([href='#']) {
|
||||
display: none;
|
||||
}
|
||||
&:hover a:not([href='#']) {
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
>li:before {
|
||||
content: "⁖";
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
</li>
|
||||
</draggable>
|
||||
<div class="input-group py-1">
|
||||
<input v-model="search" class="form-control form-control-sm" :placeholder="$t('crud.search')"/>
|
||||
<input v-model="search" class="form-control" :placeholder="$t('crud.search')"/>
|
||||
<button v-if="search" type="button" class="btn btn-light btn-sm border text-danger" @click.prevent="search = ''">
|
||||
<Icon v="times"/>
|
||||
</button>
|
||||
|
|
|
@ -45,13 +45,11 @@
|
|||
<ul class="list-singular">
|
||||
<li v-for="w in s.el.masc">
|
||||
{{ w }}
|
||||
<a :href="`/api/nouns/${w}.png`" target="_blank" rel="noopener"><Icon v="image"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul v-if="config.nouns.plurals" class="list-plural">
|
||||
<li v-for="w in s.el.mascPl">
|
||||
<Spelling :text="w"/>
|
||||
<a :href="`/api/nouns/${w}.png`" target="_blank" rel="noopener"><Icon v="image"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
@ -73,13 +71,11 @@
|
|||
<ul class="list-singular">
|
||||
<li v-for="w in s.el.fem">
|
||||
<Spelling :text="w"/>
|
||||
<a :href="`/api/nouns/${w}.png`" target="_blank" rel="noopener"><Icon v="image"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul v-if="config.nouns.plurals" class="list-plural">
|
||||
<li v-for="w in s.el.femPl">
|
||||
<Spelling :text="w"/>
|
||||
<a :href="`/api/nouns/${w}.png`" target="_blank" rel="noopener"><Icon v="image"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
@ -102,14 +98,12 @@
|
|||
<li v-for="w in s.el.neutr">
|
||||
<Declension v-if="config.nouns.declension" :word="w" tooltip/>
|
||||
<template v-else><Spelling :text="w"/></template>
|
||||
<a :href="`/api/nouns/${w}.png`" target="_blank" rel="noopener"><Icon v="image"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul v-if="config.nouns.plurals" class="list-plural">
|
||||
<li v-for="w in s.el.neutrPl">
|
||||
<Declension v-if="config.nouns.declension" :word="w" plural :singularOptions="s.el.neutr" tooltip/>
|
||||
<template v-else><Spelling :text="w"/></template>
|
||||
<a :href="`/api/nouns/${w}.png`" target="_blank" rel="noopener"><Icon v="image"/></a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
@ -172,6 +166,16 @@
|
|||
</span>
|
||||
</button>
|
||||
</li>
|
||||
<li>
|
||||
<a :href="`/api/nouns/${s.el.id}.png`" target="_blank" rel="noopener"
|
||||
class="btn btn-concise btn-outline-primary btn-sm m-1"
|
||||
>
|
||||
<Icon v="image"/>
|
||||
<span class="btn-label">
|
||||
<T>nouns.image</T>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
</template></template>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<template>
|
||||
<span class="flag-wrapper">
|
||||
<a v-if="link" :href="`/${config.nouns.route}/${config.nouns.terms.route}#${link.toLowerCase()}`" :title="alt">
|
||||
<a v-if="link" :href="`/${config.nouns.route}/${config.terminology.route}#${link.toLowerCase()}`" :title="alt">
|
||||
<img :src="img" :alt="name" class="flag-mini rounded"/>
|
||||
<Spelling escape :text="name"/><sup v-if="custom" class="text-muted"><small><Icon v="user"/></small></sup>
|
||||
</a>
|
||||
|
@ -29,23 +29,37 @@
|
|||
},
|
||||
computed: {
|
||||
link() {
|
||||
if (!this.config.nouns.terms.enabled || !(this.config.nouns.terms.published || this.$isGranted('terms'))) {
|
||||
if (!this.config.terminology.enabled || !(this.config.terminology.published || this.$isGranted('terms'))) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let fallback = null;
|
||||
|
||||
for (let term of this.terms || []) {
|
||||
if (term.key && term.key.toLowerCase().includes(this.alt.toLowerCase())) {
|
||||
// exact match
|
||||
if (term.key && term.key.toLowerCase() === this.alt.toLowerCase()) {
|
||||
return term.key;
|
||||
}
|
||||
if (term.term.toLowerCase().includes(this.name.toLowerCase())) {
|
||||
if (term.term.toLowerCase() === this.name.toLowerCase()) {
|
||||
return this.name;
|
||||
}
|
||||
if (term.original.toLowerCase().includes(this.alt.toLowerCase())) {
|
||||
if (term.original.toLowerCase() === this.alt.toLowerCase()) {
|
||||
return this.alt;
|
||||
}
|
||||
|
||||
// fallback
|
||||
if (term.key && term.key.toLowerCase().includes(this.alt.toLowerCase())) {
|
||||
fallback = term.key;
|
||||
}
|
||||
if (term.term.toLowerCase().includes(this.name.toLowerCase())) {
|
||||
fallback = this.name;
|
||||
}
|
||||
if (term.original.toLowerCase().includes(this.alt.toLowerCase())) {
|
||||
fallback = this.alt;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
return fallback;
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
@ -160,11 +160,11 @@
|
|||
for (let subroute of this.config.nouns.subroutes || []) {
|
||||
extras.push(`/${this.config.nouns.route}/${subroute}`);
|
||||
}
|
||||
if (this.config.nouns.inclusive.enabled) {
|
||||
extras.push(`/${this.config.nouns.route}/${this.config.nouns.inclusive.route}`);
|
||||
if (this.config.inclusive.enabled) {
|
||||
extras.push(`/${this.config.inclusive.route}`);
|
||||
}
|
||||
if (this.config.nouns.terms.enabled) {
|
||||
extras.push(`/${this.config.nouns.route}/${this.config.nouns.terms.route}`);
|
||||
if (this.config.terminology.enabled) {
|
||||
extras.push(`/${this.config.terminology.route}`);
|
||||
}
|
||||
|
||||
links.push({
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</button>
|
||||
</div>
|
||||
<div class="btn-group mb-3 d-none d-md-flex bg-white category-filter">
|
||||
<button v-for="category in config.nouns.inclusive.categories"
|
||||
<button v-for="category in config.inclusive.categories"
|
||||
:class="['btn btn-sm', filter === ':' + category ? 'btn-primary' : 'btn-outline-primary']"
|
||||
@click="filter = filter === ':' + category ? '' : ':' + category"
|
||||
>
|
||||
|
@ -35,15 +35,15 @@
|
|||
<template v-slot:header>
|
||||
<th class="text-nowrap">
|
||||
<Icon v="comment-times"/>
|
||||
<T>nouns.inclusive.insteadOf</T>
|
||||
<T>inclusive.insteadOf</T>
|
||||
</th>
|
||||
<th class="text-nowrap">
|
||||
<Icon v="comment-check"/>
|
||||
<T>nouns.inclusive.say</T>
|
||||
<T>inclusive.say</T>
|
||||
</th>
|
||||
<th class="text-nowrap">
|
||||
<Icon v="comment-dots"/>
|
||||
<T>nouns.inclusive.because</T>
|
||||
<T>inclusive.because</T>
|
||||
</th>
|
||||
<th></th>
|
||||
</template>
|
||||
|
@ -278,7 +278,7 @@
|
|||
},
|
||||
watch: {
|
||||
filter() {
|
||||
this.setHash(this.config.nouns.inclusive.hashNamespace || '', this.filter);
|
||||
this.setHash(this.config.inclusive.hashNamespace || '', this.filter);
|
||||
if (this.$refs.dictionarytable) {
|
||||
this.$refs.dictionarytable.reset();
|
||||
this.$refs.dictionarytable.focus();
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<div class="form-group">
|
||||
<label class="text-nowrap"><strong>
|
||||
<Icon v="comment-times"/>
|
||||
<T>nouns.inclusive.insteadOf</T>
|
||||
<T>inclusive.insteadOf</T>
|
||||
</strong></label>
|
||||
<NounForm v-model="form.insteadOf" maxlength="128"/>
|
||||
</div>
|
||||
|
@ -26,7 +26,7 @@
|
|||
<div class="form-group">
|
||||
<label class="text-nowrap"><strong>
|
||||
<Icon v="comment-check"/>
|
||||
<T>nouns.inclusive.say</T>
|
||||
<T>inclusive.say</T>
|
||||
</strong></label>
|
||||
<NounForm v-model="form.say" maxlength="128"/>
|
||||
</div>
|
||||
|
@ -36,14 +36,14 @@
|
|||
<div class="form-group">
|
||||
<label class="text-nowrap"><strong>
|
||||
<Icon v="comment-dots"/>
|
||||
<T>nouns.inclusive.because</T>
|
||||
<T>inclusive.because</T>
|
||||
</strong></label>
|
||||
<textarea v-model="form.because" class="form-control form-control-sm" required rows="6"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label><strong><T>nouns.inclusive.categories</T>:</strong></label>
|
||||
<a v-for="category in config.nouns.inclusive.categories"
|
||||
<label><strong><T>inclusive.categories</T>:</strong></label>
|
||||
<a v-for="category in config.inclusive.categories"
|
||||
href="#" :class="['badge border mx-1 text-decoration-none', form.categories.includes(category) ? 'bg-primary text-white' : 'bg-light text-primary']"
|
||||
@click.prevent="form.categories = form.categories.includes(category) ? form.categories.filter(c => c !== category) : [...form.categories, category]"
|
||||
>
|
||||
|
@ -52,7 +52,7 @@
|
|||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label><strong><T>nouns.inclusive.sources</T>:</strong></label>
|
||||
<label><strong><T>inclusive.sources</T>:</strong></label>
|
||||
<ListInput v-model="form.links" v-slot="s">
|
||||
<input v-model="s.val" type="url" class="form-control" @keyup="s.update(s.val)" required/>
|
||||
</ListInput>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<template>
|
||||
<draggable tag="ul" v-model="iVal" handle=".handle" ghostClass="ghost" @end="$emit('input', iVal)" class="list-unstyled" :group="group">
|
||||
<li v-for="(v, i) in iVal" ref="items">
|
||||
<div>
|
||||
<div class="input-group input-group-sm mb-1">
|
||||
<button class="btn btn-light border handle" type="button" :aria-label="$t('table.sort')">
|
||||
<Icon v="bars"/>
|
||||
|
@ -12,6 +13,8 @@
|
|||
<Icon v="times"/>
|
||||
</button>
|
||||
</div>
|
||||
<slot name="validation" v-bind:val="iVal[i]"></slot>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li slot="footer">
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<template>
|
||||
<ListInput v-model="v" :prototype="{key: '', value: 0}" v-slot="s" :group="group">
|
||||
<ListInput v-model="v" :prototype="{key: '', value: 0}" :group="group">
|
||||
<template v-slot="s">
|
||||
<button type="button" :class="['btn', parseInt(s.val.value) === 1 ? 'btn-primary' : 'btn-outline-secondary']"
|
||||
:aria-label="$t('profile.opinion.yes')"
|
||||
:title="$t('profile.opinion.yes')"
|
||||
|
@ -24,11 +25,14 @@
|
|||
@click="s.update({key: s.val.key, value: -1})">
|
||||
<Icon v="thumbs-down"/>
|
||||
</button>
|
||||
<input v-model="s.val.key" class="form-control mw-input" @keyup="s.update(s.val)" required/>
|
||||
<small v-if="validation && s.val.key && validation(s.val.key)" class="input-group-text bg-danger text-white">
|
||||
<input v-model="s.val.key" :class="['form-control', 'mw-input', invalid(s.val) ? 'border-danger' : '']" @keyup="s.update(s.val)" required/>
|
||||
</template>
|
||||
<template v-slot:validation="s">
|
||||
<p v-if="invalid(s.val)" class="small text-danger">
|
||||
<Icon v="exclamation-triangle"/>
|
||||
<span class="ml-1">{{$t(validation(s.val.key))}}</span>
|
||||
</small>
|
||||
</p>
|
||||
</template>
|
||||
</ListInput>
|
||||
</template>
|
||||
|
||||
|
@ -40,6 +44,11 @@
|
|||
validation: {},
|
||||
},
|
||||
data() { return { v: this.value } },
|
||||
watch: { v() { this.$emit('input', this.v); } }
|
||||
watch: { v() { this.$emit('input', this.v); } },
|
||||
methods: {
|
||||
invalid(val) {
|
||||
return this.validation && val.key && this.validation(val.key)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<div>
|
||||
<div class="mb-3 d-flex justify-content-between flex-column flex-md-row">
|
||||
<h2 class="text-nowrap">
|
||||
<h2 class="text-nowrap mw-50">
|
||||
<Avatar :user="user"/>
|
||||
@{{user.username}}
|
||||
</h2>
|
||||
|
@ -47,7 +47,7 @@
|
|||
</section>
|
||||
|
||||
<section class="row">
|
||||
<div v-if="Object.keys(profile.names).length" class="col-6 col-lg-4">
|
||||
<div v-if="Object.keys(profile.names).length" :class="['col-6', mainRowCount === 3 ? 'col-lg-4' : 'col-lg-6']">
|
||||
<h3>
|
||||
<Icon v="signature"/>
|
||||
<T>profile.names</T>
|
||||
|
@ -57,7 +57,7 @@
|
|||
<li v-for="(opinion, name) in profile.names"><Opinion :word="name" :opinion="opinion"/></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div v-if="Object.keys(profile.pronouns).length" class="col-6 col-lg-4">
|
||||
<div v-if="Object.keys(profile.pronouns).length" :class="['col-6', mainRowCount === 3 ? 'col-lg-4' : 'col-lg-6']">
|
||||
<h3>
|
||||
<Icon v="tags"/>
|
||||
<T>profile.pronouns</T>
|
||||
|
@ -69,7 +69,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div v-if="profile.links.length" class="col-12 col-lg-4">
|
||||
<div v-if="profile.links.length" :class="['col-12', mainRowCount === 3 ? 'col-lg-4' : 'col-lg-6']">
|
||||
<h3>
|
||||
<Icon v="link"/>
|
||||
<T>profile.links</T>
|
||||
|
@ -83,14 +83,14 @@
|
|||
</div>
|
||||
</section>
|
||||
|
||||
<section class="clearfix">
|
||||
<section class="clearfix" v-if="Object.values(profile.words).map(w => Object.keys(w).length).reduce((a, b) => a + b, 0) > 0">
|
||||
<h3>
|
||||
<Icon v="scroll-old"/>
|
||||
<T>profile.words</T>
|
||||
</h3>
|
||||
|
||||
<div class="row">
|
||||
<div v-for="group in profile.words" v-if="Object.keys(profile.words).length" class="col-6 col-lg-3">
|
||||
<div v-for="group in profile.words" v-if="Object.keys(group).length" class="col-6 col-lg-3">
|
||||
<ul class="list-unstyled">
|
||||
<li v-for="(opinion, word) in group"><Opinion :word="word" :opinion="opinion"/></li>
|
||||
</ul>
|
||||
|
@ -185,6 +185,13 @@
|
|||
hasDescriptionColumn() {
|
||||
return this.profile.age || this.profile.description.trim().length || this.profile.team;
|
||||
},
|
||||
mainRowCount() {
|
||||
let c = 0;
|
||||
if (Object.keys(this.profile.names).length) { c++; }
|
||||
if (Object.keys(this.profile.pronouns).length) { c++; }
|
||||
if (this.profile.links.length) { c++; }
|
||||
return c;
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
@ -195,4 +202,8 @@
|
|||
max-width: 5rem;
|
||||
max-height: 5rem;
|
||||
}
|
||||
|
||||
.mw-50 {
|
||||
min-width: 50%;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -56,13 +56,18 @@
|
|||
<p class="small text-muted mb-0">
|
||||
<T>sources.submit.pronounsInfo</T>
|
||||
</p>
|
||||
<ListInput v-model="form.pronouns" v-slot="s">
|
||||
<ListInput v-model="form.pronouns">
|
||||
<template v-slot="s">
|
||||
<input v-model="s.val" type="text" class="form-control" @keyup="s.update(s.val)" required maxlength="24"/>
|
||||
<small v-if="s.val && !pronounLibrary.isCanonical(s.val) && !(config.sources.extraTypes || []).includes(s.val)"
|
||||
class="input-group-text bg-danger text-white">
|
||||
</template>
|
||||
<template v-slot:validation="s">
|
||||
<p v-if="s.val && !pronounLibrary.isCanonical(s.val) && !(config.sources.extraTypes || []).includes(s.val)"
|
||||
class="small text-danger"
|
||||
>
|
||||
<Icon v="exclamation-triangle"/>
|
||||
<span class="ml-1"><T>profile.pronounsNotFound</T></span>
|
||||
</small>
|
||||
</p>
|
||||
</template>
|
||||
</ListInput>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
</button>
|
||||
</div>
|
||||
<div class="btn-group mb-3 d-none d-md-flex bg-white category-filter">
|
||||
<button v-for="category in config.nouns.terms.categories"
|
||||
<button v-for="category in config.terminology.categories"
|
||||
:class="['btn btn-sm', filter === ':' + category ? 'btn-primary' : 'btn-outline-primary']"
|
||||
@click="filter = filter === ':' + category ? '' : ':' + category"
|
||||
>
|
||||
|
@ -177,7 +177,15 @@
|
|||
|
||||
// those must be methods, not computed, because when modified, they don't get updated in the view for some reason
|
||||
visibleEntries() {
|
||||
return Object.values(this.entries).filter(n => n.matches(this.filter));
|
||||
const values = Object.values(this.entries).filter(n => n.matches(this.filter));
|
||||
if (this.filter) {
|
||||
return values.sort((a, b) => {
|
||||
if (a.key && a.key.toLowerCase() === this.filter.toLowerCase()) { return -1; }
|
||||
if (b.key && b.key.toLowerCase() === this.filter.toLowerCase()) { return 1; }
|
||||
return a.term[0].localeCompare(b.term[0]);
|
||||
})
|
||||
}
|
||||
return values;
|
||||
},
|
||||
entriesCountApproved() {
|
||||
return Object.values(this.entries).filter(n => n.approved).length;
|
||||
|
@ -212,7 +220,7 @@
|
|||
},
|
||||
watch: {
|
||||
filter() {
|
||||
this.setHash(this.config.nouns.terms.hashNamespace || '', this.filter);
|
||||
this.setHash(this.config.terminology.hashNamespace || '', this.filter);
|
||||
if (this.$refs.dictionarytable) {
|
||||
this.$refs.dictionarytable.reset();
|
||||
this.$refs.dictionarytable.focus();
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<div class="col-12 col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="text-nowrap"><strong>
|
||||
<T>nouns.terms.term</T>
|
||||
<T>terminology.term</T>
|
||||
</strong></label>
|
||||
<NounForm v-model="form.term" required maxlength="128"/>
|
||||
</div>
|
||||
|
@ -24,7 +24,7 @@
|
|||
<div class="col-12 col-lg-6">
|
||||
<div class="form-group">
|
||||
<label class="text-nowrap"><strong>
|
||||
<T>nouns.terms.original</T>
|
||||
<T>terminology.original</T>
|
||||
</strong></label>
|
||||
<NounForm v-model="form.original" maxlength="1024"/>
|
||||
</div>
|
||||
|
@ -33,14 +33,14 @@
|
|||
|
||||
<div class="form-group">
|
||||
<label class="text-nowrap"><strong>
|
||||
<T>nouns.terms.definition</T>
|
||||
<T>terminology.definition</T>
|
||||
</strong></label>
|
||||
<textarea v-model="form.definition" class="form-control form-control-sm" required rows="6"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label><strong><T>nouns.terms.category</T>:</strong></label>
|
||||
<a v-for="category in config.nouns.terms.categories"
|
||||
<label><strong><T>terminology.category</T>:</strong></label>
|
||||
<a v-for="category in config.terminology.categories"
|
||||
href="#" :class="['badge border mx-1 text-decoration-none', form.categories.includes(category) ? 'bg-primary text-white' : 'bg-light text-primary']"
|
||||
@click.prevent="form.categories = form.categories.includes(category) ? form.categories.filter(c => c !== category) : [...form.categories, category]"
|
||||
>
|
||||
|
@ -65,7 +65,7 @@
|
|||
<div class="col-12 col-lg-4">
|
||||
<div class="form-group">
|
||||
<label class="text-nowrap"><strong>
|
||||
<T>nouns.terms.images</T>
|
||||
<T>terminology.images</T>
|
||||
</strong></label>
|
||||
<ImageWidget v-model="form.images" multiple sizes="big,thumb"/>
|
||||
</div>
|
||||
|
|
|
@ -10,9 +10,11 @@ sources:
|
|||
|
||||
nouns:
|
||||
enabled: false
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: false
|
||||
|
||||
names:
|
||||
|
|
|
@ -42,9 +42,11 @@ nouns:
|
|||
declension: false
|
||||
submit: true
|
||||
templates: true
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: true
|
||||
categories:
|
||||
- 'sexuelle Orientierung'
|
||||
|
|
|
@ -70,7 +70,7 @@ pronouns:
|
|||
short: 'beliebig'
|
||||
description: >
|
||||
Auch wenn es für manche Menschen sehr wichtig ist, dass bestimmte Pronomen benutzt werden, wenn über sie geredet wird, ist es anderen egal, welche Pronomen für sie verwendet werden.
|
||||
options: 'Überprüfe die Optionen [share]{/=hier}.'
|
||||
options: 'Überprüfe die Optionen [share]{/pronomen=hier}.'
|
||||
others: 'Andere Formen'
|
||||
othersRaw: 'andere'
|
||||
or: 'oder'
|
||||
|
@ -163,7 +163,9 @@ nouns:
|
|||
plural: 'Plural'
|
||||
pluralShort: 'Pl.'
|
||||
|
||||
terms:
|
||||
image: 'Bild'
|
||||
|
||||
terminology:
|
||||
header: 'Terminologie'
|
||||
headerLong: 'Wörterbuch von Queerer Terminologie'
|
||||
info:
|
||||
|
@ -405,8 +407,11 @@ profile:
|
|||
description: 'Beschreibung'
|
||||
names: 'Namen'
|
||||
pronouns: 'Pronomen'
|
||||
pronounsInfo: 'Du kannst entweder ein Pronomen (z.B. „sier“ or „sie/ihr“) oder einen Link (z.B. „https://de.pronouns.page/dey“) oder vier benutzerdefinierten Formen (z.B. „xier/xies/xiem/xien“).'
|
||||
pronounsNotFound: 'Wir können keinen Link zu diesem Pronomen finden!'
|
||||
pronounsInfo: >
|
||||
Du kannst entweder ein <strong>Pronomen</strong> (z.B. „sier“ or „sie/ihr“) oder einen <strong>Link</strong> (z.B. „https://de.pronouns.page/dey“)
|
||||
oder <strong>vier benutzerdefinierten Formen</strong> (z.B. „xier/xies/xiem/xien“).
|
||||
# TODO add: You can also use {/pronouns#generator=<strong>the generator</strong>} to fill out sentences with custom forms.
|
||||
pronounsNotFound: 'Wir können keinen Link zu diesem Pronomen finden!' # TODO 'Unrecognised format. Please check out the instruction above.'
|
||||
words: 'Wörter'
|
||||
birthday: 'Alter'
|
||||
birthdayInfo: 'Wir veröffentlichen nicht dein Geburtstag, sondern nur das errechnete Alter.'
|
||||
|
|
|
@ -27,7 +27,7 @@ Yup, she calls it “torture” when someone… asks her a question. And not a d
|
|||
She's not being asked what her genitals are. She's not being asked her gender identity.
|
||||
Someone's literally just trying to establish the basis for the conversation by knowing how to talk to / about her.
|
||||
And the answer is literally two syllables!
|
||||
Yes, that question _might_ be tricky sometimes,
|
||||
Yes, that question _might_ be tricky _sometimes_,
|
||||
but she's not a closeted trans person who could feel anxious trying to decide if the situation is safe enough
|
||||
to give someone their real pronouns. No. She's just a brat. A snowflake.
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ Another thing that we see quite often in people's cards is a description like th
|
|||
Sure, policing someone's neopronouns would be transphobic. And that's why we don't do that.
|
||||
Paw can easily link to paw's pronouns by putting in all five grammatical forms
|
||||
([paw/paw/paw's/paw's/pawself](https://en.pronouns.page/paw/paw/paw's/paw's/pawself)),
|
||||
by using a shorthand notation for nameself pronouns ([:paw](https://en.pronouns.page/:paw)),
|
||||
by using a shorthand notation for the nameself pronouns ([:paw](https://en.pronouns.page/:paw)),
|
||||
or by using a generator that's available in the [Pronouns](/pronouns) section.
|
||||
We talk about it in the instructions in the card editor –
|
||||
if only people would read them before rushing to get angry…
|
||||
|
@ -32,4 +32,4 @@ There's _actual_ queerphobia destroying people's lives all around the world –
|
|||
but you use that word to describe a _minor inconvenience_ completely unrelated to your gender or orientation?
|
||||
|
||||
Think about it… If you message a group of queer volunteers doing their best to create a free website for the community,
|
||||
and you call them “homophobes”, how do you expect allocishet people take queerphobia seriously?
|
||||
and you call them “homophobes”, how do you expect allocishet people to take queerphobia seriously?
|
||||
|
|
|
@ -71,9 +71,11 @@ nouns:
|
|||
declension: false
|
||||
submit: true
|
||||
templates: true
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: true
|
||||
categories:
|
||||
- 'sexual orientation'
|
||||
|
@ -87,7 +89,7 @@ nouns:
|
|||
- 'politics'
|
||||
- 'prejudice'
|
||||
|
||||
route: 'terms'
|
||||
route: 'terminology'
|
||||
|
||||
names:
|
||||
enabled: false
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
name pronouns description
|
||||
Normative forms she,he It's worth mentioning that pronouns ≠ gender. One can still be nonbinary while using pronouns that are congruent with (or opposite to) their gender assigned at birth.
|
||||
Normative-ish forms they,they/them/themself,it,one Those pronouns have been in common use in normative English already, but recently they got a slightly different new usage: describing a single, specific person.
|
||||
Neopronouns ae,co,e,e/em/es,ey,fae,hu,ne,ne/nir,per,s/he,thon,ve,vi,vi/vim,xe,ze,ze/zir,zhe Unlike the other pronouns, which are officially recognised as “grammatically correct”, albeit used in a different meaning than we're used to, neopronouns are novel. Not being included in dictionaries doesn't make them any worse, though! Some neoprouns' names are derived from the names of their creators.
|
||||
Popular neopronouns ae,ey,fae,xe,ze,ze/zir Unlike the other pronouns, which are officially recognised as “grammatically correct”, albeit used in a different meaning than we're used to, neopronouns are novel. Not being included in dictionaries doesn't make them any worse, though!
|
||||
Other neopronouns co,e,e/em/es,hu,ne,ne/nir,per,s/he,thon,ve,vi,vi/vim,zhe These neopronouns are less often used than their more popular counterparts, but it doesn't make them any worse (and some of them are historically notable). Some neoprouns' names are derived from the names of their creators. If your pronoun is not on the list, use the generator below!
|
||||
|
|
|
|
@ -73,7 +73,7 @@ pronouns:
|
|||
description: >
|
||||
Even though for many people it's incredibly important that people use specific pronouns to talk about them,
|
||||
others don't mind being addressed in any way – as long as the context is clear as to who one talks about.
|
||||
options: 'check out the options [share]{/=here}.'
|
||||
options: 'check out the options [share]{/pronouns=here}.'
|
||||
others: 'Other forms'
|
||||
othersRaw: 'other'
|
||||
or: 'or'
|
||||
|
@ -207,7 +207,9 @@ nouns:
|
|||
plural: 'plural'
|
||||
pluralShort: 'pl.'
|
||||
|
||||
terms:
|
||||
image: 'Picture'
|
||||
|
||||
terminology:
|
||||
header: 'Terminology'
|
||||
headerLong: 'Dictionary of queer terminology'
|
||||
info:
|
||||
|
@ -487,12 +489,15 @@ profile:
|
|||
names: 'Names'
|
||||
pronouns: 'Pronouns'
|
||||
pronounsInfo: >
|
||||
You can enter a pronoun (eg. “they” or “she/her”)
|
||||
or a link (eg. “https://en.pronouns.page/e”)
|
||||
You can enter a <strong>pronoun</strong> (eg. “they” or “she/her”)
|
||||
or a <strong>link</strong> (eg. “https://en.pronouns.page/e”)
|
||||
or the custom five forms (eg. “ze/zem/zir/zirs/zirself”).
|
||||
Keep in mind that <strong>all five forms</strong> are required in that case,
|
||||
otherwise the app can only guess what exactly do you mean.
|
||||
pronounsNotFound: 'We can''t find a link to this pronoun!'
|
||||
You can also use {/pronouns#generator=<strong>the generator</strong>} to fill out sentences with custom forms.
|
||||
If your pronouns follow the {/pronouns#nameself=<strong>nameself pattern</strong>},
|
||||
you can also use a colon shorthand (eg. “:star”).
|
||||
pronounsNotFound: 'Unrecognised format. Please check out the instruction above.'
|
||||
words: 'Words'
|
||||
birthday: 'Age'
|
||||
birthdayInfo: 'We do not publish your birthday, just the calculated age.'
|
||||
|
|
|
@ -46,9 +46,11 @@ nouns:
|
|||
declension: false
|
||||
submit: true
|
||||
templates: false
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: true
|
||||
categories:
|
||||
- 'orientación sexual'
|
||||
|
|
|
@ -75,7 +75,7 @@ pronouns:
|
|||
description: >
|
||||
Aunque para mucha gente sea muy importante que se utilicen pronombres específicos para hablar de elles,
|
||||
a otres no les molesta que les llamen de cualquier manera - mientras que en el contexto sea claro a quién se está hablando.
|
||||
options: 'Checa las opciones [compartir]{/=aquí}.'
|
||||
options: 'Checa las opciones [share]{/pronombres=aquí}.'
|
||||
others: 'Otras formas'
|
||||
othersRaw: 'Otras'
|
||||
or: 'o'
|
||||
|
@ -168,7 +168,9 @@ nouns:
|
|||
plural: 'plural'
|
||||
pluralShort: 'pl.'
|
||||
|
||||
terms:
|
||||
image: 'Imagen'
|
||||
|
||||
terminology:
|
||||
header: 'Terminología'
|
||||
headerLong: 'Diccionario de terminología queer'
|
||||
info:
|
||||
|
@ -418,8 +420,11 @@ profile:
|
|||
description: 'Descripción'
|
||||
names: 'Nombres'
|
||||
pronouns: 'Pronombres'
|
||||
pronounsInfo: 'Puedes introducir un pronombre (p. ej. “elle” o “ella”) o un enlace (“http://es.pronouns.page/ellx”).'
|
||||
pronounsNotFound: '¡No podemos encontrar un enlace a este pronombre!'
|
||||
pronounsInfo: >
|
||||
Puedes introducir un <strong>pronombre</strong> (p. ej. “elle” o “ella”)
|
||||
o un <strong>enlace</strong> (“http://es.pronouns.page/ellx”).
|
||||
# TODO add: You can also use {/pronouns#generator=<strong>the generator</strong>} to fill out sentences with custom forms.
|
||||
pronounsNotFound: '¡No podemos encontrar un enlace a este pronombre!' # TODO 'Unrecognised format. Please check out the instruction above.'
|
||||
words: 'Palabras'
|
||||
birthday: 'Edad'
|
||||
birthdayInfo: 'No publicamos la fecha de tu cumpleaños, sólo la edad calculada.'
|
||||
|
|
|
@ -7,7 +7,7 @@ pronouns:
|
|||
route: 'pronoms'
|
||||
default: 'il'
|
||||
any: 'any'
|
||||
plurals: true
|
||||
plurals: false
|
||||
honorifics: false
|
||||
multiple:
|
||||
name: 'Formes interchangeables'
|
||||
|
@ -25,9 +25,13 @@ pronouns:
|
|||
pronunciation:
|
||||
enabled: true
|
||||
voices:
|
||||
GB:
|
||||
language: 'en-GB'
|
||||
voice: 'Emma'
|
||||
FR:
|
||||
language: 'fr-FR'
|
||||
voice: 'Lea'
|
||||
engine: 'standard'
|
||||
CA:
|
||||
language: 'fr-CA'
|
||||
voice: 'Gabrielle'
|
||||
engine: 'neural'
|
||||
|
||||
sources:
|
||||
|
@ -46,9 +50,11 @@ nouns:
|
|||
declension: false
|
||||
submit: true
|
||||
templates: true
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: true
|
||||
categories:
|
||||
- 'orientation sexuelle'
|
||||
|
@ -130,7 +136,7 @@ profile:
|
|||
- ['[sans titre]', 'Mx.', 'M.', 'Mme.', 'MM.', 'Mmes.', 'Mlle.', 'Mlles.', 'Vve.', 'messieurs', 'monsieur', 'madame', 'mesdames', 'mademoiselle', 'mesdemoiselles', 'veuve']
|
||||
- ['personne', 'homme', 'femme', 'demoiselle', 'monsieur', 'mec', 'meuf', 'garçon', 'fille', 'poto', 'fréro', 'sœurette']
|
||||
- ['beauté', 'beau gosse', 'belle gosse']
|
||||
- ['ami', 'partenaire', 'mec', 'meuf', 'petit ami', 'petite amie', 'joyfriend', 'mari', 'femme', 'kissmate', 'chéri', 'chérie', 'mon amour']
|
||||
- ['ami', 'partenaire', 'mec', 'meuf', 'petit ami', 'petite amie', 'mari', 'femme', 'kissmate', 'chéri', 'chérie', 'mon amour']
|
||||
flags:
|
||||
defaultPronoun: 'iel'
|
||||
|
||||
|
|
|
@ -9,20 +9,18 @@
|
|||
<table class="table table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Subject</th>
|
||||
<th>Object</th>
|
||||
<th>Possessive determiner</th>
|
||||
<th>Possessive pronoun</th>
|
||||
<th>Reflexive</th>
|
||||
<th>Sujet</th>
|
||||
<th>Objet direct</th>
|
||||
<th>Objet indirect</th>
|
||||
<th>Possessif</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_subject" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_object" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="possessive_determiner" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="possessive_pronoun" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="reflexive" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_disjunctive" :counter="counter"/></td>
|
||||
<td><Morpheme :pronoun="selectedPronoun" morpheme="pronoun_possessive" :counter="counter"/></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
singular plural isHonorific
|
||||
Je pense qu'{pronoun_subject} est très gentil. FALSE
|
||||
{'pronoun_subject} est {pronoun_possessive} voisi{conjugation_n}. FALSE
|
||||
Je pense qu'{pronoun_subject} est très genti{inflection_l}. FALSE
|
||||
{'pronoun_subject} est {pronoun_possessive} voisi{inflection_n}. FALSE
|
||||
Je vais {pronoun_object} rencontrer bientôt. FALSE
|
||||
Je me fie à {pronoun_disjunctive}. FALSE
|
||||
|
|
|
|
@ -3,8 +3,8 @@ export default [
|
|||
'pronoun_object',
|
||||
'pronoun_disjunctive',
|
||||
'pronoun_possessive',
|
||||
'conjugation_l',
|
||||
'conjugation_x',
|
||||
'conjugation_e',
|
||||
'conjugation_n',
|
||||
'inflection_l',
|
||||
'inflection_x',
|
||||
'inflection_e',
|
||||
'inflection_n',
|
||||
];
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
name pronouns description
|
||||
Formes normatives il,elle Il convient de mentionner que les pronoms ≠ genre. On peut toujours être non-binaire tout en utilisant des pronoms adéquats (ou opposés) à son genre assigné à la naissance.
|
||||
Formes semi-normatives on Ces pronoms font parties de la norme dans la langue française, mais généralement pas pour des personnes spécifiques.
|
||||
Néo-pronoms al,ael,el,em,iel,ielle,ille,im,ol,ul,yel,yelle Contrairement aux autres pronoms, qui sont officiellement reconnus comme " grammaticalement corrects ", bien qu'utilisés dans un sens différent de celui auquel nous sommes habitués, les néo-pronoms sont inédits. Le fait de ne pas figurer dans les dictionnaires ne les rend pas pires pour autant !
|
||||
Néo-pronoms al,ael,el,em,iel,ielle,ille,im,ol,ul,yel,yelle Contrairement aux autres pronoms, qui sont officiellement reconnus comme « grammaticalement corrects », bien qu'utilisés dans un sens différent de celui auquel nous sommes habitués, les néo-pronoms sont inédits. Le fait de ne pas figurer dans les dictionnaires ne les rend pas pires pour autant !
|
||||
|
|
Can't render this file because it contains an unexpected character in line 4 and column 134.
|
|
@ -1,16 +1,16 @@
|
|||
key description normative pronoun_subject pronoun_object pronoun_disjunctive pronoun_possessive conjugation_l conjugation_x conjugation_e conjugation_n plural pluralHonorific pronounceable history thirdForm smallForm sourcesInfo
|
||||
il Normatif, masculin TRUE il le lui mon l x é n FALSE FALSE TRUE
|
||||
elle Normatif, féminin TRUE elle la elle ma le se e ne FALSE FALSE TRUE
|
||||
on Normatif, indéfini TRUE on en soi man l·le x·se é·e n·e FALSE FALSE TRUE
|
||||
al Neopronom «al» FALSE al lea al mo l·le x·se é·e n·e FALSE FALSE TRUE
|
||||
ael Neopronom «ael» FALSE ael lea ael mo l·le x·se é·e n·e FALSE FALSE TRUE
|
||||
el Neopronom «el» FALSE el lea el mo l·le x·se é·e n·e FALSE FALSE TRUE
|
||||
em Neopronom «em» FALSE em lea em mo l·le x·se é·e n·e FALSE FALSE TRUE Proche à «elle»
|
||||
iel Neopronom «iel» FALSE iel lea ellui mo l·le x·se é·e n·e FALSE FALSE TRUE Mélange de «il» et «elle»
|
||||
ielle Neopronom «ielle» FALSE ielle lea ielle mo l·le x·se é·e n·e FALSE FALSE TRUE
|
||||
ille Neopronom «ille» FALSE ille lea ille mo l·le x·se é·e n·e FALSE FALSE TRUE
|
||||
im Neopronom «im» FALSE im lea im mo l·le x·se é·e n·e FALSE FALSE TRUE Proche à «il»
|
||||
ol Neopronom «ol» FALSE ol lo ol mo l·le x·se é·e n·e FALSE FALSE TRUE
|
||||
ul Neopronom «ul» FALSE ul lu ul mo l·le x·se é·e n·e FALSE FALSE TRUE
|
||||
yel Neopronom «yel» FALSE yel lea yel mo l·le x·se é·e n·e FALSE FALSE TRUE Une orthographe alternative de «iel»
|
||||
yelle Neopronom «yelle» FALSE yelle lea yelle mo l·le x·se é·e n·e FALSE FALSE TRUE
|
||||
key description normative pronoun_subject pronoun_object pronoun_disjunctive pronoun_possessive inflection_l inflection_x inflection_e inflection_n plural pluralHonorific pronounceable history thirdForm smallForm sourcesInfo
|
||||
il,il/le Normatif, masculin TRUE il le lui mon l x é n FALSE FALSE TRUE
|
||||
elle,elle/la Normatif, féminin TRUE elle la elle ma lle se ée ne FALSE FALSE TRUE
|
||||
on,on/en Normatif, indéfini TRUE on en soi man l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE
|
||||
al,al/lea Neopronom « al » FALSE al lea al man l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE
|
||||
ael,ael/lea Neopronom « ael » FALSE ael lea ael man l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE
|
||||
el,el/lea Neopronom « el » FALSE el lea el mo l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE
|
||||
em,em/lea Neopronom « em » FALSE em lea em mo l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE Proche à « elle »
|
||||
iel,iel/lea Neopronom « iel » FALSE iel lea ellui mo l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE Mélange de « il » et « elle »
|
||||
ielle,ielle/lea Neopronom « ielle » FALSE ielle lea ellui mo l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE
|
||||
ille,ille/lea Neopronom « ille » FALSE ille lea ellui mo l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE
|
||||
im,im/lea Neopronom « im » FALSE im lea im mo l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE Proche à « il »
|
||||
ol,ol/lo Neopronom « ol » FALSE ol lo ol mo l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE
|
||||
ul,ul/lu Neopronom « ul » FALSE ul lu ul mo l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE
|
||||
yel,yel/lea Neopronom « yel » FALSE yel lea ellui mo l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE Une orthographe alternative de « iel »
|
||||
yelle,yell/lea Neopronom « yelle » FALSE yelle lea ellui mo l·le|=lé x·se é·e n·e|=né FALSE FALSE TRUE
|
||||
|
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -21,9 +21,9 @@ home:
|
|||
- >
|
||||
Pourquoi est-ce que c’est important ? Par simple décence humaine.
|
||||
Vous n’appelleriez pas Louise « Annette » simplement parce que vous préférez ce prénom,
|
||||
ou parce qu’elle a «l’air d’une Annette selon vous».
|
||||
ou parce qu’elle a « l’air d’une Annette selon vous ».
|
||||
Ou même si le prénom « Annette » est <em>bien</em> inscrit sur son certificat de naissance,
|
||||
mais qu’elle le déteste et préfère utiliser «Louise.»
|
||||
mais qu’elle le déteste et préfère utiliser « Louise ».
|
||||
Et c’est la même chose avec les pronoms -
|
||||
si vous ne voulez pas pas être impoli·e envers quelqu’un, adressez-vous à ellui correctement.
|
||||
La seule différence est qu’on connaît généralement le nom des gens, mais pas leurs pronoms.
|
||||
|
@ -73,7 +73,7 @@ pronouns:
|
|||
Même si pour beaucoup de gens, c'est extrêmement important qu'on utilise des pronoms spécifiques pour parler d'eux,
|
||||
d'autres ne voient pas de problème à ce qu'on s'adresse à eux de n'importe quelle façon –
|
||||
du moment que c'est évident de qui on parle dans le contexte.
|
||||
options: 'voir les options [share]{/=ici}.'
|
||||
options: 'voir les options [share]{/pronoms=ici}.'
|
||||
others: 'Autres formes'
|
||||
othersRaw: 'autre'
|
||||
or: 'ou'
|
||||
|
@ -167,7 +167,9 @@ nouns:
|
|||
plural: 'pluriel'
|
||||
pluralShort: 'pl.'
|
||||
|
||||
terms:
|
||||
image: 'Photo'
|
||||
|
||||
terminology:
|
||||
header: 'Terminologie'
|
||||
headerLong: 'Dictionnaire des terminologies queer'
|
||||
info:
|
||||
|
@ -234,7 +236,7 @@ faq:
|
|||
À la place, vous pouvez simplement demander « quels sont tes pronoms ? » ou « comment voudrais-tu que je te genre ? »)
|
||||
- >
|
||||
C’est aussi important de normaliser le fait de se présenter en donnant ses pronoms.
|
||||
« Salut, je suis Michael, mes pronoms sont {/il=il/lui}. » Ce n’est pas difficile – mais pour les personnes trans et non-binaires,
|
||||
« Salut, je suis Michel, mes pronoms sont {/il=il/lui}. » Ce n’est pas difficile – mais pour les personnes trans et non-binaires,
|
||||
c’est tellement important !
|
||||
C’est encore plus facile en ligne: mettez simplement vos pronoms (ou un lien vers des exemples de notre site) dans votre bio.
|
||||
- >
|
||||
|
@ -354,6 +356,7 @@ contact:
|
|||
members: 'Membres actuels'
|
||||
blog: 'Blog'
|
||||
upcoming: 'Versions en d’autres langues à venir'
|
||||
member: 'Membre du collectif'
|
||||
|
||||
support:
|
||||
header: 'Soutien'
|
||||
|
@ -411,8 +414,11 @@ profile:
|
|||
description: 'Description'
|
||||
names: 'Noms'
|
||||
pronouns: 'Pronoms'
|
||||
pronounsInfo: 'Vous pouvez entrer un pronom (ex. « ael » or « il/lui ») ou un lien (ex. « http://fr.pronouns.page/elle »).'
|
||||
pronounsNotFound: 'Impossible de trouver un lien vers ce pronom !'
|
||||
pronounsInfo: >
|
||||
Vous pouvez entrer un <strong>pronom</strong> (ex. « ael » or « il/lui »)
|
||||
ou un <strong>lien</strong> (ex. « http://fr.pronouns.page/elle »).
|
||||
# TODO add: You can also use {/pronouns#generator=<strong>the generator</strong>} to fill out sentences with custom forms.
|
||||
pronounsNotFound: 'Impossible de trouver un lien vers ce pronom !' # TODO 'Unrecognised format. Please check out the instruction above.'
|
||||
words: 'Mots'
|
||||
birthday: ' ge'
|
||||
birthdayInfo: 'Nous ne publions pas votre date de naissance, seulement l’âge calculé.'
|
||||
|
@ -455,7 +461,7 @@ share: 'Partager'
|
|||
crud:
|
||||
approve: 'Approuver'
|
||||
hide: 'Cacher'
|
||||
remove: 'Retiret'
|
||||
remove: 'Retirer'
|
||||
removeConfirm: 'Êtes-vous sûr·e de vouloir retirer cet item ?'
|
||||
edit: 'Éditer'
|
||||
add: 'Ajouter'
|
||||
|
@ -557,34 +563,34 @@ report:
|
|||
|
||||
flags:
|
||||
Abroromantic: 'Abroromantique'
|
||||
Abrosexual: 'Abrosexuel·le'
|
||||
Abrosexual: 'Abrosexue{inflection_l}'
|
||||
Achillean: 'Achilléen'
|
||||
Alloromantic_Asexual: 'Alloromantique asexuel·le'
|
||||
Alloromantic_Asexual: 'Alloromantique asexue{inflection_l}'
|
||||
Agender: 'Agenre'
|
||||
Anarcha-Queer: 'Anarcho-queer'
|
||||
Androgyne: 'Androgyne'
|
||||
Androsexual: 'Androsexuel·le'
|
||||
Androsexual: 'Androsexue{inflection_l}'
|
||||
Aporagender: 'Aporagenre'
|
||||
Archaeopronouns: 'Archéo-pronoms'
|
||||
Aroace: 'Aroace'
|
||||
Aromantic: 'Aromantique'
|
||||
Aromantic_Allosexual: 'Aromantique allosexuel·le'
|
||||
Asexual: 'Asexuel·le'
|
||||
Aromantic_Allosexual: 'Aromantique allosexue{inflection_l}'
|
||||
Asexual: 'Asexue{inflection_l}'
|
||||
Autigender: 'Autigenre'
|
||||
Bear: 'Bear'
|
||||
Bicurious: 'Bicurieux·se'
|
||||
Bicurious: 'Bicurieu{inflection_x}'
|
||||
Bigender: 'Bigenre'
|
||||
Biromantic: 'Biromantique'
|
||||
Bisexual: 'Bisexuel·le'
|
||||
Bisexual: 'Bisexue{inflection_l}'
|
||||
Butch: 'Butch'
|
||||
Ceteroromantic: 'Ceteroromantique'
|
||||
Ceterosexual: 'Ceterosexuel·le'
|
||||
Cis_Ally: 'Allié·e cis'
|
||||
Ceterosexual: 'Ceterosexue{inflection_l}'
|
||||
Cis_Ally: 'Alli{inflection_e} cis'
|
||||
Demiboy: 'Demiboy'
|
||||
Demigender: 'Demigenre'
|
||||
Demigirl: 'Demigirl'
|
||||
Demiromantic: 'Demiromantique'
|
||||
Demisexual: 'Demisexuel·le'
|
||||
Demisexual: 'Demisexue{inflection_l}'
|
||||
Diamoric: 'Diamorique'
|
||||
Enbian: 'Enbian'
|
||||
Fa*afafine: 'Fa''afafine'
|
||||
|
@ -595,12 +601,12 @@ flags:
|
|||
Genderfluid: 'Genderfluid'
|
||||
Genderflux: 'Genderflux'
|
||||
Genderqueer: 'Genderqueer'
|
||||
Greyasexual: 'Grisexuel·le'
|
||||
Greyasexual: 'Grisexue{inflection_l}'
|
||||
Greyaromantic: 'Grisromantique'
|
||||
Gynesexual: 'Gynosexuel·le'
|
||||
Gynesexual: 'Gynosexue{inflection_l}'
|
||||
Heteroflexible: 'Hétéroflexible'
|
||||
Heteroromantic: 'Hétéroromantique'
|
||||
Heterosexual: 'Hétérosexuel'
|
||||
Heterosexual: 'Hétérosexue{inflection_l}'
|
||||
Hijra: 'Hijra'
|
||||
Homoflexible: 'Homoflexible'
|
||||
Homoromantic: 'Homoromantique'
|
||||
|
@ -615,17 +621,17 @@ flags:
|
|||
Neopronouns: 'Néopronoms'
|
||||
Neutrois: 'Neutrois'
|
||||
Nonbinary: 'Non-binaire'
|
||||
Omnisexual: 'Omnisexuel·le'
|
||||
Omnisexual: 'Omnisexue{inflection_l}'
|
||||
Omniromantic: 'Omniromantique'
|
||||
Oriented_Aroace: 'Aroace orienté·e'
|
||||
Oriented_Aroace: 'Aroace orient{inflection_e}'
|
||||
Pangender: 'Pangenre'
|
||||
Panromantic: 'Panromantique'
|
||||
Pansexual: 'Pansexuel·le'
|
||||
Polyamorous: 'Polyamoureux·se'
|
||||
Pansexual: 'Pansexue{inflection_l}'
|
||||
Polyamorous: 'Polyamoureu{inflection_x}'
|
||||
Polyromantic: 'Panromantique'
|
||||
Polysexual: 'Polysexuel·le'
|
||||
Polysexual: 'Polysexue{inflection_l}'
|
||||
Pomoromantic: 'Pomoromantique'
|
||||
Pomosexual: 'Pomosexuel·le'
|
||||
Pomosexual: 'Pomosexue{inflection_l}'
|
||||
Progress_Pride: 'Progress Pride'
|
||||
Queer: 'Queer'
|
||||
Queerian: 'Queerian'
|
||||
|
@ -633,11 +639,11 @@ flags:
|
|||
Quoiromantic: 'Queeromantique'
|
||||
Sapphic: 'Saphique'
|
||||
Sexuality_Questioning: 'En questionnement de sexualité'
|
||||
Straight_Ally: 'Allié hétéro'
|
||||
Straight_Ally: 'Alli{inflection_e} hétéro'
|
||||
Toric: 'Toric'
|
||||
Transfeminine: 'Transféminin·e'
|
||||
Transfeminine: 'Transfémini{inflection_n}'
|
||||
Transgender: 'Transgenre'
|
||||
Transmasculine: 'Transmasculin·e'
|
||||
Transmasculine: 'Transmasculi{inflection_n}'
|
||||
Transneutral: 'Transneutre'
|
||||
Trigender: 'Trigenre'
|
||||
Trixic: 'Trixic'
|
||||
|
|
|
@ -64,9 +64,11 @@ nouns:
|
|||
declension: false
|
||||
submit: true
|
||||
templates: true
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: false
|
||||
|
||||
names:
|
||||
|
|
|
@ -74,7 +74,7 @@ pronouns:
|
|||
Ook al is het voor veel mensen erg belangrijk dat men specifieke voornaamwoorden gebruikt om over hun te praten,
|
||||
vinden anderen het geen probleem om op wat voor manier dan ook aangesproken te worden
|
||||
- zolang de context duidelijk is wat betreft degene over wie wordt gesproken.
|
||||
options: 'bekijk de mogelijkheden [share]{/=hier}.'
|
||||
options: 'bekijk de mogelijkheden [share]{/voornaamwoorden=hier}.'
|
||||
others: 'Andere vormen'
|
||||
othersRaw: 'andere'
|
||||
or: 'of'
|
||||
|
@ -167,6 +167,8 @@ nouns:
|
|||
plural: 'meervoud'
|
||||
pluralShort: 'meerv.'
|
||||
|
||||
image: 'Beeld'
|
||||
|
||||
faq:
|
||||
header: 'FAQ'
|
||||
headerLong: 'Veelgestelde vragen'
|
||||
|
@ -399,8 +401,12 @@ profile:
|
|||
description: 'Omschrijving'
|
||||
names: 'Namen'
|
||||
pronouns: 'Voornaamwoorden'
|
||||
pronounsInfo: 'Je kunt een voornaamwoord (bijv. “die” of “zij/haar”) of een link (bijv. “http://nl.pronouns.page/zem”) of vijf eigen vormen (bijv. “hen/hen/hun/hunne/hunzelf”) invoeren.'
|
||||
pronounsNotFound: 'We kunnen geen link naar dit voornaamwoord vinden!'
|
||||
pronounsInfo: >
|
||||
Je kunt een <strong>voornaamwoord</strong> (bijv. “die” of “zij/haar”)
|
||||
of een <strong>link</strong> (bijv. “http://nl.pronouns.page/zem”)
|
||||
of <strong>vijf eigen vormen</strong> (bijv. “hen/hen/hun/hunne/hunzelf”) invoeren.
|
||||
# TODO add: You can also use {/pronouns#generator=<strong>the generator</strong>} to fill out sentences with custom forms.
|
||||
pronounsNotFound: 'We kunnen geen link naar dit voornaamwoord vinden!' # TODO 'Unrecognised format. Please check out the instruction above.'
|
||||
words: 'Woorden'
|
||||
birthday: 'Leeftijd'
|
||||
birthdayInfo: 'We laten jouw verjaardagsdatum niet zien, alleen de berekende leeftijd.'
|
||||
|
|
|
@ -45,9 +45,11 @@ nouns:
|
|||
declension: false
|
||||
submit: true
|
||||
templates: true
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: true
|
||||
categories:
|
||||
- 'seksuell legning'
|
||||
|
|
|
@ -73,7 +73,7 @@ pronouns:
|
|||
description: >
|
||||
Selv om det for mange folk er veldig viktig at andre bruker spesifikke pronomen til å omtale dem
|
||||
så er det også andre som ikke bryr seg om hvilke pronomen du bruker for dem, eller bruker alle pronomen - så lenge det er klart hvem man snakker om.
|
||||
options: 'sjekk ut valgene her [del]{/=her}.'
|
||||
options: 'sjekk ut valgene her [share]{/pronomen=her}.'
|
||||
others: 'Andre former'
|
||||
othersRaw: 'andre'
|
||||
or: 'eller'
|
||||
|
@ -169,7 +169,9 @@ nouns:
|
|||
plural: 'flertall.'
|
||||
pluralShort: 'fl.'
|
||||
|
||||
terms:
|
||||
image: 'Bilde'
|
||||
|
||||
terminology:
|
||||
header: 'Terminologi'
|
||||
headerLong: 'Ordbok av queer terminologi'
|
||||
info:
|
||||
|
@ -353,6 +355,7 @@ contact:
|
|||
members: 'Nåværende medlemmer'
|
||||
blog: 'Blogg'
|
||||
upcoming: 'Kommende språk versjoner'
|
||||
member: 'Member of the collective' # TODO
|
||||
|
||||
support:
|
||||
header: 'Hjelp'
|
||||
|
@ -410,8 +413,12 @@ profile:
|
|||
description: 'Beskrivelse'
|
||||
names: 'Navn'
|
||||
pronouns: 'Pronomen'
|
||||
pronounsInfo: 'Du kan taste inn ett pronomen (feks. “de” eller “hun/henne” eller en link (feks. “http://no.pronouns.page/hun”).'
|
||||
pronounsNotFound: 'Vi kan ikke finne en link til dette pronomenet!'
|
||||
pronounsInfo: >
|
||||
Du kan taste inn ett <strong>pronomen</strong> (feks. “de” eller “hun/henne”)
|
||||
eller en <strong>link</strong> (feks. “http://no.pronouns.page/hun”).
|
||||
# TODO add: or the <strong>custom five forms</strong> (eg. “ze/zem/zir/zirs/zirself”).
|
||||
# TODO add: You can also use {/pronouns#generator=<strong>the generator</strong>} to fill out sentences with custom forms.
|
||||
pronounsNotFound: 'Vi kan ikke finne en link til dette pronomenet!' # TODO 'Unrecognised format. Please check out the instruction above.'
|
||||
words: 'Ord'
|
||||
birthday: 'Alder'
|
||||
birthdayInfo: 'Vi viser ikke bursdagen din, bare den kalkulerte alderen.'
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
# Poradnik języka neutralnego płciowo
|
||||
|
||||
<small>2021-08-28 | [@Sybil](/@Sybil)</small>
|
||||
|
||||
Prezentacja Sybila stworzona na V Kongres Anarchistyczny Kongresono (kliknij na obrazek, aby otworzyć).
|
||||
|
||||
<p>
|
||||
<a href="/docs/Poradnik języka neutralnego płciowo.pdf" target="_blank">
|
||||
<img src="/img-local/blog/poradnik-języka-neutralnego-płciowo.png" class="hero" alt="Prezentacja w formacie PDF"/>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="/docs/Poradnik języka neutralnego płciowo.pdf" target="_blank" class="btn btn-primary d-block">
|
||||
<span class="fal fa-file-pdf"></span>
|
||||
Prezentacja
|
||||
</a>
|
||||
</p>
|
|
@ -74,6 +74,7 @@ sources:
|
|||
nouns:
|
||||
enabled: true
|
||||
route: 'slowniki'
|
||||
routeMain: 'neutratywy'
|
||||
collapsable: false
|
||||
plurals: true
|
||||
pluralsRequired: true
|
||||
|
@ -85,11 +86,13 @@ nouns:
|
|||
- 'dukatywy'
|
||||
- 'osobatywy'
|
||||
- 'iksatywy'
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: true
|
||||
categories: ['nieheteronormatywność', 'transpłciowość', 'interpłciowość', 'feminizm', 'niepełnosprawność', 'rasa i narodowość', 'ubóstwo', 'zdrowie psychiczne']
|
||||
route: 'inkluzywny'
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: true
|
||||
published: true
|
||||
categories:
|
||||
|
@ -1325,13 +1328,13 @@ census:
|
|||
spis-2021: 'Raport ze Spisu 2021'
|
||||
|
||||
redirects:
|
||||
- { from: '^/neutratywy$', to: '/slowniki/neutratywy' }
|
||||
- { from: '^/dukatywy$', to: '/slowniki/dukatywy' }
|
||||
- { from: '^/osobatywy$', to: '/slowniki/osobatywy' }
|
||||
- { from: '^/iksatywy$', to: '/slowniki/iksatywy' }
|
||||
- { from: '^/inkluzywny', to: '/slowniki/inkluzywny' }
|
||||
- { from: '^/inkluzywnosc', to: '/slowniki/inkluzywny' }
|
||||
- { from: '^/terminologia', to: '/slowniki/terminologia' }
|
||||
- { from: '^/slowniki/neutratywy$', to: '/neutratywy' }
|
||||
- { from: '^/slowniki/dukatywy$', to: '/dukatywy' }
|
||||
- { from: '^/slowniki/osobatywy$', to: '/osobatywy' }
|
||||
- { from: '^/slowniki/iksatywy$', to: '/iksatywy' }
|
||||
- { from: '^/slowniki/inkluzywny', to: '/inkluzywny' }
|
||||
- { from: '^/slowniki/inkluzywnosc', to: '/inkluzywny' }
|
||||
- { from: '^/slowniki/terminologia', to: '/terminologia' }
|
||||
- { from: '^/rzeczowniki$', to: '/slowniki' }
|
||||
- { from: '^/slownik$', to: '/slowniki' }
|
||||
- { from: '^/s%C5%82ownik$', to: '/slowniki' }
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 287 KiB |
|
@ -5,7 +5,7 @@
|
|||
:to="buildRoute(route)"
|
||||
:class="['btn', isActiveRoute(route) ? 'btn-primary' : 'btn-outline-primary']">
|
||||
<Icon :v="icon"/>
|
||||
<T>nouns.{{name}}.header</T>
|
||||
<T>{{name}}</T>
|
||||
</router-link>
|
||||
</div>
|
||||
<div class="d-block d-md-none btn-group-vertical btn-block mb-2 w-100">
|
||||
|
@ -13,7 +13,7 @@
|
|||
:to="buildRoute(route)"
|
||||
:class="['btn', isActiveRoute(route) ? 'btn-primary' : 'btn-outline-primary']">
|
||||
<Icon :v="icon"/>
|
||||
<T>nouns.{{name}}.header</T>
|
||||
<T>{{name}}</T>
|
||||
</router-link>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -23,18 +23,18 @@
|
|||
export default {
|
||||
data() {
|
||||
const links = [
|
||||
{name: 'neuterNouns', icon: 'deer', route: 'neutratywy'},
|
||||
{name: 'dukajNouns', icon: 'ghost', route: 'dukatywy'},
|
||||
{name: 'personNouns', icon: 'user-friends', route: 'osobatywy'},
|
||||
{name: 'xNouns', icon: 'comment-times', route: 'iksatywy'},
|
||||
{name: 'nouns.neuterNouns.header', icon: 'deer', route: 'neutratywy'},
|
||||
{name: 'nouns.dukajNouns.header', icon: 'ghost', route: 'dukatywy'},
|
||||
{name: 'nouns.personNouns.header', icon: 'user-friends', route: 'osobatywy'},
|
||||
{name: 'nouns.xNouns.header', icon: 'comment-times', route: 'iksatywy'},
|
||||
];
|
||||
|
||||
if (this.config.nouns.inclusive.enabled) {
|
||||
links.push({name: 'inclusive', icon: 'book-heart', route: this.config.nouns.inclusive.route});
|
||||
if (this.config.inclusive.enabled) {
|
||||
links.push({name: 'inclusive.header', icon: 'book-heart', route: this.config.inclusive.route});
|
||||
}
|
||||
|
||||
if (this.config.nouns.terms.enabled) {
|
||||
links.push({name: 'terms', icon: 'flag', route: this.config.nouns.terms.route});
|
||||
if (this.config.terminology.enabled) {
|
||||
links.push({name: 'terminology.header', icon: 'flag', route: this.config.terminology.route});
|
||||
}
|
||||
|
||||
return {
|
||||
|
@ -43,7 +43,7 @@
|
|||
},
|
||||
methods: {
|
||||
buildRoute(route) {
|
||||
return `/${this.config.nouns.route}/${route}`;
|
||||
return `/${route}`;
|
||||
},
|
||||
isActiveRoute(route) {
|
||||
let current = decodeURIComponent(this.$route.fullPath).replace(/\/$/, '');
|
||||
|
|
|
@ -85,7 +85,7 @@ pronouns:
|
|||
description: >
|
||||
Choć dla wielu osób niezmiernie ważne jest, by używać wobec nich konkretnych zaimków,
|
||||
innym nie przeszkadza zwracanie się w dowolny sposób – o ile wiadomo z kontekstu, że to o nich mowa.
|
||||
options: 'przejrzyj listę możliwości [share]{/=tutaj}.'
|
||||
options: 'przejrzyj listę możliwości [share]{/zaimki=tutaj}.'
|
||||
avoiding:
|
||||
header: 'Unikanie form nacechowanych płciowo'
|
||||
description: >
|
||||
|
@ -246,7 +246,7 @@ nouns:
|
|||
- >
|
||||
Płeć człowieka wymyka się jednak prostemu podziałowi kobieta/mężczyzna.
|
||||
Jakimi rzeczownikami mogą się opisywać {/pytania#niebinarnosc=osoby niebinarne}?
|
||||
Jeśli używają {/ono=rodzaju neutralnego}, {/onu=postpłciowego} czy {/=innych nienormatywnych form},
|
||||
Jeśli używają {/ono=rodzaju neutralnego}, {/onu=postpłciowego} czy {/zaimki=innych nienormatywnych form},
|
||||
to które formy rzeczowników pasują do nich gramatycznie?
|
||||
Jak przetłumaczyć z angielskiego zawód osoby używającej zaimków <em>they/them</em>?
|
||||
Jak opisywać grupy mieszane?
|
||||
|
@ -371,7 +371,9 @@ nouns:
|
|||
plural: 'liczba mnoga'
|
||||
pluralShort: 'l. mn.'
|
||||
|
||||
inclusive:
|
||||
image: 'Obrazek'
|
||||
|
||||
inclusive:
|
||||
header: 'Inkluzywność'
|
||||
headerLong: 'Słownik inkluzywnego języka'
|
||||
insteadOf: 'Zamiast'
|
||||
|
@ -389,7 +391,7 @@ nouns:
|
|||
categories: 'Kategorie'
|
||||
sources: 'Linki źródłowe'
|
||||
|
||||
terms:
|
||||
terminology:
|
||||
header: 'Terminologia'
|
||||
headerLong: 'Słownik terminologii queerowej'
|
||||
info:
|
||||
|
@ -497,7 +499,7 @@ faq:
|
|||
question: 'Czy ktoś tego w ogóle używa?'
|
||||
answer:
|
||||
- >
|
||||
Tak! Niemal wszystkie formy, które {/=tu prezentujemy},
|
||||
Tak! Niemal wszystkie formy, które {/zaimki=tu prezentujemy},
|
||||
zostały nam podesłane przez osoby rzeczywiście ich używające,
|
||||
albo wzięte z tekstów literatury.
|
||||
Ewentualnie {/ona/ich=uzupełniłośmy} je jedynie w miejscach, gdzie którejś części brakowało,
|
||||
|
@ -709,7 +711,7 @@ faq:
|
|||
Jednak nie każda osoba chce używać zaimków i form męskich czy żeńskich,
|
||||
choćby dlatego, że płeć człowieka wymyka się tym dwóm kategoriom.
|
||||
Coraz więcej osób używa w odniesieniu do siebie
|
||||
{/ono=rodzaju neutralnego} i {/=innych form}.
|
||||
{/ono=rodzaju neutralnego} i {/zaimki=innych form}.
|
||||
Formy te zaczynają być także potrzebne w tłumaczeniach z języków,
|
||||
gdzie używane są formy niebinarne takie jak choćby angielskie zaimki they/them.
|
||||
Z tego powodu proponujemy rozbudowę niebinarnej polszczyzny poprzez wspólne tworzenie form neutralnych.
|
||||
|
@ -780,7 +782,7 @@ faq:
|
|||
question: 'Jak zwracać się do osoby, której płci nie znamy, lub do mieszanej grupy osób?'
|
||||
answer:
|
||||
- >
|
||||
Wiele form, które {/=tutaj proponujemy}, można zastosować właśnie w takich sytuacjach, np.:
|
||||
Wiele form, które {/zaimki=tutaj proponujemy}, można zastosować właśnie w takich sytuacjach, np.:
|
||||
„{/on/a=moi drodzy/drogie}”, „drogie osoby”, „{/on*=wszys* chętn*}”, „{/onx=jesteś wspaniałx}”, itp.
|
||||
zmiana:
|
||||
question: 'Czy mogę zmienić swoje zaimki?'
|
||||
|
@ -874,7 +876,7 @@ people:
|
|||
Przede wszystkim, nie idź na łatwiznę i nie opisuj jej zaimkami, które <em>wydaje ci się</em>,
|
||||
że <em>„powinna”</em> używać ze względu na „męskie” czy „żeńskie” ciało.
|
||||
Niektórzy używają zamiennie na przykład „they” i „she”, wtedy żeńskie zaimki w polszczyźnie są na miejscu.
|
||||
W przciwnym wypadku zajrzyj na naszą [home] {/=stronę główną},
|
||||
W przciwnym wypadku zajrzyj do sekcji [tags] {/zaimki=Zaimki},
|
||||
gdzie opisujemy neutralne możliwości. Zapoznaj się z nimi i na tej podstawie dokonaj wyboru.
|
||||
Możesz też spróbować spytać bezpośrednio osobę zainteresowaną o jej preferencje
|
||||
– posiłkując się naszymi [globe-americas] {/english=anglojęzycznymi materiałami}.
|
||||
|
@ -901,7 +903,7 @@ english:
|
|||
- >
|
||||
This website is an effort to put together in a structured and accessible way
|
||||
the existing ideas for less gendered pronouns and other forms.
|
||||
We create it in Polish (see: [home] {/=Homepage}),
|
||||
We create it in Polish (see: [tags] {/zaimki=Zaimki}),
|
||||
but if you don't speak it, yet still are interested in
|
||||
how this language tries to cope with the omnipresent binaries,
|
||||
we've prepared a short overview of those ideas in English.
|
||||
|
@ -1022,8 +1024,10 @@ profile:
|
|||
description: 'Opis'
|
||||
names: 'Imiona'
|
||||
pronouns: 'Zaimki'
|
||||
pronounsInfo: 'Możesz tu wpisać zaimek (np. „onu”, „on/jego”) lub wkleić linka do niego (np. „https://zaimki.pl/ona/ich”).'
|
||||
pronounsNotFound: 'Nie możemy znaleźć tego zaimka!'
|
||||
pronounsInfo: >
|
||||
Możesz tu wpisać <strong>zaimek</strong> (np. „onu”, „on/jego”) lub wkleić <strong>linka</strong> do niego (np. „https://zaimki.pl/ona/ich”).
|
||||
Użyj {/zaimki#generator=<strong>generatora</strong>} by wypełnić luki w zdaniach niestandardowymi formami.'
|
||||
pronounsNotFound: 'Niepoprawny format. Szczegóły w instrukcji powyżej'
|
||||
words: 'Słowa'
|
||||
birthday: 'Wiek'
|
||||
birthdayInfo: 'Nie pokazujemy publicznie pełnej daty urodzenia, jedynie obliczony wiek.'
|
||||
|
|
|
@ -47,9 +47,11 @@ nouns:
|
|||
declension: false
|
||||
submit: true
|
||||
templates: false
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: true
|
||||
categories:
|
||||
- 'orientação sexual'
|
||||
|
|
|
@ -74,7 +74,7 @@ pronouns:
|
|||
description: >
|
||||
Enquanto para muita gente é importante que se utilize pronomes específicos para falar dels,
|
||||
a outres não ês incomoda que sejam chamades de qualquer maneira - conquanto que no contexto esteja claro com quem se está falando.
|
||||
options: 'Verifique as opções [compartilhar]{/= aqui}.'
|
||||
options: 'Verifique as opções [share] {/pronomes= aqui}.'
|
||||
others: 'Outras formas'
|
||||
othersRaw: 'Outras'
|
||||
or: 'ou'
|
||||
|
@ -166,7 +166,9 @@ nouns:
|
|||
plural: 'plural'
|
||||
pluralShort: 'pl.'
|
||||
|
||||
terms:
|
||||
image: 'Imagem'
|
||||
|
||||
terminology:
|
||||
header: 'Terminologia'
|
||||
headerLong: 'Dicionário de terminologia queer'
|
||||
info:
|
||||
|
@ -415,8 +417,11 @@ profile:
|
|||
description: 'Descrição'
|
||||
names: 'Nomes'
|
||||
pronouns: 'Pronomes'
|
||||
pronounsInfo: 'Pode introduzir um pronome (p. ex. “ele” ou “ela”) ou um link (“http://pt.pronouns.page/elx”).'
|
||||
pronounsNotFound: '˜Não podemos encontrar um link com este pronome!'
|
||||
pronounsInfo: >
|
||||
Pode introduzir um <strong>pronome</strong> (p. ex. “ele” ou “ela”)
|
||||
ou um <strong>link</strong> (“http://pt.pronouns.page/elx”).
|
||||
# TODO add: You can also use {/pronouns#generator=<strong>the generator</strong>} to fill out sentences with custom forms.
|
||||
pronounsNotFound: '˜Não podemos encontrar um link com este pronome!' # TODO 'Unrecognised format. Please check out the instruction above.'
|
||||
words: 'Palavras'
|
||||
birthday: 'Idade'
|
||||
birthdayInfo: 'Não publicamos a data do aniversário, somente a idade calculada.'
|
||||
|
|
|
@ -50,9 +50,11 @@ nouns:
|
|||
declension: false
|
||||
submit: true
|
||||
templates: true
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: true
|
||||
categories:
|
||||
- 'orientacja seksualna'
|
||||
|
|
|
@ -26,12 +26,12 @@
|
|||
{name: 'nouns', icon: 'book', route: ''},
|
||||
];
|
||||
|
||||
if (this.config.nouns.inclusive.enabled) {
|
||||
links.push({name: 'inclusive', icon: 'book-heart', route: this.config.nouns.inclusive.route});
|
||||
if (this.config.inclusive.enabled) {
|
||||
links.push({name: 'inclusive', icon: 'book-heart', route: this.config.inclusive.route});
|
||||
}
|
||||
|
||||
if (this.config.nouns.terms.enabled) {
|
||||
links.push({name: 'terms', icon: 'flag', route: this.config.nouns.terms.route});
|
||||
if (this.config.terminology.enabled) {
|
||||
links.push({name: 'terms', icon: 'flag', route: this.config.terminology.route});
|
||||
}
|
||||
|
||||
return {
|
||||
|
@ -40,7 +40,7 @@
|
|||
},
|
||||
methods: {
|
||||
buildRoute(route) {
|
||||
return `/${this.config.nouns.route}/${route}`;
|
||||
return `/${route}`;
|
||||
},
|
||||
isActiveRoute(route) {
|
||||
return decodeURIComponent(this.$route.fullPath).replace(/\/$/, '') === this.buildRoute(route).replace(/\/$/, '');
|
||||
|
|
|
@ -74,7 +74,7 @@ pronouns:
|
|||
description: >
|
||||
Even though for many people it's incredibly important that people use specific pronouns to talk about them,
|
||||
others don't mind being addressed in any way – as long as the context is clear as to who one talks about.
|
||||
options: 'check out the options [share]{/=here}.'
|
||||
options: 'check out the options [share]{/pronouns=here}.'
|
||||
others: 'Other forms'
|
||||
othersRaw: 'other'
|
||||
or: 'or'
|
||||
|
@ -171,7 +171,9 @@ nouns:
|
|||
nouns:
|
||||
header: 'נײטראַלע סובסטאַנטיװן'
|
||||
|
||||
terms:
|
||||
image: 'Image'
|
||||
|
||||
terminology:
|
||||
header: 'טערמינאָלאָגיע'
|
||||
headerLong: 'Słownik terminologii queerowej'
|
||||
info:
|
||||
|
@ -418,8 +420,16 @@ profile:
|
|||
description: 'באַשרײַבונג'
|
||||
names: 'נעמען'
|
||||
pronouns: 'פּראָנאָמען'
|
||||
pronounsInfo: 'You can enter a pronoun (eg. “they” or “she/sher”) or a link (eg. “http://en.pronouns.page/e”) or the custom five forms (eg. “ze/zem/zir/zirs/zirself”).'
|
||||
pronounsNotFound: 'We can''t find a link to this pronoun!'
|
||||
pronounsInfo: >
|
||||
You can enter a <strong>pronoun</strong> (eg. “they” or “she/her”)
|
||||
or a <strong>link</strong> (eg. “https://en.pronouns.page/e”)
|
||||
or the custom five forms (eg. “ze/zem/zir/zirs/zirself”).
|
||||
Keep in mind that <strong>all five forms</strong> are required in that case,
|
||||
otherwise the app can only guess what exactly do you mean.
|
||||
You can also use {/pronouns#generator=<strong>the generator</strong>} to fill out sentences with custom forms.
|
||||
If your pronouns follow the {/pronouns#nameself=<strong>nameself pattern</strong>},
|
||||
you can also use a colon shorthand (eg. “:star”).
|
||||
pronounsNotFound: 'Unrecognised format. Please check out the instruction above.'
|
||||
words: 'װערטער'
|
||||
birthday: 'עלטער'
|
||||
birthdayInfo: 'We do not publish your birthday, just the calculated age.'
|
||||
|
|
|
@ -49,9 +49,11 @@ nouns:
|
|||
declension: false
|
||||
submit: true
|
||||
templates: true
|
||||
inclusive:
|
||||
|
||||
inclusive:
|
||||
enabled: false
|
||||
terms:
|
||||
|
||||
terminology:
|
||||
enabled: false
|
||||
|
||||
names:
|
||||
|
|
|
@ -71,7 +71,7 @@ pronouns:
|
|||
description: >
|
||||
其實對很多人來說,別人用特定代詞來談論他們是非常重要的,
|
||||
但其他人不介意別人怎麼叫他們,只要內容清楚在談論誰。
|
||||
options: '查看選項 [share]{/= 這裡}.'
|
||||
options: '查看選項 [share] {/pronouns= 這裡}.'
|
||||
others: '其他形式'
|
||||
othersRaw: '其他'
|
||||
or: '或'
|
||||
|
@ -153,6 +153,8 @@ nouns:
|
|||
plural: '複數'
|
||||
pluralShort: '複數'
|
||||
|
||||
image: 'Image' # TODO
|
||||
|
||||
faq:
|
||||
header: 'FAQ'
|
||||
headerLong: 'Frequently asked questions'
|
||||
|
@ -384,8 +386,10 @@ profile:
|
|||
description: '傳記'
|
||||
names: '名字'
|
||||
pronouns: '代詞'
|
||||
pronounsInfo: '您可以輸入代詞(例如“他”或“他/你”)或鏈接(例如“ http://zh.pronouns.page/佢”'
|
||||
pronounsNotFound: '我們找不到這個代詞的鏈接'
|
||||
pronounsInfo: '您可以輸入代詞(例如“他”或“他/你”)或鏈接(例如“http://zh.pronouns.page/佢”)'
|
||||
# TODO add <strong></strong> around the words "pronoun" and "link"
|
||||
# TODO add: You can also use {/pronouns#generator=<strong>the generator</strong>} to fill out sentences with custom forms.
|
||||
pronounsNotFound: '我們找不到這個代詞的鏈接' # TODO 'Unrecognised format. Please check out the instruction above.'
|
||||
words: '詞匯'
|
||||
birthday: '嵗'
|
||||
birthdayInfo: '我們不發布您的生日,只發布計算出的年齡。'
|
||||
|
|
|
@ -188,14 +188,18 @@ export default {
|
|||
if (config.nouns.enabled) {
|
||||
routes.push({ path: '/' + config.nouns.route, component: resolve(__dirname, 'routes/nouns.vue') });
|
||||
for (let subroute of config.nouns.subroutes || []) {
|
||||
routes.push({ path: `/${config.nouns.route}/${subroute}`, component: resolve(__dirname, `data/nouns/${subroute}.vue`) });
|
||||
routes.push({ path: `/${subroute}`, component: resolve(__dirname, `data/nouns/${subroute}.vue`) });
|
||||
}
|
||||
if (config.nouns.inclusive.enabled) {
|
||||
routes.push({path: `/${config.nouns.route}/${config.nouns.inclusive.route}`, component: resolve(__dirname, 'routes/inclusive.vue')});
|
||||
}
|
||||
if (config.nouns.terms.enabled) {
|
||||
routes.push({path: `/${config.nouns.route}/${config.nouns.terms.route}`, component: resolve(__dirname, 'routes/queerTerms.vue')});
|
||||
|
||||
if (config.inclusive.enabled) {
|
||||
routes.push({path: `/${config.inclusive.route}`, component: resolve(__dirname, 'routes/inclusive.vue')});
|
||||
}
|
||||
if (config.terminology.enabled) {
|
||||
routes.push({path: `/${config.terminology.route}`, component: resolve(__dirname, 'routes/terminology.vue')});
|
||||
|
||||
// TODO remove later
|
||||
routes.push({path: `/${config.nouns.route}/${config.terminology.route}`, component: resolve(__dirname, 'routes/terminology.vue')});
|
||||
}
|
||||
|
||||
if (config.names.enabled) {
|
||||
|
|
|
@ -68,16 +68,16 @@
|
|||
nouns_search: ['GET', '/api/nouns/search/{term}'],
|
||||
},
|
||||
}, {
|
||||
enabled: this.config.nouns.inclusive.enabled,
|
||||
header: 'nouns.inclusive.header',
|
||||
enabled: this.config.inclusive.enabled,
|
||||
header: 'inclusive.header',
|
||||
icon: 'book-heart',
|
||||
endpoints: {
|
||||
inclusive_all: ['GET', '/api/inclusive'],
|
||||
inclusive_search: ['GET', '/api/inclusive/search/{term}'],
|
||||
},
|
||||
}, {
|
||||
enabled: this.config.nouns.terms.enabled,
|
||||
header: 'nouns.terms.header',
|
||||
enabled: this.config.terminology.enabled,
|
||||
header: 'terminology.header',
|
||||
icon: 'flag',
|
||||
endpoints: {
|
||||
terms_all: ['GET', '/api/terms'],
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
|
||||
<h2>
|
||||
<Icon v="book-heart"/>
|
||||
<T>nouns.inclusive.headerLong</T>
|
||||
<T>inclusive.headerLong</T>
|
||||
</h2>
|
||||
|
||||
<section>
|
||||
<T>nouns.inclusive.info</T>
|
||||
<Share :title="$t('nouns.inclusive.headerLong')"/>
|
||||
<T>inclusive.info</T>
|
||||
<Share :title="$t('inclusive.headerLong')"/>
|
||||
</section>
|
||||
|
||||
<InclusiveDictionary load ref="inclusivedictionary"/>
|
||||
|
@ -25,14 +25,14 @@
|
|||
components: { NounsNav },
|
||||
mixins: [ hash ],
|
||||
mounted() {
|
||||
this.handleHash(this.config.nouns.inclusive.hashNamespace || '', filter => {
|
||||
this.handleHash(this.config.inclusive.hashNamespace || '', filter => {
|
||||
this.$refs.inclusivedictionary.setFilter(filter);
|
||||
});
|
||||
},
|
||||
head() {
|
||||
return head({
|
||||
title: this.$t('nouns.inclusive.headerLong'),
|
||||
description: this.$t('nouns.inclusive.info')[0],
|
||||
title: this.$t('inclusive.headerLong'),
|
||||
description: this.$t('inclusive.info')[0],
|
||||
});
|
||||
},
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
pronouns.page/@{{user.username}}
|
||||
</a>
|
||||
</div>
|
||||
<!--
|
||||
<div v-if="($user() && $user().username === profile.username) || $isGranted('users')">
|
||||
<small>
|
||||
<Icon v="id-card"/>
|
||||
|
@ -49,6 +50,7 @@
|
|||
</template>
|
||||
<small v-else><T>profile.card.generating</T></small>
|
||||
</div>
|
||||
-->
|
||||
</Profile>
|
||||
|
||||
<Ban :user="user"/>
|
||||
|
@ -103,7 +105,7 @@
|
|||
};
|
||||
},
|
||||
async mounted() {
|
||||
if (this.config.nouns.terms.enabled) {
|
||||
if (this.config.terminology.enabled) {
|
||||
this.terms = await this.$axios.$get(`/terms`);
|
||||
}
|
||||
},
|
||||
|
|
|
@ -90,35 +90,37 @@
|
|||
<OpinionLegend/>
|
||||
</section>
|
||||
|
||||
<div class="form-group">
|
||||
<section class="form-group">
|
||||
<h3 class="h4">
|
||||
<Icon v="signature"/>
|
||||
<T>profile.names</T>
|
||||
</h3>
|
||||
<OpinionListInput v-model="names"/>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="form-group">
|
||||
<section class="form-group">
|
||||
<h3 class="h4">
|
||||
<Icon v="link"/>
|
||||
<T>profile.pronouns</T>
|
||||
</h3>
|
||||
<p class="small mb-2">
|
||||
<div class="alert alert-info">
|
||||
<p class="small mb-0">
|
||||
<Icon v="info-circle"/>
|
||||
<T>profile.pronounsInfo</T>
|
||||
</p>
|
||||
<OpinionListInput v-model="pronouns" :validation="validatePronoun"/>
|
||||
<Answer question="custom-pronouns" small/>
|
||||
</div>
|
||||
<OpinionListInput v-model="pronouns" :validation="validatePronoun"/>
|
||||
</section>
|
||||
|
||||
<div class="form-group">
|
||||
<section class="form-group">
|
||||
<h3 class="h4">
|
||||
<Icon v="comment-edit"/>
|
||||
<T>profile.description</T>
|
||||
</h3>
|
||||
<textarea class="form-control form-control-sm" v-model="description" maxlength="256" rows="4"/>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="form-group">
|
||||
<section class="form-group">
|
||||
<h3 class="h4">
|
||||
<Icon v="flag"/>
|
||||
<T>profile.flags</T>
|
||||
|
@ -129,7 +131,6 @@
|
|||
<ButtonList v-model="flags" :options="allFlags" v-slot="s">
|
||||
<Flag :name="s.desc.split('|')[0]" :alt="s.desc.split('|')[1]" :img="`/flags/${s.v}.png`"/>
|
||||
</ButtonList>
|
||||
</div>
|
||||
|
||||
<details class="form-group border rounded" :open="Object.keys(customFlags).length > 0">
|
||||
<summary class="px-3 py-2">
|
||||
|
@ -141,8 +142,9 @@
|
|||
</details>
|
||||
|
||||
<Answer question="flags" small/>
|
||||
</section>
|
||||
|
||||
<div class="form-group">
|
||||
<section class="form-group">
|
||||
<h3 class="h4">
|
||||
<Icon v="link"/>
|
||||
<T>profile.links</T>
|
||||
|
@ -159,9 +161,9 @@
|
|||
</a>
|
||||
😉
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="form-group">
|
||||
<section class="form-group">
|
||||
<h3 class="h4">
|
||||
<Icon v="birthday-cake"/>
|
||||
<T>profile.birthday</T>
|
||||
|
@ -175,9 +177,9 @@
|
|||
<Icon v="times"/>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div class="form-group">
|
||||
<section class="form-group">
|
||||
<h3 class="h4">
|
||||
<Icon v="scroll-old"/>
|
||||
<T>profile.words</T>
|
||||
|
@ -188,12 +190,14 @@
|
|||
</h4>
|
||||
<OpinionListInput v-model="words[i]" group="words"/>
|
||||
</template>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<button class="btn btn-primary w-100" type="submit">
|
||||
<Icon v="save"/>
|
||||
<T>profile.editor.save</T>
|
||||
</button>
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -401,4 +405,7 @@
|
|||
.saving {
|
||||
opacity: .5;
|
||||
}
|
||||
section.form-group {
|
||||
margin-bottom: 5rem;
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
</div>
|
||||
<SimplePronounList :pronouns="groupPronouns"/>
|
||||
</li>
|
||||
<li class="list-group-item">
|
||||
<li class="list-group-item" id="generator">
|
||||
<p class="h5">
|
||||
<T>home.generator.header</T>
|
||||
</p>
|
||||
|
@ -107,7 +107,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li v-if="config.pronouns.multiple !== false" class="list-group-item">
|
||||
<li v-if="config.pronouns.multiple !== false" class="list-group-item" id="multiple">
|
||||
<p class="h5">
|
||||
<Spelling :text="config.pronouns.multiple.name"/>
|
||||
</p>
|
||||
|
@ -143,7 +143,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li v-if="config.pronouns.null !== false" class="list-group-item">
|
||||
<li v-if="config.pronouns.null !== false" class="list-group-item" id="nameself">
|
||||
<p class="h5">
|
||||
<Spelling :text="config.pronouns.null.description"/>
|
||||
</p>
|
||||
|
|
|
@ -4,12 +4,12 @@
|
|||
|
||||
<h2>
|
||||
<Icon v="flag"/>
|
||||
<T>nouns.terms.headerLong</T>
|
||||
<T>terminology.headerLong</T>
|
||||
</h2>
|
||||
|
||||
<section>
|
||||
<T>nouns.terms.info</T>
|
||||
<Share :title="$t('nouns.terms.headerLong')"/>
|
||||
<T>terminology.info</T>
|
||||
<Share :title="$t('terminology.headerLong')"/>
|
||||
</section>
|
||||
|
||||
<TermsDictionary load ref="termsdictionary"/>
|
||||
|
@ -26,14 +26,14 @@
|
|||
|
||||
mixins: [ hash ],
|
||||
mounted() {
|
||||
this.handleHash(this.config.nouns.terms.hashNamespace || '', filter => {
|
||||
this.handleHash(this.config.terminology.hashNamespace || '', filter => {
|
||||
this.$refs.termsdictionary.setFilter(filter);
|
||||
});
|
||||
},
|
||||
head() {
|
||||
return head({
|
||||
title: this.$t('nouns.terms.headerLong'),
|
||||
description: this.$t('nouns.terms.info')[0],
|
||||
title: this.$t('terminology.headerLong'),
|
||||
description: this.$t('terminology.info')[0],
|
||||
});
|
||||
},
|
||||
}
|
|
@ -6,7 +6,10 @@ import cookieParser from 'cookie-parser';
|
|||
import grant from "grant";
|
||||
import router from "./routes/user";
|
||||
import { loadSuml } from './loader';
|
||||
import {isGranted} from "../src/helpers";
|
||||
import {handleErrorAsync, isGranted} from "../src/helpers";
|
||||
import cookieSettings from "../src/cookieSettings";
|
||||
import SQL from "sql-template-strings";
|
||||
import {createCanvas, loadImage, registerFont} from "canvas";
|
||||
|
||||
global.config = loadSuml('config');
|
||||
|
||||
|
@ -25,7 +28,7 @@ app.use(express.urlencoded({ extended: true }));
|
|||
app.use(cookieParser());
|
||||
app.use(session({
|
||||
secret: process.env.SECRET,
|
||||
cookie: {},
|
||||
cookie: cookieSettings,
|
||||
resave: false,
|
||||
saveUninitialized: false,
|
||||
}));
|
||||
|
@ -77,6 +80,8 @@ app.use(async function (req, res, next) {
|
|||
|
||||
router.use(grant.express()(require('./social').config));
|
||||
|
||||
app.use(require('./routes/home').default);
|
||||
|
||||
app.use(require('./routes/banner').default);
|
||||
|
||||
app.use(require('./routes/user').default);
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
import { Router } from 'express';
|
||||
import {buildLocaleList, handleErrorAsync} from "../../src/helpers";
|
||||
|
||||
const router = Router();
|
||||
|
||||
router.get('/versions', handleErrorAsync(async (req, res) => {
|
||||
return res.json(buildLocaleList(global.config.locale));
|
||||
}));
|
||||
|
||||
export default router;
|
|
@ -166,45 +166,33 @@ router.post('/nouns/remove/:id', handleErrorAsync(async (req, res) => {
|
|||
return res.json('ok');
|
||||
}));
|
||||
|
||||
const findBaseForm = (noun, query) => {
|
||||
for (let form of ['masc', 'fem', 'neutr', 'mascPl', 'femPl', 'neutrPl']) {
|
||||
for (let formPart of noun[form].split('|')) {
|
||||
if (formPart.toLowerCase() === query.toLowerCase()) {
|
||||
return formPart;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
router.get('/nouns/:word.png', handleErrorAsync(async (req, res) => {
|
||||
const query = req.params.word.toLowerCase();
|
||||
const term = '%' + query + '%';
|
||||
const noun = (await req.db.all(SQL`
|
||||
router.get('/nouns/:id.png', async (req, res) => {
|
||||
const noun = (await req.db.get(SQL`
|
||||
SELECT * FROM nouns
|
||||
WHERE locale = ${global.config.locale}
|
||||
AND id = ${req.params.id}
|
||||
AND approved >= ${req.isGranted('nouns') ? 0 : 1}
|
||||
AND (masc like ${term} OR fem like ${term} OR neutr like ${term} OR mascPl like ${term} OR femPl like ${term} OR neutrPl like ${term})
|
||||
ORDER BY masc
|
||||
`)).filter(noun =>
|
||||
noun.masc.toLowerCase().split('|').includes(query)
|
||||
|| noun.fem.toLowerCase().split('|').includes(query)
|
||||
|| noun.neutr.toLowerCase().split('|').includes(query)
|
||||
|| noun.mascPl.toLowerCase().split('|').includes(query)
|
||||
|| noun.femPl.toLowerCase().split('|').includes(query)
|
||||
|| noun.neutrPl.toLowerCase().split('|').includes(query)
|
||||
)[0]
|
||||
AND deleted = 0
|
||||
`));
|
||||
|
||||
if (!noun) {
|
||||
return res.status(404).json({error: 'Not found'});
|
||||
}
|
||||
|
||||
const base = findBaseForm(noun, query);
|
||||
let maxItems = 0;
|
||||
['masc', 'fem', 'neutr'].forEach((form, column) => {
|
||||
let items = 0;
|
||||
for (let [key, symbol] of [['', '⋅'], ['Pl', '⁖']]) {
|
||||
items += noun[form + key].split('|').filter(x => x.length).length;
|
||||
}
|
||||
if (items > maxItems) {
|
||||
maxItems = items;
|
||||
}
|
||||
});
|
||||
|
||||
const width = 1200;
|
||||
const height = 600;
|
||||
const padding = 48;
|
||||
const width = 1200;
|
||||
const height = padding * 2.5 + (maxItems + 1) * 48 + padding;
|
||||
const mime = 'image/png';
|
||||
|
||||
registerFont('static/fonts/quicksand-v21-latin-ext_latin-regular.ttf', { family: 'Quicksand', weight: 'regular'});
|
||||
|
@ -218,14 +206,13 @@ router.get('/nouns/:word.png', handleErrorAsync(async (req, res) => {
|
|||
context.drawImage(bg, 0, 0, width, height);
|
||||
|
||||
context.font = 'bold 64pt Quicksand';
|
||||
context.fillText(base, width / 2 - context.measureText(base).width / 2, 120);
|
||||
|
||||
for (let [column, key, icon] of [[0, 'masculine', '\uf222'], [1, 'feminine', '\uf221'], [2, 'neuter', '\uf22c']]) {
|
||||
context.font = 'regular 24pt FontAwesome';
|
||||
context.fillText(icon, column * (width - 2 * padding) / 3 + padding, 192);
|
||||
context.fillText(icon, column * (width - 2 * padding) / 3 + padding, padding * 1.5);
|
||||
|
||||
context.font = 'bold 24pt Quicksand';
|
||||
context.fillText(translations.nouns[key], column * (width - 2 * padding) / 3 + padding + 36, 192);
|
||||
context.fillText(translations.nouns[key], column * (width - 2 * padding) / 3 + padding + 36, padding * 1.5);
|
||||
}
|
||||
|
||||
context.font = 'regular 24pt Quicksand';
|
||||
|
@ -233,18 +220,22 @@ router.get('/nouns/:word.png', handleErrorAsync(async (req, res) => {
|
|||
let i = 0;
|
||||
for (let [key, symbol] of [['', '⋅'], ['Pl', '⁖']])
|
||||
noun[form + key].split('|').filter(x => x.length).forEach(part => {
|
||||
context.fillText(symbol + ' ' + part, column * (width - 2 * padding) / 3 + padding, 244 + i * 48);
|
||||
context.fillText(symbol + ' ' + part, column * (width - 2 * padding) / 3 + padding, padding * 2.5 + i * 48);
|
||||
i++;
|
||||
});
|
||||
})
|
||||
|
||||
context.fillStyle = '#C71585';
|
||||
context.font = 'regular 24pt FontAwesome';
|
||||
context.fillText('\uf02c', padding, height - padding);
|
||||
context.font = `regular 24pt Quicksand`;
|
||||
context.fillText(translations.title, padding + 48, height - padding - 4);
|
||||
context.font = 'regular 16pt FontAwesome';
|
||||
context.fillText('\uf02c', padding, height - padding + 12);
|
||||
context.font = `regular 16pt Quicksand`;
|
||||
context.fillText(
|
||||
translations.title + '/' + (global.config.nouns.routeMain || global.config.nouns.route),
|
||||
padding + 36,
|
||||
height - padding + 8
|
||||
);
|
||||
|
||||
return res.set('content-type', mime).send(canvas.toBuffer(mime));
|
||||
}));
|
||||
});
|
||||
|
||||
export default router;
|
||||
|
|
|
@ -414,7 +414,7 @@ router.get('/user/social/:provider', handleErrorAsync(async (req, res) => {
|
|||
}
|
||||
await saveAuthenticator(req.db, req.params.provider, dbUser, payload);
|
||||
|
||||
return res.cookie('token', token).redirect('/' + config.user.route);
|
||||
return res.cookie('token', token, cookieSettings).redirect('/' + config.user.route);
|
||||
}));
|
||||
|
||||
router.get('/user/social-connections', handleErrorAsync(async (req, res) => {
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
const inAYear = new Date();
|
||||
inAYear.setFullYear(inAYear.getFullYear() + 1);
|
||||
|
||||
export default {
|
||||
maxAge: 365 * 24 * 60 * 60,
|
||||
// secure: process.env.NODE_ENV === 'production',
|
||||
expires: inAYear,
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ class Jwt {
|
|||
this.publicKey = fs.readFileSync(publicKey);
|
||||
}
|
||||
|
||||
sign(payload, expiresIn = '30d') {
|
||||
sign(payload, expiresIn = '365d') {
|
||||
return jwt.sign(payload, this.privateKey, {
|
||||
expiresIn,
|
||||
algorithm: 'RS256',
|
||||
|
|
|
@ -2,12 +2,12 @@ module.exports = [
|
|||
['de', 'Deutsch', 'https://de.pronouns.page', true],
|
||||
['es', 'Español', 'https://es.pronouns.page', true],
|
||||
['en', 'English', 'https://en.pronouns.page', true],
|
||||
['fr', 'Français', 'https://fr.pronouns.page', false],
|
||||
['fr', 'Français', 'https://fr.pronouns.page', true],
|
||||
['nl', 'Nederlands', 'https://nl.pronouns.page', true],
|
||||
['no', 'Norsk (Bokmål)', 'https://no.pronouns.page', true],
|
||||
['pl', 'Polski', 'https://zaimki.pl', true],
|
||||
['pt', 'Português', 'https://pt.pronouns.page', true],
|
||||
['ru', 'Русский', 'https://ru.pronouns.page', false],
|
||||
// ['ru', 'Русский', 'https://ru.pronouns.page', false],
|
||||
['yi', 'ייִדיש', 'https://yi.pronouns.page', false],
|
||||
['zh', '中文', 'https://zh.pronouns.page', true],
|
||||
];
|
||||
|
|
Binary file not shown.
Reference in New Issue