Merge branch 'dev' of framagit.org:/les/gancio into feat/add_user_theme_view_controls

This commit is contained in:
sedum 2022-11-29 19:32:50 +01:00
commit 4993c6c1b9
31 changed files with 659 additions and 543 deletions

View file

@ -1,7 +1,7 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
### UNRELEASED ### UNRELEASED
- new plugin system - fix #17 - new plugin system - fix #177
- new "publish on telegram" plugin: (thanks @fadelkon) - new "publish on telegram" plugin: (thanks @fadelkon)
- i18n refactoring - i18n refactoring
- people can now choose the language displayed - fix #171 - people can now choose the language displayed - fix #171
@ -12,6 +12,8 @@ All notable changes to this project will be documented in this file.
- Wordpress plugin now supports MU installation - Wordpress plugin now supports MU installation
- add nominatim / openstreetmap feature (thanks @sedum) - add nominatim / openstreetmap feature (thanks @sedum)
- improve event import - improve event import
- new chinese translation
- new portuguese translation
- add Apple touch icon - fix #200 - add Apple touch icon - fix #200
- improve navbar layout - improve navbar layout
- improve event layout - improve event layout

View file

@ -22,6 +22,7 @@ v-container
v-data-table( v-data-table(
v-if='announcements.length' v-if='announcements.length'
:footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }' :footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }'
:header-props='{ sortIcon: mdiChevronDown }'
:headers='headers' :headers='headers'
:items='announcements') :items='announcements')
template(v-slot:item.actions='{ item }') template(v-slot:item.actions='{ item }')
@ -35,21 +36,21 @@ import { mapActions } from 'vuex'
import cloneDeep from 'lodash/cloneDeep' import cloneDeep from 'lodash/cloneDeep'
import Editor from '../Editor' import Editor from '../Editor'
import Announcement from '../Announcement' import Announcement from '../Announcement'
import { mdiPlus, mdiChevronRight, mdiChevronLeft } from '@mdi/js' import { mdiPlus, mdiChevronRight, mdiChevronLeft, mdiChevronDown } from '@mdi/js'
export default { export default {
components: { Editor, Announcement }, components: { Editor, Announcement },
data() { data() {
return { return {
mdiPlus, mdiChevronRight, mdiChevronLeft, mdiPlus, mdiChevronRight, mdiChevronLeft, mdiChevronDown,
valid: false, valid: false,
dialog: false, dialog: false,
editing: false, editing: false,
announcements: [], announcements: [],
loading: false, loading: false,
headers: [ headers: [
{ value: 'title', text: 'Title' }, { value: 'title', text: this.$t('common.title') },
{ value: 'actions', text: 'Actions', align: 'right' } { value: 'actions', text: this.$t('common.actions'), align: 'right' }
], ],
announcement: { title: '', announcement: '' } announcement: { title: '', announcement: '' }
} }

View file

@ -4,7 +4,7 @@ v-container
v-spacer v-spacer
v-text-field(v-model='search' v-text-field(v-model='search'
:append-icon='mdiMagnify' outlined rounded :append-icon='mdiMagnify' outlined rounded
label='Search' :label="$t('common.search')"
single-line hide-details) single-line hide-details)
v-card-subtitle(v-html="$t('admin.collections_description')") v-card-subtitle(v-html="$t('admin.collections_description')")
@ -75,6 +75,7 @@ v-container
:headers='filterHeaders' :headers='filterHeaders'
:items='filters' :items='filters'
:hide-default-footer='filters.length < 5' :hide-default-footer='filters.length < 5'
:header-props='{ sortIcon: mdiChevronDown }'
:footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }') :footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }')
template(v-slot:item.actions='{ item }') template(v-slot:item.actions='{ item }')
v-btn(@click='removeFilter(item)' color='error' icon) v-btn(@click='removeFilter(item)' color='error' icon)
@ -94,6 +95,7 @@ v-container
:headers='collectionHeaders' :headers='collectionHeaders'
:items='collections' :items='collections'
:hide-default-footer='collections.length < 5' :hide-default-footer='collections.length < 5'
:header-props='{ sortIcon: mdiChevronDown }'
:footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }' :footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }'
:search='search') :search='search')
template(v-slot:item.filters='{ item }') template(v-slot:item.filters='{ item }')
@ -108,12 +110,12 @@ v-container
<script> <script>
import get from 'lodash/get' import get from 'lodash/get'
import debounce from 'lodash/debounce' import debounce from 'lodash/debounce'
import { mdiPencil, mdiChevronLeft, mdiChevronRight, mdiMagnify, mdiPlus, mdiTagMultiple, mdiMapMarker, mdiDeleteForever, mdiCloseCircle } from '@mdi/js' import { mdiPencil, mdiChevronLeft, mdiChevronRight, mdiMagnify, mdiPlus, mdiTagMultiple, mdiMapMarker, mdiDeleteForever, mdiCloseCircle, mdiChevronDown } from '@mdi/js'
export default { export default {
data() { data() {
return { return {
mdiPencil, mdiChevronRight, mdiChevronLeft, mdiMagnify, mdiPlus, mdiTagMultiple, mdiMapMarker, mdiDeleteForever, mdiCloseCircle, mdiPencil, mdiChevronRight, mdiChevronLeft, mdiMagnify, mdiPlus, mdiTagMultiple, mdiMapMarker, mdiDeleteForever, mdiCloseCircle, mdiChevronDown,
loading: false, loading: false,
dialog: false, dialog: false,
valid: false, valid: false,
@ -128,14 +130,14 @@ export default {
tagName: '', tagName: '',
placeName: '', placeName: '',
collectionHeaders: [ collectionHeaders: [
{ value: 'name', text: 'Name' }, { value: 'name', text: this.$t('common.name') },
{ value: 'filters', text: 'Filters' }, { value: 'filters', text: this.$t('common.filter') },
{ value: 'actions', text: 'Actions', align: 'right' } { value: 'actions', text: this.$t('common.actions'), align: 'right' }
], ],
filterHeaders: [ filterHeaders: [
{ value: 'tags', text: 'Tags' }, { value: 'tags', text: this.$t('common.tags') },
{ value: 'places', text: 'Places' }, { value: 'places', text: this.$t('common.places') },
{ value: 'actions', text: 'Actions', align: 'right' } { value: 'actions', text: this.$t('common.actions'), align: 'right' }
] ]
} }
}, },

View file

@ -5,6 +5,7 @@ v-container
v-card-text v-card-text
v-data-table( v-data-table(
:hide-default-footer='unconfirmedEvents.length<10' :hide-default-footer='unconfirmedEvents.length<10'
:header-props='{ sortIcon: mdiChevronDown }'
:footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }' :footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }'
:items='unconfirmedEvents' :items='unconfirmedEvents'
:headers='headers') :headers='headers')
@ -17,7 +18,7 @@ v-container
color='error') {{$t('common.delete')}} color='error') {{$t('common.delete')}}
</template> </template>
<script> <script>
import { mdiChevronLeft, mdiChevronRight } from '@mdi/js' import { mdiChevronLeft, mdiChevronRight, mdiChevronDown } from '@mdi/js'
export default { export default {
props: { props: {
@ -25,15 +26,15 @@ export default {
}, },
data () { data () {
return { return {
mdiChevronLeft, mdiChevronRight, mdiChevronLeft, mdiChevronRight, mdiChevronDown,
valid: false, valid: false,
dialog: false, dialog: false,
editing: false, editing: false,
headers: [ headers: [
{ value: 'title', text: 'Title' }, { value: 'title', text: this.$t('common.title') },
{ value: 'place.name', text: 'Place' }, { value: 'place.name', text: this.$t('common.place') },
{ value: 'when', text: 'When' }, { value: 'when', text: this.$t('common.when') },
{ value: 'actions', text: 'Actions', align: 'right' } { value: 'actions', text: this.$t('common.actions'), align: 'right' }
] ]
} }
}, },

View file

@ -68,6 +68,7 @@ v-container
v-if='settings.trusted_instances.length' v-if='settings.trusted_instances.length'
:hide-default-footer='settings.trusted_instances.length<10' :hide-default-footer='settings.trusted_instances.length<10'
:footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }' :footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }'
:header-props='{ sortIcon: mdiChevronDown }'
:headers='headers' :headers='headers'
:items='settings.trusted_instances') :items='settings.trusted_instances')
template(v-slot:item.actions="{item}") template(v-slot:item.actions="{item}")
@ -79,13 +80,13 @@ v-container
import { mapActions, mapState } from 'vuex' import { mapActions, mapState } from 'vuex'
import get from 'lodash/get' import get from 'lodash/get'
import axios from 'axios' import axios from 'axios'
import { mdiDeleteForever, mdiPlus, mdiChevronLeft, mdiChevronRight } from '@mdi/js' import { mdiDeleteForever, mdiPlus, mdiChevronLeft, mdiChevronRight, mdiChevronDown } from '@mdi/js'
export default { export default {
name: 'Federation', name: 'Federation',
data ({ $store, $options }) { data ({ $store, $options }) {
return { return {
mdiDeleteForever, mdiPlus, mdiChevronLeft, mdiChevronRight, mdiDeleteForever, mdiPlus, mdiChevronLeft, mdiChevronRight, mdiChevronDown,
instance_url: '', instance_url: '',
instance_name: $store.state.settings.instance_name, instance_name: $store.state.settings.instance_name,
instance_place: $store.state.settings.instance_place, instance_place: $store.state.settings.instance_place,

View file

@ -10,6 +10,7 @@ v-container
:items-per-page='5' :items-per-page='5'
:search='instancesFilter' :search='instancesFilter'
:hide-default-footer='instances.length<5' :hide-default-footer='instances.length<5'
:header-props='{ sortIcon: mdiChevronDown }'
:footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }' :footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }'
dense :headers='instancesHeader' dense :headers='instancesHeader'
@click:row='instanceSelected') @click:row='instanceSelected')
@ -24,6 +25,7 @@ v-container
:search='usersFilter' :search='usersFilter'
:hide-default-footer='users.length<5' :hide-default-footer='users.length<5'
:footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }' :footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }'
:header-props='{ sortIcon: mdiChevronDown }'
dense :headers='usersHeader') dense :headers='usersHeader')
template(v-slot:item.blocked="{ item }") template(v-slot:item.blocked="{ item }")
v-icon(@click='toggleUserBlock(item)' v-text='item.blocked ? mdiCheckboxIntermediate : mdiCheckboxBlankOutline') v-icon(@click='toggleUserBlock(item)' v-text='item.blocked ? mdiCheckboxIntermediate : mdiCheckboxBlankOutline')
@ -34,6 +36,7 @@ v-container
:headers='resourcesHeader' :headers='resourcesHeader'
:hide-default-footer='resources.length<10' :hide-default-footer='resources.length<10'
:items-per-page='10' :items-per-page='10'
:header-props='{ sortIcon: mdiChevronDown }'
:footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }') :footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }')
template(v-slot:item.content='{ item }') template(v-slot:item.content='{ item }')
span(v-html='item.data.content') span(v-html='item.data.content')
@ -62,33 +65,33 @@ v-container
import { mapState, mapActions } from 'vuex' import { mapState, mapActions } from 'vuex'
import get from 'lodash/get' import get from 'lodash/get'
import { mdiDelete, mdiEye, mdiEyeOff, mdiDotsVertical, mdiCheckboxIntermediate, import { mdiDelete, mdiEye, mdiEyeOff, mdiDotsVertical, mdiCheckboxIntermediate,
mdiCheckboxBlankOutline, mdiChevronLeft, mdiChevronRight } from '@mdi/js' mdiCheckboxBlankOutline, mdiChevronLeft, mdiChevronRight, mdiChevronDown } from '@mdi/js'
export default { export default {
name: 'Moderation', name: 'Moderation',
data () { data () {
return { return {
mdiDelete, mdiEye, mdiEyeOff, mdiDotsVertical, mdiCheckboxIntermediate, mdiDelete, mdiEye, mdiEyeOff, mdiDotsVertical, mdiCheckboxIntermediate,
mdiCheckboxBlankOutline, mdiChevronLeft, mdiChevronRight, mdiCheckboxBlankOutline, mdiChevronLeft, mdiChevronRight, mdiChevronDown,
instances: [], instances: [],
resources: [], resources: [],
users: [], users: [],
usersHeader: [ usersHeader: [
{ value: 'object.preferredUsername', text: 'Name' }, { value: 'object.preferredUsername', text: this.$t('common.name') },
{ value: 'blocked', text: 'Blocked' } { value: 'blocked', text: this.$t('admin.blocked') }
], ],
instancesHeader: [ instancesHeader: [
{ value: 'domain', text: 'Domain' }, { value: 'domain', text: this.$t('admin.domain') },
{ value: 'name', text: 'Name' }, { value: 'name', text: this.$t('common.name') },
{ value: 'blocked', text: 'Blocked' }, { value: 'blocked', text: this.$t('admin.blocked') },
{ value: 'users', text: 'known users' } { value: 'users', text: this.$t('admin.known_users') }
], ],
resourcesHeader: [ resourcesHeader: [
{ value: 'created', text: 'Created' }, { value: 'created', text: this.$t('admin.created_at') },
{ value: 'event', text: 'Event' }, { value: 'event', text: this.$t('common.event') },
{ value: 'user', text: 'user' }, { value: 'user', text: this.$t('common.user') },
{ value: 'content', text: 'Content' }, { value: 'content', text: this.$t('common.content') },
{ value: 'actions', text: 'Actions' } { value: 'actions', text: this.$t('common.actions') }
], ],
usersFilter: '', usersFilter: '',
instancesFilter: '' instancesFilter: ''

View file

@ -4,7 +4,7 @@ v-container
v-spacer v-spacer
v-text-field(v-model='search' v-text-field(v-model='search'
:append-icon='mdiMagnify' outlined rounded :append-icon='mdiMagnify' outlined rounded
label='Search' :label="$t('common.search')"
single-line hide-details) single-line hide-details)
v-card-subtitle(v-html="$t('admin.place_description')") v-card-subtitle(v-html="$t('admin.place_description')")
@ -49,6 +49,7 @@ v-container
:headers='headers' :headers='headers'
:items='places' :items='places'
:hide-default-footer='places.length < 5' :hide-default-footer='places.length < 5'
:header-props='{ sortIcon: mdiChevronDown }'
:footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }' :footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }'
:search='search') :search='search')
template(v-slot:item.map='{ item }') template(v-slot:item.map='{ item }')
@ -61,7 +62,7 @@ v-container
</template> </template>
<script> <script>
import { mdiPencil, mdiChevronLeft, mdiChevronRight, mdiMagnify, mdiEye, mdiMapSearch } from '@mdi/js' import { mdiPencil, mdiChevronLeft, mdiChevronRight, mdiMagnify, mdiEye, mdiMapSearch, mdiChevronDown } from '@mdi/js'
import { mapState } from 'vuex' import { mapState } from 'vuex'
import debounce from 'lodash/debounce' import debounce from 'lodash/debounce'
import get from 'lodash/get' import get from 'lodash/get'
@ -69,7 +70,7 @@ import get from 'lodash/get'
export default { export default {
data() { data() {
return { return {
mdiPencil, mdiChevronRight, mdiChevronLeft, mdiMagnify, mdiEye, mdiMapSearch, mdiPencil, mdiChevronRight, mdiChevronLeft, mdiMagnify, mdiEye, mdiMapSearch, mdiChevronDown,
loading: false, loading: false,
dialog: false, dialog: false,
valid: false, valid: false,
@ -79,10 +80,10 @@ export default {
search: '', search: '',
place: { name: '', address: '', id: null }, place: { name: '', address: '', id: null },
headers: [ headers: [
{ value: 'name', text: 'Name' }, { value: 'name', text: this.$t('common.name') },
{ value: 'address', text: 'Address' }, { value: 'address', text: this.$t('common.address') },
{ value: 'map', text: 'Map' }, { value: 'map', text: 'Map' },
{ value: 'actions', text: 'Actions', align: 'right' } { value: 'actions', text: this.$t('common.actions'), align: 'right' }
] ]
} }
}, },

View file

@ -4,7 +4,7 @@ v-container
v-spacer v-spacer
v-text-field(v-model='search' v-text-field(v-model='search'
:append-icon='mdiMagnify' outlined rounded :append-icon='mdiMagnify' outlined rounded
label='Search' :label="$t('common.search')"
single-line hide-details) single-line hide-details)
v-btn(color='primary' text @click='newUserDialog = true') <v-icon v-text='mdiPlus'></v-icon> {{$t('common.new_user')}} v-btn(color='primary' text @click='newUserDialog = true') <v-icon v-text='mdiPlus'></v-icon> {{$t('common.new_user')}}
@ -32,6 +32,7 @@ v-container
:headers='headers' :headers='headers'
:items='users' :items='users'
:hide-default-footer='users.length<5' :hide-default-footer='users.length<5'
:header-props='{ sortIcon: mdiChevronDown }'
:footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }' :footer-props='{ prevIcon: mdiChevronLeft, nextIcon: mdiChevronRight }'
:search='search') :search='search')
template(v-slot:item.is_active='{item}') template(v-slot:item.is_active='{item}')
@ -49,7 +50,7 @@ v-container
<script> <script>
import { mapState } from 'vuex' import { mapState } from 'vuex'
import get from 'lodash/get' import get from 'lodash/get'
import { mdiClose, mdiMagnify, mdiCheck, mdiPlus, mdiInformation, mdiChevronLeft, mdiChevronRight } from '@mdi/js' import { mdiClose, mdiMagnify, mdiCheck, mdiPlus, mdiInformation, mdiChevronLeft, mdiChevronRight, mdiChevronDown } from '@mdi/js'
export default { export default {
name: 'Users', name: 'Users',
@ -58,7 +59,7 @@ export default {
}, },
data () { data () {
return { return {
mdiClose, mdiMagnify, mdiCheck, mdiPlus, mdiInformation, mdiChevronLeft, mdiChevronRight, mdiClose, mdiMagnify, mdiCheck, mdiPlus, mdiInformation, mdiChevronLeft, mdiChevronRight, mdiChevronDown,
newUserDialog: false, newUserDialog: false,
valid: false, valid: false,
new_user: { new_user: {
@ -67,10 +68,10 @@ export default {
}, },
search: '', search: '',
headers: [ headers: [
{ value: 'email', text: 'Email' }, { value: 'email', text: this.$t('common.email') },
{ value: 'description', text: 'Description' }, { value: 'description', text: this.$t('common.description') },
{ value: 'is_active', text: 'Active' }, { value: 'is_active', text: 'Active' },
{ value: 'actions', text: 'Actions', align: 'right' } { value: 'actions', text: this.$t('common.actions'), align: 'right' }
] ]
} }
}, },

View file

@ -3,7 +3,7 @@ span
v-list(dense nav) v-list(dense nav)
v-list-group(:append-icon='mdiChevronUp' :value='true') v-list-group(:append-icon='mdiChevronUp' :value='true')
template(v-slot:activator) template(v-slot:activator)
v-list-item.text-overline Admin actions v-list-item.text-overline {{$t('common.admin_actions')}}
//- Hide / confirm event //- Hide / confirm event
v-list-item(@click='toggle(false)') v-list-item(@click='toggle(false)')
@ -29,7 +29,7 @@ span
template(v-if='event.parentId') template(v-if='event.parentId')
v-list-item.text-overline Recurring event actions <a href="https://gancio.org/">?</a> v-list-item.text-overline(v-html="$t('common.recurring_event_actions')")
//- Pause / Start to generate recurring event //- Pause / Start to generate recurring event
v-list-item(@click='toggle(true)') v-list-item(@click='toggle(true)')

View file

@ -93,7 +93,12 @@
"show_map": "Mostra el mapa", "show_map": "Mostra el mapa",
"latitude": "Latitud", "latitude": "Latitud",
"longitude": "Longitud", "longitude": "Longitud",
"getting_there": "Com arribar" "getting_there": "Com arribar",
"plugins": "Complements",
"home": "Inici",
"help_translate": "Ajuda amb la traducció",
"calendar": "Calendari",
"about": "Sobre aquesta agenda"
}, },
"login": { "login": {
"description": "Amb la sessió iniciada pots afegir activitats noves.", "description": "Amb la sessió iniciada pots afegir activitats noves.",
@ -159,7 +164,7 @@
"from": "Des de les", "from": "Des de les",
"image_too_big": "La imatge és massa gran! Max 4 MB", "image_too_big": "La imatge és massa gran! Max 4 MB",
"interact_with_me_at": "Interacciona amb mi a", "interact_with_me_at": "Interacciona amb mi a",
"follow_me_description": "Entre les diverses maneres d'estar al dia de les activitats que es publiquen aquí a {title},\n pots seguir-nos al compte <u>{account}</u> des de Mastodon o altres, i afegir recursos des d'allà. <br/> <br/>\nSi no has sentit mai sobre «Mastodon» o «Fedivers», recomanem fer un cop d'ull a <a href='https://equipamentslliures.cat/divulgacio/fediverse'>aquesta breu introducció al Fedivers</a>. <br/> <br/> Introdueix la teva instància a sota (ex: kolektiva.social o mastodont.cat)", "follow_me_description": "Entre les diverses maneres d'estar al dia de les activitats que es publiquen aquí a {title},\npots seguir-nos al compte <u>{account}</u> des de Mastodon o altres, i afegir recursos des d'allà. <br/> <br/>\nSi no has sentit mai sobre «Mastodon» o «Fedivers», recomanem fer un cop d'ull a <a href='https://framatube.org/w/9dRFC6Ya11NCVeYKn8ZhiD'>aquest vídeo introductori</a> i llegir-ne més a <a href='https://fedi.cat/fediverse'>aquest portal en català</a>. <br/> <br/> Introdueix la teva instància a sota (ex: kolektiva.social, mastodont.cat, ...)",
"interact_with_me": "Segueix-nos al fedivers", "interact_with_me": "Segueix-nos al fedivers",
"remove_recurrent_confirmation": "Estàs segur/a d'esborrar aquesta activitat periòdica?\nNo s'esborraran les ocurrències antigues, només es deixaran de crear les futures.", "remove_recurrent_confirmation": "Estàs segur/a d'esborrar aquesta activitat periòdica?\nNo s'esborraran les ocurrències antigues, només es deixaran de crear les futures.",
"ics": "ICS", "ics": "ICS",
@ -172,7 +177,9 @@
"remove_media_confirmation": "Confirmeu l'eliminació de la imatge?", "remove_media_confirmation": "Confirmeu l'eliminació de la imatge?",
"download_flyer": "Baixa el flyer", "download_flyer": "Baixa el flyer",
"alt_text_description": "Descripció per a persones amb discapacitat visual", "alt_text_description": "Descripció per a persones amb discapacitat visual",
"choose_focal_point": "Tria el punt focal" "choose_focal_point": "Tria el punt focal",
"address_description": "Quina és l'adreça completa del lloc?",
"address_description_osm": "Quina és l'adreça completa del lloc? (gràcies a la comunitat d'<a href='http://osm.org/copyright'>OpenStreetMap</a>)"
}, },
"admin": { "admin": {
"place_description": "En el cas que un lloc és incorrecte o l'adreça ha de canviar, pots arreglar-ho.<br/>Tingues en compte que totes les activitats passades i futures associades amb aquest lloc també canviaran d'adreça.", "place_description": "En el cas que un lloc és incorrecte o l'adreça ha de canviar, pots arreglar-ho.<br/>Tingues en compte que totes les activitats passades i futures associades amb aquest lloc també canviaran d'adreça.",
@ -223,8 +230,8 @@
"enable_trusted_instances": "Mostra les instàncies amigues", "enable_trusted_instances": "Mostra les instàncies amigues",
"trusted_instances_help": "Les instàncies amigues apareixen en la capçalera, a la barra de navegació superior", "trusted_instances_help": "Les instàncies amigues apareixen en la capçalera, a la barra de navegació superior",
"trusted_instances_label": "Etiqueta de navegació a instàncies amigues", "trusted_instances_label": "Etiqueta de navegació a instàncies amigues",
"trusted_instances_label_default": "Instàncies amigables", "trusted_instances_label_default": "Instàncies amigues",
"trusted_instances_label_help": "L'etiqueta per defecte és 'Instàncies amigables'", "trusted_instances_label_help": "L'etiqueta per defecte és 'Instàncies amigues'",
"add_trusted_instance": "Afegeix una instància amiga", "add_trusted_instance": "Afegeix una instància amiga",
"instance_place_help": "L'etiqueta per mostrar al menú de les altres instàncies amigues", "instance_place_help": "L'etiqueta per mostrar al menú de les altres instàncies amigues",
"delete_trusted_instance_confirm": "Segur que vols eliminar aquest element del menú d'instàncies amigues?", "delete_trusted_instance_confirm": "Segur que vols eliminar aquest element del menú d'instàncies amigues?",
@ -249,7 +256,7 @@
"new_blob": "Nou blob", "new_blob": "Nou blob",
"blobs_description": "Els blobs són agrupacions d'activitats per etiquetes i llocs. Es mostren a la pàgina principal", "blobs_description": "Els blobs són agrupacions d'activitats per etiquetes i llocs. Es mostren a la pàgina principal",
"edit_blob": "Edita el blob", "edit_blob": "Edita el blob",
"enable_admin_user_confirm": "N'estàs segur que vols donar drets d'administrador a {user}?", "enable_admin_user_confirm": "N'estàs segur/a de donar drets d'administració a {user}?",
"smtp_port": "Port SMTP", "smtp_port": "Port SMTP",
"smtp_use_sendmail": "Utilitza sendmail", "smtp_use_sendmail": "Utilitza sendmail",
"new_collection": "Col·lecció nova", "new_collection": "Col·lecció nova",
@ -257,7 +264,13 @@
"disable_admin_user_confirm": "N'estàs segur de suprimir els permisos d'administrador de {usuari}?", "disable_admin_user_confirm": "N'estàs segur de suprimir els permisos d'administrador de {usuari}?",
"collections_description": "Les col·leccions són agrupacions d'esdeveniments per etiquetes i llocs. Es mostraran a la pàgina d'inici", "collections_description": "Les col·leccions són agrupacions d'esdeveniments per etiquetes i llocs. Es mostraran a la pàgina d'inici",
"smtp_secure": "SMTP segur (TLS o STARTTLS)", "smtp_secure": "SMTP segur (TLS o STARTTLS)",
"sender_email": "Correu remitent" "sender_email": "Correu remitent",
"hide_thumbs": "Amaga les miniatures dels cartells",
"hide_calendar": "Amaga el calendari",
"fallback_image": "Cartell per defecte",
"config_plugin": "Configura el complement",
"header_image": "Imatge de capçalera",
"default_images": "Cartell per defecte"
}, },
"auth": { "auth": {
"not_confirmed": "Encara no s'ha confirmat…", "not_confirmed": "Encara no s'ha confirmat…",

View file

@ -92,7 +92,12 @@
"show_map": "Karte anzeigen", "show_map": "Karte anzeigen",
"latitude": "Breite", "latitude": "Breite",
"longitude": "Länge", "longitude": "Länge",
"getting_there": "Anreise" "getting_there": "Anreise",
"calendar": "Kalender",
"home": "Startseite",
"about": "Über",
"plugins": "Plugins",
"help_translate": "Hilf beim Übersetzen mit"
}, },
"admin": { "admin": {
"delete_footer_link_confirm": "Möchtest du diesen Link löschen?", "delete_footer_link_confirm": "Möchtest du diesen Link löschen?",
@ -124,7 +129,7 @@
"wrong_domain_warning": "Die \"baseurl\" die in config.json konfiguriert ist <b>({baseurl})</b> unterscheidet sich von derjenigen <b>({url})</b> die du besuchst", "wrong_domain_warning": "Die \"baseurl\" die in config.json konfiguriert ist <b>({baseurl})</b> unterscheidet sich von derjenigen <b>({url})</b> die du besuchst",
"instance_place_help": "Diese Textzeile wird im Menü der anderen befreundeten Instanzen angezeigt", "instance_place_help": "Diese Textzeile wird im Menü der anderen befreundeten Instanzen angezeigt",
"place_description": "Falls ein Ort falsch ist oder sich die Adresse ändert, kannst du ihn ändern.<br/>Bitte beachte, dass alle Veranstaltungen, die mit diesem Ort verbunden sind, die Adresse ändern (auch zurückliegende).", "place_description": "Falls ein Ort falsch ist oder sich die Adresse ändert, kannst du ihn ändern.<br/>Bitte beachte, dass alle Veranstaltungen, die mit diesem Ort verbunden sind, die Adresse ändern (auch zurückliegende).",
"enable_admin_user_confirm": "Achte darauf, dass du der nutzenden Person {user} Admin-Rechte hinzufügst", "enable_admin_user_confirm": "Achte darauf, dass du der nutzenden Person {user} Admin-Rechte hinzufügst?",
"trusted_instances_help": "Befreundete Instanzen werden in der Navigationsleiste oben auf der Seite angezeigt", "trusted_instances_help": "Befreundete Instanzen werden in der Navigationsleiste oben auf der Seite angezeigt",
"trusted_instances_label": "Navigationsbezeichnung zu Friend-Instanzen", "trusted_instances_label": "Navigationsbezeichnung zu Friend-Instanzen",
"trusted_instances_label_default": "Freundliche Instanzen", "trusted_instances_label_default": "Freundliche Instanzen",
@ -173,7 +178,13 @@
"smtp_hostname": "SMTP-Hostname", "smtp_hostname": "SMTP-Hostname",
"smtp_description": "<ul><li>Der Admin erhält eine E-Mail, wenn ein anonymes Ereignis hinzugefügt wird (falls aktiviert).</li><li>Der Admin erhält E-Mails mit der Aufforderung zur Registrierung (falls aktiviert).</li><li>Die nutzenden Personen erhalten eine E-Mail zur Bestätigung der angeforderten Registrierung.</li><li>Die nutzenden Personen erhalten eine E-Mail mit der Anmeldebestätigung.</li><li>Nutzende Personen erhalten eine E-Mail-Benachrichtigung, wenn sie direkt vom Admin registriert werden.</li><li>Nutzende Personen erhalten eine E-Mail, um ihr Passwort zu ändern, wenn sie es vergessen haben</li></ul>", "smtp_description": "<ul><li>Der Admin erhält eine E-Mail, wenn ein anonymes Ereignis hinzugefügt wird (falls aktiviert).</li><li>Der Admin erhält E-Mails mit der Aufforderung zur Registrierung (falls aktiviert).</li><li>Die nutzenden Personen erhalten eine E-Mail zur Bestätigung der angeforderten Registrierung.</li><li>Die nutzenden Personen erhalten eine E-Mail mit der Anmeldebestätigung.</li><li>Nutzende Personen erhalten eine E-Mail-Benachrichtigung, wenn sie direkt vom Admin registriert werden.</li><li>Nutzende Personen erhalten eine E-Mail, um ihr Passwort zu ändern, wenn sie es vergessen haben</li></ul>",
"smtp_test_button": "Versenden einer Test-E-Mail", "smtp_test_button": "Versenden einer Test-E-Mail",
"smtp_test_success": "Eine Test-E-Mail wurde an {admin_email} gesendet, überprüfe deine Mailbox" "smtp_test_success": "Eine Test-E-Mail wurde an {admin_email} gesendet, überprüfe deine Mailbox",
"fallback_image": "Ersatzbild",
"header_image": "Bild der Überschrift",
"default_images": "Standard Bilder",
"config_plugin": "Plugin Konfiguration",
"hide_thumbs": "Vorschaubilder ausblenden",
"hide_calendar": "Kalender verstecken"
}, },
"settings": { "settings": {
"update_confirm": "Willst du deine Änderung speichern?", "update_confirm": "Willst du deine Änderung speichern?",
@ -242,7 +253,7 @@
"follow_me_description": "Eine Möglichkeit, über die hier auf {title} veröffentlichten Veranstaltungen auf dem Laufenden zu bleiben, besteht darin, dem Account <u>{account}</u> aus dem Fediverse zu folgen, zum Beispiel über Mastodon, und von dort aus eventuell Ressourcen für eine Veranstaltung hinzuzufügen.<br/><br/>\nWenn Du noch nie von Mastodon und dem Fediverse gehört hast, empfehlen wir dir, diesen Artikel <a href='https://www.savjee.be/videos/simply-explained/mastodon-and-fediverse-explained/'> zu lesen</a>.<br/><br/>Gib unten deine Instanz ein (z.B. mastodon.social)", "follow_me_description": "Eine Möglichkeit, über die hier auf {title} veröffentlichten Veranstaltungen auf dem Laufenden zu bleiben, besteht darin, dem Account <u>{account}</u> aus dem Fediverse zu folgen, zum Beispiel über Mastodon, und von dort aus eventuell Ressourcen für eine Veranstaltung hinzuzufügen.<br/><br/>\nWenn Du noch nie von Mastodon und dem Fediverse gehört hast, empfehlen wir dir, diesen Artikel <a href='https://www.savjee.be/videos/simply-explained/mastodon-and-fediverse-explained/'> zu lesen</a>.<br/><br/>Gib unten deine Instanz ein (z.B. mastodon.social)",
"media_description": "Du kannst (optional) einen Flyer hinzufügen", "media_description": "Du kannst (optional) einen Flyer hinzufügen",
"edit_recurrent": "Bearbeite eine sich wiederholende Veranstaltung :", "edit_recurrent": "Bearbeite eine sich wiederholende Veranstaltung :",
"show_recurrent": "regelmäßige Veranstaltungen", "show_recurrent": "wiederkehrende Termine",
"show_past": "auch ältere Veranstaltungen", "show_past": "auch ältere Veranstaltungen",
"only_future": "nur zukünftige Veranstaltungen", "only_future": "nur zukünftige Veranstaltungen",
"recurrent_description": "Wähle die Häufigkeit und Tage aus", "recurrent_description": "Wähle die Häufigkeit und Tage aus",
@ -253,10 +264,10 @@
"recurrent_1w_days": "Jeden {days}", "recurrent_1w_days": "Jeden {days}",
"recurrent_2w_days": "Jeden zweiten {days} eine", "recurrent_2w_days": "Jeden zweiten {days} eine",
"recurrent_1m_days": "Der {days} in jedem Monat", "recurrent_1m_days": "Der {days} in jedem Monat",
"recurrent_2m_days": "Jeder {days} im Monat", "recurrent_2m_days": "Der {days} jeden zweiten Monat",
"recurrent_1m_ordinal": "Jeden {n} {days} im Monat", "recurrent_1m_ordinal": "Jeden {n} {days} im Monat",
"each_week": "Jede Woche", "each_week": "Jede Woche",
"recurrent_2m_ordinal": "Jeden {n} {days} im Monat", "recurrent_2m_ordinal": "Der {n} {days} jeden zweiten Monat",
"each_month": "Jeden Monat", "each_month": "Jeden Monat",
"due": "bis", "due": "bis",
"from": "von", "from": "von",
@ -266,7 +277,9 @@
"download_flyer": "Lade den Flyer herunter", "download_flyer": "Lade den Flyer herunter",
"remove_media_confirmation": "Möchtest du das Bild löschen?", "remove_media_confirmation": "Möchtest du das Bild löschen?",
"alt_text_description": "Beschreibung für Menschen mit Sehbehinderungen", "alt_text_description": "Beschreibung für Menschen mit Sehbehinderungen",
"choose_focal_point": "Auswahl des Schwerpunkts" "choose_focal_point": "Auswahl des Schwerpunkts",
"address_description": "Was ist die Adresse?",
"address_description_osm": "Wo ist die Adresse? (<a href='http://osm.org/copyright'>OpenStreetMap</a> contributors)"
}, },
"register": { "register": {
"first_user": "Admin erstellt", "first_user": "Admin erstellt",

View file

@ -4,26 +4,26 @@
"content": "Recebemos o pedido de registo. Vamos confirmar assim que possível." "content": "Recebemos o pedido de registo. Vamos confirmar assim que possível."
}, },
"confirm": { "confirm": {
"content": "Olá, sua conta em <a href='{{config.baseurl}}'>{{config.title}}</a> foi confirmada. Escreve-nos para {{config.admin_email}} para qualquer informação.", "content": "Olá, sua conta em <a href='{{config.baseurl}}'>{{config.title}}</a> foi confirmada. Escreva para {{config.admin_email}} para obter qualquer informação.",
"subject": "Agora podes começar a publicar eventos" "subject": "Você pode agora começar a publicar eventos"
}, },
"event_confirm": { "event_confirm": {
"content": "Podes confirmar este evento em <a href='{{url}}'>esta página</a>" "content": "Você pode confirmar este evento <a href='{{url}}'>nesta página</a>"
}, },
"test": { "test": {
"subject": "Sua configuração SMTP está a funcionar", "subject": "Sua configuração SMTP está funcionando",
"content": "Este é um e-mail de teste, se estiveres a ler isto, a tua configuração está a funcionar." "content": "Este é um e-mail de teste, se estiver lendo isto, sua configuração está funcionando."
}, },
"user_confirm": { "user_confirm": {
"subject": "Agora podes começar a publicar eventos", "subject": "Você pode agora começar a publicar eventos",
"content": "Olá, sua conta em <a href='{{config.baseurl}}'>{{config.title}}</a> foi criada. <a href='{{config.baseurl}}/user_confirm/{{user.recover_code}}'>Confirme e escolha uma senha.</a>." "content": "Olá, sua conta em <a href='{{config.baseurl}}'>{{config.title}}</a> foi criada. <a href='{{config.baseurl}}/user_confirm/{{user.recover_code}}'>Confirme e escolha uma senha.</a>."
}, },
"admin_register": { "admin_register": {
"subject": "Novo registro", "subject": "Novo registro",
"content": "{{user.email}} pediu o registro em {{config.title}}: <br/><pre>{{user.description}}</pre><br/> Confirme <a href='{{ config.baseurl}}/admin'>aqui</a>." "content": "{{user.email}} pediu o registro em {{config.title}}: <br/><pre>{{user.description}}</pre><br/> Confirme <a href='{{config.baseurl}}/admin'>aqui</a>."
}, },
"recover": { "recover": {
"subject": "Recuperação de senha", "subject": "Recuperação de senha",
"content": "Olá, pediste a recuperação da tua senha em {{config.title}}. <a href='{{config.baseurl}}/recover/{{user.recover_code}}'>Clique aqui</a> para confirmar." "content": "Olá, você solicitou a recuperação de sua senha em {{config.title}}. <a href='{{config.baseurl}}/recover/{{user.recover_code}}'>Clique aqui</a> para confirmar."
} }
} }

View file

@ -94,7 +94,10 @@
"show_map": "Show map", "show_map": "Show map",
"calendar": "Calendar", "calendar": "Calendar",
"home": "Home", "home": "Home",
"about": "About" "about": "About",
"content": "Content",
"admin_actions": "Admin actions",
"recurring_event_actions": "Recurring event actions"
}, },
"login": { "login": {
"description": "By logging in you can publish new events.", "description": "By logging in you can publish new events.",
@ -183,7 +186,7 @@
"disable_user_confirm": "Are you sure you want to disable {user}?", "disable_user_confirm": "Are you sure you want to disable {user}?",
"delete_user_confirm": "Are you sure you want to remove {user}?", "delete_user_confirm": "Are you sure you want to remove {user}?",
"disable_admin_user_confirm": "Are you sure to remove admin permissions from {user}?", "disable_admin_user_confirm": "Are you sure to remove admin permissions from {user}?",
"enable_admin_user_confirm": "Are sure to add admin permissions to {user}", "enable_admin_user_confirm": "Are you sure to add admin permissions to {user}?",
"user_remove_ok": "User removed", "user_remove_ok": "User removed",
"user_create_ok": "User created", "user_create_ok": "User created",
"event_remove_ok": "Event removed", "event_remove_ok": "Event removed",
@ -261,7 +264,11 @@
"header_image": "Header image", "header_image": "Header image",
"hide_thumbs": "Hide thumbs", "hide_thumbs": "Hide thumbs",
"hide_calendar": "Hide calendar", "hide_calendar": "Hide calendar",
"default_images": "Default images" "default_images": "Default images",
"blocked": "Blocked",
"domain": "Domain",
"known_users": "Known users",
"created_at": "Created at"
}, },
"auth": { "auth": {
"not_confirmed": "Not confirmed yet…", "not_confirmed": "Not confirmed yet…",

View file

@ -91,7 +91,14 @@
"show_map": "Mostrar mapa", "show_map": "Mostrar mapa",
"latitude": "Latitud", "latitude": "Latitud",
"longitude": "Longitud", "longitude": "Longitud",
"getting_there": "Cómo llegar" "getting_there": "Cómo llegar",
"collections": "Colecciones",
"plugins": "Complementos",
"home": "Página principal",
"about": "Sobre el sitio",
"close": "Cerrar",
"help_translate": "Ayuda a traducir",
"calendar": "Calendario"
}, },
"login": { "login": {
"description": "Entrando podrás publicar nuevos eventos.", "description": "Entrando podrás publicar nuevos eventos.",
@ -106,7 +113,7 @@
"not_valid_code": "Mmmmm algo no salió bien..." "not_valid_code": "Mmmmm algo no salió bien..."
}, },
"export": { "export": {
"intro": "A diferencia de las plataformas del capitalismo, que hacen todo lo posible para mantener datos y usuarios dentro de ellas, creemos las informaciones, así como las personas, deben ser libres. Para ello, puedes mantenerte enterado sobre los eventos que te interesan como mejor te parezca, sin necesariamente tener que pasar por este sitio.", "intro": "A diferencia de las plataformas antisociales, que hacen todo lo posible para mantener datos y usuarios dentro de ellas, creemos que la información, así como las personas, debe ser libre. Por este motivo, puedes mantenerte enterado sobre los eventos que te interesan como mejor te parezca, sin necesariamente tener que pasar por este sitio.",
"email_description": "Puedes recibir por mail los eventos que te interesan.", "email_description": "Puedes recibir por mail los eventos que te interesan.",
"insert_your_address": "Casilla de correo", "insert_your_address": "Casilla de correo",
"feed_description": "Para seguir las actualizaciones desde un ordenador o teléfono inteligente sin la necesidad de abrir periódicamente el sitio, el método recomendado es usar los feeds RSS.</p>\n\n<p>Con rss feeds, utilizas una aplicación especial para recibir actualizaciones de los sitios que más te interesan, como por ejemplo éste. Es una buena manera de seguir muchos sitios muy rápidamente, sin la necesidad de crear una cuenta u otras complicaciones.</p>\n\n<li>Si tienes Android, te sugerimos <a href=\"https://f-droid.org/es/packages/com.nononsenseapps.feeder/\">Feeder</a> o Feeder</li>\n<li>Para iPhone/iPad puedes usar <a href=\"https://itunes.apple.com/ua/app/feeds4u/id1038456442?mt=8\">Feed4U</a></li>\n<li>En el caso de un ordenador aconsejamos Feedbro, se instala como plugin <a href=\"https://addons.mozilla.org/es-ES/firefox/addon/feedbroreader/\">de Firefox </a>o <a href=\"https://chrome.google.com/webstore/detail/feedbro/mefgmmbdailogpfhfblcnnjfmnpnmdfa\">de Chrome</a> y funciona con todos los principales sistemas.</li>\n<br/>\nAgregando este link a tu lector de feed, estarás siempre actualizado/a.", "feed_description": "Para seguir las actualizaciones desde un ordenador o teléfono inteligente sin la necesidad de abrir periódicamente el sitio, el método recomendado es usar los feeds RSS.</p>\n\n<p>Con rss feeds, utilizas una aplicación especial para recibir actualizaciones de los sitios que más te interesan, como por ejemplo éste. Es una buena manera de seguir muchos sitios muy rápidamente, sin la necesidad de crear una cuenta u otras complicaciones.</p>\n\n<li>Si tienes Android, te sugerimos <a href=\"https://f-droid.org/es/packages/com.nononsenseapps.feeder/\">Feeder</a> o Feeder</li>\n<li>Para iPhone/iPad puedes usar <a href=\"https://itunes.apple.com/ua/app/feeds4u/id1038456442?mt=8\">Feed4U</a></li>\n<li>En el caso de un ordenador aconsejamos Feedbro, se instala como plugin <a href=\"https://addons.mozilla.org/es-ES/firefox/addon/feedbroreader/\">de Firefox </a>o <a href=\"https://chrome.google.com/webstore/detail/feedbro/mefgmmbdailogpfhfblcnnjfmnpnmdfa\">de Chrome</a> y funciona con todos los principales sistemas.</li>\n<br/>\nAgregando este link a tu lector de feed, estarás siempre actualizado/a.",
@ -114,7 +121,7 @@
"list_description": "Si tienes un sitio web y quieres mostrar una lista de eventos, puedes usar el siguiente código" "list_description": "Si tienes un sitio web y quieres mostrar una lista de eventos, puedes usar el siguiente código"
}, },
"register": { "register": {
"description": "Los movimientos sociales necesitan organizarse y autofinanciarse. <br/>\nEste es un regalo para ustedes, úsenlo solamente para eventos con fines no comerciales y obviamente antifascistas, antisexistas y antirracistas.\n<br/> Antes de que puedas publicar, <strong> debemos aprobar la cuenta </strong>. Como imaginarás, <strong> detrás de este sitio hay personas de carne y hueso</strong>, por esto te pedimos escribir algo para hacernos saber que tipos de eventos te gustaría publicar.", "description": "Los movimientos sociales necesitan organizarse y autofinanciarse. <br/>\n<br/>Antes de que puedas publicar, <strong> debemos aprobar la cuenta </strong>. Como imaginarás, <strong> detrás de este sitio hay personas de carne y hueso</strong>, por esto te pedimos escribir algo para hacernos saber que tipos de eventos te gustaría publicar.",
"error": "Error: ", "error": "Error: ",
"complete": "Confirmaremos el registro lo antes posible.", "complete": "Confirmaremos el registro lo antes posible.",
"first_user": "Administrador creado y activado" "first_user": "Administrador creado y activado"
@ -152,7 +159,7 @@
"each_month": "Cada mes", "each_month": "Cada mes",
"due": "a las", "due": "a las",
"from": "Desde las", "from": "Desde las",
"image_too_big": "La imagén es demasiado grande! Tamaño máx 4M", "image_too_big": "La imagen no puede ser mayor a 4 MB",
"interact_with_me_at": "Sígueme en el fediverso en", "interact_with_me_at": "Sígueme en el fediverso en",
"show_recurrent": "Eventos recurrentes", "show_recurrent": "Eventos recurrentes",
"show_past": "eventos pasados", "show_past": "eventos pasados",
@ -166,7 +173,13 @@
"import_description": "Puedes importar eventos de otras plataformas y otras instancias mediante formatos estandars (ics y h-event)", "import_description": "Puedes importar eventos de otras plataformas y otras instancias mediante formatos estandars (ics y h-event)",
"edit_recurrent": "Editar evento recurrente:", "edit_recurrent": "Editar evento recurrente:",
"updated": "Evento actualizado", "updated": "Evento actualizado",
"saved": "Evento guardado" "saved": "Evento guardado",
"choose_focal_point": "Elige el punto central",
"address_description_osm": "¿Cuál es la dirección? (colaboradores de <a href='http://osm.org/copyright'>OpenStreetMap</a>)",
"address_description": "¿Cuál es la dirección?",
"alt_text_description": "Descripción para personas con baja visión",
"download_flyer": "Descargar folleto",
"remove_media_confirmation": "¿Confirmas la eliminación de la imagen?"
}, },
"admin": { "admin": {
"place_description": "En el caso de que un lugar sea incorrecto o cambie de dirección, puedes cambiarlo. <br/> Todos los eventos presentes y pasados asociados con este lugar cambiarán de dirección.", "place_description": "En el caso de que un lugar sea incorrecto o cambie de dirección, puedes cambiarlo. <br/> Todos los eventos presentes y pasados asociados con este lugar cambiarán de dirección.",
@ -238,7 +251,24 @@
"smtp_test_success": "Un correo de prueba se ha enviado a {admin_email}. Por favos, comprueba tu bandeja de entrada", "smtp_test_success": "Un correo de prueba se ha enviado a {admin_email}. Por favos, comprueba tu bandeja de entrada",
"smtp_test_button": "Enviar correo de prueba", "smtp_test_button": "Enviar correo de prueba",
"admin_email": "Correo del administrador", "admin_email": "Correo del administrador",
"smtp_description": "<ul><li>El administrador debería recibir un correo cuando son añadidos eventos anónimos (si está habilitado).</li><li>El administrador debería recibir un correo de petición de registro (si está habilitado).</li><li>El usuario debería recibir un correo de petición de registro.</li><li>El usuario debería recibir un correo de confirmación de registro.</li><li>El usuario debería recibir un correo de confirmación cuando el administrador le subscriba directamente.</li><li>El usuario debería recibir un correo para restaurar la contraseña cuando la haya olvidado.</li></ul>" "smtp_description": "<ul><li>El administrador debería recibir un correo cuando son añadidos eventos anónimos (si está habilitado).</li><li>El administrador debería recibir un correo de petición de registro (si está habilitado).</li><li>El usuario debería recibir un correo de petición de registro.</li><li>El usuario debería recibir un correo de confirmación de registro.</li><li>El usuario debería recibir un correo de confirmación cuando el administrador le subscriba directamente.</li><li>El usuario debería recibir un correo para restaurar la contraseña cuando la haya olvidado.</li></ul>",
"disable_admin_user_confirm": "¿Estás seguro que quieres quitar los permisos de administrador de {user}?",
"enable_admin_user_confirm": "¿Estás seguro que quieres conceder permisos de administrador a {user}?",
"smtp_port": "Puerto SMTP",
"smtp_secure": "SMTP Seguro (TLS o STARTTLS)",
"edit_collection": "Editar colección",
"config_plugin": "Configuración de complemento",
"fallback_image": "Imagen por defecto",
"header_image": "Imagan de encabezado",
"hide_thumbs": "Esconder miniaturas",
"hide_calendar": "Esconder calendario",
"default_images": "Imágenes por defecto",
"sender_email": "Correo de remitente",
"event_remove_ok": "Evento eliminado",
"smtp_use_sendmail": "Usar sendmail",
"wrong_domain_warning": "El parámetro baseurl configurado en config.json <b>({baseurl})</b> difiere del que estás visitando <b>({url})</b>",
"new_collection": "Nueva colección",
"collections_description": "Las colecciones son agrupaciones de eventos por etiquetas y ubicaciones. Serán desplegadas en la página de inicio"
}, },
"auth": { "auth": {
"not_confirmed": "Todavía no hemos confirmado este email…", "not_confirmed": "Todavía no hemos confirmado este email…",
@ -284,6 +314,8 @@
"setup": { "setup": {
"completed": "Configuración completada", "completed": "Configuración completada",
"start": "Inicio", "start": "Inicio",
"completed_description": "<p>Puedes ingresar con el siguiente usuario:<br/><br/>Usuario: <b>{email}</b><br/>Contraseña: <b>{password}<b/></p>" "completed_description": "<p>Puedes ingresar con el siguiente usuario:<br/><br/>Usuario: <b>{email}</b><br/>Contraseña: <b>{password}<b/></p>",
"copy_password_dialog": "Sí, ¡tienes que copiar la contraseña!",
"https_warning": "¡Si estás visitando a través de HTTP, recuerda cambiar el parámetro baseurl en config.json si cambias a HTTPS!"
} }
} }

View file

@ -89,7 +89,13 @@
"tags": "Etiketak", "tags": "Etiketak",
"close": "Itxi", "close": "Itxi",
"blobs": "Mordoak", "blobs": "Mordoak",
"collections": "Bildumak" "collections": "Bildumak",
"plugins": "Pluginak",
"help_translate": "Lagundu itzultzen",
"show_map": "Erakutsi mapa",
"calendar": "Egutegia",
"home": "Etxea",
"about": "Honi buruz"
}, },
"login": { "login": {
"description": "Saioa hasten baduzu ekitaldi berriak sortu ahal izango dituzu.", "description": "Saioa hasten baduzu ekitaldi berriak sortu ahal izango dituzu.",
@ -166,7 +172,9 @@
"remove_media_confirmation": "Irudiaren ezabaketa baieztatzen duzu?", "remove_media_confirmation": "Irudiaren ezabaketa baieztatzen duzu?",
"alt_text_description": "Ikusmen-urritasunak dituztenentzako deskripzioa", "alt_text_description": "Ikusmen-urritasunak dituztenentzako deskripzioa",
"choose_focal_point": "Aukeratu arretagunea", "choose_focal_point": "Aukeratu arretagunea",
"download_flyer": "Deskargatu eskuorria" "download_flyer": "Deskargatu eskuorria",
"address_description": "Zein da helbidea?",
"address_description_osm": "Zein da helbidea? (<a href='http://osm.org/copyright'>OpenStreetMap</a> kolaboratzaileak)"
}, },
"admin": { "admin": {
"place_description": "Lekua edo helbidea oker badago, alda dezakezu.<br/>Leku honekin lotutako iraganeko eta etorkizuneko ekitaldien helbidea aldatuko da.", "place_description": "Lekua edo helbidea oker badago, alda dezakezu.<br/>Leku honekin lotutako iraganeko eta etorkizuneko ekitaldien helbidea aldatuko da.",
@ -249,8 +257,15 @@
"edit_collection": "Editatu bilduma", "edit_collection": "Editatu bilduma",
"disable_admin_user_confirm": "Ziur al zaude {user}(r)i administratzaile baimenak kendu nahi dizkiozula?", "disable_admin_user_confirm": "Ziur al zaude {user}(r)i administratzaile baimenak kendu nahi dizkiozula?",
"collections_description": "Bildumak, etiketen eta lekuen arabera multzokatutako ekitaldiak dira. Hasierako orrialdean bistaratuko dira", "collections_description": "Bildumak, etiketen eta lekuen arabera multzokatutako ekitaldiak dira. Hasierako orrialdean bistaratuko dira",
"enable_admin_user_confirm": "Ziur zaude {user}-(r)i administratzaile baimenak gehitu nahi dizkiozula", "enable_admin_user_confirm": "Ziur zaude {user}-(r)i administratzaile baimenak gehitu nahi dizkiozula?",
"new_collection": "Bilduma berria" "new_collection": "Bilduma berria",
"allow_geolocation": "Baimendu ekitaldiak geokokatzea",
"hide_thumbs": "Ezkutatu iruditxoak",
"hide_calendar": "Ezkutatu egutegia",
"config_plugin": "Pluginaren konfigurazioa",
"fallback_image": "Lehenetsitako irudia",
"header_image": "Goiburuko irudia",
"default_images": "Lehenetsitako irudiak"
}, },
"auth": { "auth": {
"not_confirmed": "Oraindik baieztatu gabe dago…", "not_confirmed": "Oraindik baieztatu gabe dago…",

View file

@ -9,6 +9,7 @@ module.exports = {
it: 'Italiano', it: 'Italiano',
nb: 'Norwegian Bokmål', nb: 'Norwegian Bokmål',
pl: 'Polski', pl: 'Polski',
pt: 'Português',
sk: 'Slovak', sk: 'Slovak',
zh: '中国' zh: '中国'
} }

View file

@ -88,6 +88,7 @@
"max_events": "N. massimo eventi", "max_events": "N. massimo eventi",
"label": "Etichetta", "label": "Etichetta",
"collections": "Bolle", "collections": "Bolle",
"plugins": "Plugin",
"help_translate": "Aiuta a tradurre", "help_translate": "Aiuta a tradurre",
"show_map": "Mostra mappa", "show_map": "Mostra mappa",
"latitude": "Latitudine", "latitude": "Latitudine",
@ -136,7 +137,8 @@
"added_anon": "Evento aggiunto, verrà confermato quanto prima.", "added_anon": "Evento aggiunto, verrà confermato quanto prima.",
"updated": "Evento aggiornato", "updated": "Evento aggiornato",
"where_description": "Dov'è il gancio? Se il posto non è presente potrai crearlo.", "where_description": "Dov'è il gancio? Se il posto non è presente potrai crearlo.",
"coordinates_search": "Ricerca coordinate", "address_description": "A che indirizzo?",
"address_description_osm": "A che indirizzo? ((<a href='http://osm.org/copyright'>OpenStreetMap</a>)",
"coordinates_search_description": "Puoi ricercare il posto per nome, o incollare la coppia di coordinate.", "coordinates_search_description": "Puoi ricercare il posto per nome, o incollare la coppia di coordinate.",
"confirmed": "Evento confermato", "confirmed": "Evento confermato",
"not_found": "Evento non trovato", "not_found": "Evento non trovato",
@ -250,7 +252,12 @@
"wrong_domain_warning": "Il \"baseurl\" configurato in config.json <b>({baseurl})</b> è diverso da quello che stai visitando <b>({url})</b>", "wrong_domain_warning": "Il \"baseurl\" configurato in config.json <b>({baseurl})</b> è diverso da quello che stai visitando <b>({url})</b>",
"collections_description": "Le bolle sono raggruppamenti di eventi per tag e posti.", "collections_description": "Le bolle sono raggruppamenti di eventi per tag e posti.",
"edit_collection": "Modifica bolla", "edit_collection": "Modifica bolla",
"config_plugin": "Configura plugin" "config_plugin": "Configura plugin",
"fallback_image": "Immagine di ripiego",
"header_image": "Immagine di intestazione",
"hide_thumbs": "Nascondi immaginine",
"hide_calendar": "Nascondi calendario",
"default_images": "Immagini preimpostate"
}, },
"auth": { "auth": {
"not_confirmed": "Non ancora confermato…", "not_confirmed": "Non ancora confermato…",

View file

@ -3,14 +3,14 @@
"add_event": "Adicionar Evento", "add_event": "Adicionar Evento",
"description": "Descrição", "description": "Descrição",
"send": "Enviar", "send": "Enviar",
"address": "Morada", "address": "Endereço",
"next": "Próximo", "next": "Próximo",
"when": "Quando", "when": "Quando",
"where": "Onde", "where": "Onde",
"login": "Login", "login": "Login",
"export": "Exportar", "export": "Exportar",
"email": "E-mail", "email": "E-mail",
"what": "O quê", "what": "O que",
"media": "Media", "media": "Media",
"password": "Senha", "password": "Senha",
"register": "Registro", "register": "Registro",
@ -21,25 +21,25 @@
"actions": "Ações", "actions": "Ações",
"edit": "Editar", "edit": "Editar",
"admin": "Admin", "admin": "Admin",
"places": "Sítios", "places": "Lugares",
"hide": "Esconder", "hide": "Esconder",
"search": "Procurar", "search": "Procurar",
"info": "Info", "info": "Info",
"users": "Utilizadores", "users": "Usuários",
"share": "Partilhar", "share": "Compartilhar",
"name": "Nome", "name": "Nome",
"associate": "Associar", "associate": "Associar",
"logout": "Sair", "logout": "Sair",
"remove_admin": "Remover admin", "remove_admin": "Remover admin",
"activate": "Activar", "activate": "Ativar",
"save": "Guardar", "save": "Salvar",
"preview": "Pré-visualizar", "preview": "Pré-visualizar",
"edit_event": "Editar evento", "edit_event": "Editar evento",
"add": "Adicionar", "add": "Adicionar",
"copy": "Copiar", "copy": "Copiar",
"ok": "Ok", "ok": "Ok",
"cancel": "Cancelar", "cancel": "Cancelar",
"me": "Tu", "me": "Você",
"password_updated": "Senha alterada.", "password_updated": "Senha alterada.",
"resources": "Recursos", "resources": "Recursos",
"activate_user": "Confirmado", "activate_user": "Confirmado",
@ -49,7 +49,7 @@
"copied": "Copiado", "copied": "Copiado",
"recover_password": "Recuperar senha", "recover_password": "Recuperar senha",
"new_password": "Nova senha", "new_password": "Nova senha",
"new_user": "Novo/a usuário/a", "new_user": "Novo usuário",
"deactivate": "Desligar", "deactivate": "Desligar",
"related": "Relacionado", "related": "Relacionado",
"enable": "Habilitar", "enable": "Habilitar",
@ -79,8 +79,8 @@
"embed_title": "Incorpore este evento na sua página", "embed_title": "Incorpore este evento na sua página",
"embed_help": "Copie o código seguinte em sua página e o evento será apresentado desta maneira", "embed_help": "Copie o código seguinte em sua página e o evento será apresentado desta maneira",
"displayname": "Nome de exibição", "displayname": "Nome de exibição",
"feed_url_copied": "Abra a URL do feed no seu leitor de feeds RSS", "feed_url_copied": "Abra a URL do feed no seu leitor RSS",
"follow_me_title": "Seguir atualizações a partir de Fediverso", "follow_me_title": "Seguir atualizações a partir do Fediverso",
"tags": "Marcadores", "tags": "Marcadores",
"theme": "Tema", "theme": "Tema",
"reset": "Reiniciar", "reset": "Reiniciar",
@ -106,7 +106,7 @@
"smtp_hostname": "Hostname SMTP", "smtp_hostname": "Hostname SMTP",
"collections_description": "Coleções são agrupamentos de eventos por marcadores e locais. Eles serão exibidos na página principal", "collections_description": "Coleções são agrupamentos de eventos por marcadores e locais. Eles serão exibidos na página principal",
"new_collection": "Nova coleção", "new_collection": "Nova coleção",
"disable_admin_user_confirm": "Você está certo que quer remover permissões de administração de ùser}?", "disable_admin_user_confirm": "Você está certo que quer remover permissões de administração de {user}?",
"enable_admin_user_confirm": "Você está certo que quer adicionar permissões de administrador para {user}", "enable_admin_user_confirm": "Você está certo que quer adicionar permissões de administrador para {user}",
"event_remove_ok": "Evento removido", "event_remove_ok": "Evento removido",
"smtp_description": "<ul><li>Administrador deve receber um e-mail quando um evento anônimo for adicionado (se habilitado).</li><li>Administrador deve receber um e-mail de requisição de registro (se habilitado).</li><li>Usuário deve receber um e-mail de solicitação de registro.</li><li>Usuário deve receber um e-mail de confirmação de registro.</li><li>Usuário deve recever um e-mail de confirmação quando registrado diretamente por um administrador.</li><li>Usuários devem receber um e-mail para recuperar a senha quando eles esquecerem ela</li></ul>", "smtp_description": "<ul><li>Administrador deve receber um e-mail quando um evento anônimo for adicionado (se habilitado).</li><li>Administrador deve receber um e-mail de requisição de registro (se habilitado).</li><li>Usuário deve receber um e-mail de solicitação de registro.</li><li>Usuário deve receber um e-mail de confirmação de registro.</li><li>Usuário deve recever um e-mail de confirmação quando registrado diretamente por um administrador.</li><li>Usuários devem receber um e-mail para recuperar a senha quando eles esquecerem ela</li></ul>",
@ -227,7 +227,7 @@
"valid": "Sua conta está confirmada, você pode agora <a href=\"/login\">autenticar-se</a>" "valid": "Sua conta está confirmada, você pode agora <a href=\"/login\">autenticar-se</a>"
}, },
"export": { "export": {
"intro": "Diferente de plataformas não-sociais que fazem tudo para manter os usuários e os dados sobre eles, nós acreditamos que a informação, como pessoas, deve ser livre. Para isso você pode estar atualizado sobre os eventos que você quer, sem necessariamente entrar nesta página.", "intro": "Diferente de plataformas não-sociais que fazem tudo para manter os usuários e os dados sobre eles, nós acreditamos que a informação, como pessoas, deve ser livre. Para isso você se atualizar sobre os eventos de seu interesse, sem necessariamente entrar nesta página.",
"insert_your_address": "Informe seu endereço de e-mail", "insert_your_address": "Informe seu endereço de e-mail",
"feed_description": "Para seguir as atualizações de um computador ou smartphone sem que você precise acessar essa página periodicamente, utilize um feeds RSS. </p>\n\n<p> Com feeds RSS você pode utilizar um app especial para receber atualizações de páginas que te interessam. É uma boa maneira de seguir muitas páginas rapidamente, sem a necessidade de criar contas de usuários ou outras complicações. </p>\n\n<li> Se você possui um Android, recomendamos <a href=\"https://f-droid.org/en/packages/net.frju.flym/\">Flym</a> ou Feeder </li>\n<li> Para iPhone / iPad você pode utilizar <a href=\"https://itunes.apple.com/ua/app/feeds4u/id1038456442?mt=8\"> Feed4U </a> </li>\n<li> Para desktop / laptop nós recomendamos Feedbro, que pode ser instalado no <a href=\"https://addons.mozilla.org/en-GB/firefox/addon/feedbroreader/\"> Firefox </a> ou <a href=\"https://chrome.google.com/webstore/detail/feedbro/mefgmmbdailogpfhfblcnnjfmnpnmdfa\"> Chrome </a>. </li>\n<br/>\nAdicionado este link ao seu leitor de RSS irá mantê-lo atualizado.", "feed_description": "Para seguir as atualizações de um computador ou smartphone sem que você precise acessar essa página periodicamente, utilize um feeds RSS. </p>\n\n<p> Com feeds RSS você pode utilizar um app especial para receber atualizações de páginas que te interessam. É uma boa maneira de seguir muitas páginas rapidamente, sem a necessidade de criar contas de usuários ou outras complicações. </p>\n\n<li> Se você possui um Android, recomendamos <a href=\"https://f-droid.org/en/packages/net.frju.flym/\">Flym</a> ou Feeder </li>\n<li> Para iPhone / iPad você pode utilizar <a href=\"https://itunes.apple.com/ua/app/feeds4u/id1038456442?mt=8\"> Feed4U </a> </li>\n<li> Para desktop / laptop nós recomendamos Feedbro, que pode ser instalado no <a href=\"https://addons.mozilla.org/en-GB/firefox/addon/feedbroreader/\"> Firefox </a> ou <a href=\"https://chrome.google.com/webstore/detail/feedbro/mefgmmbdailogpfhfblcnnjfmnpnmdfa\"> Chrome </a>. </li>\n<br/>\nAdicionado este link ao seu leitor de RSS irá mantê-lo atualizado.",
"ical_description": "Computadores e smartphones normalmente possuem aplicações de calendário capazes de importar um calendário remoto.", "ical_description": "Computadores e smartphones normalmente possuem aplicações de calendário capazes de importar um calendário remoto.",
@ -283,7 +283,7 @@
"error": "Autenticação não realizada. Verifique suas informações de autenticação." "error": "Autenticação não realizada. Verifique suas informações de autenticação."
}, },
"recover": { "recover": {
"not_valid_code": "Alguma coisa não funcionou." "not_valid_code": "Algo não funcionou corretamente."
}, },
"register": { "register": {
"error": "Erro: ", "error": "Erro: ",

View file

@ -2,6 +2,8 @@ const config = require('./server/config.js')
const minifyTheme = require('minify-css-string').default const minifyTheme = require('minify-css-string').default
const locales = require('./locales/index') const locales = require('./locales/index')
import { ca, de, en, es, eu, fr, gl, it, nb, pl, pt, sk, zhHans } from 'vuetify/lib/locale'
const isDev = (process.env.NODE_ENV !== 'production') const isDev = (process.env.NODE_ENV !== 'production')
module.exports = { module.exports = {
telemetry: false, telemetry: false,
@ -43,6 +45,7 @@ module.exports = {
'@/plugins/axios', // axios baseurl configuration '@/plugins/axios', // axios baseurl configuration
'@/plugins/validators', // inject validators '@/plugins/validators', // inject validators
'@/plugins/api', // api helpers '@/plugins/api', // api helpers
'@/plugins/i18n',
{ src: '@/plugins/v-calendar', ssr: false } // v-calendar { src: '@/plugins/v-calendar', ssr: false } // v-calendar
], ],
@ -51,7 +54,7 @@ module.exports = {
*/ */
modules: [ modules: [
// Doc: https://axios.nuxtjs.org/usage // Doc: https://axios.nuxtjs.org/usage
'nuxt-i18n', '@nuxtjs/i18n',
'@nuxtjs/axios', '@nuxtjs/axios',
'@nuxtjs/auth', '@nuxtjs/auth',
'@nuxtjs/sitemap', '@nuxtjs/sitemap',
@ -89,7 +92,8 @@ module.exports = {
iso: key iso: key
})), })),
vueI18n: { vueI18n: {
fallbackLocale: 'en' fallbackLocale: 'en',
silentTranslationWarn: true
}, },
langDir: 'locales', langDir: 'locales',
lazy: true, lazy: true,
@ -136,9 +140,9 @@ module.exports = {
} }
} }
}, },
buildModules: ['@nuxtjs/vuetify'], buildModules: ['@nuxtjs/vuetify'],
vuetify: { vuetify: {
lang: { locales: { ca, de, en, es, eu, fr, gl, it, nb, pl, pt, sk, zhHans } },
treeShake: true, treeShake: true,
theme: { theme: {
options: { options: {

View file

@ -1,6 +1,6 @@
{ {
"name": "gancio", "name": "gancio",
"version": "1.6.0-rc1", "version": "1.6.0-rc2",
"description": "A shared agenda for local communities", "description": "A shared agenda for local communities",
"author": "lesion", "author": "lesion",
"scripts": { "scripts": {
@ -27,6 +27,7 @@
"locales/", "locales/",
"store/", "store/",
".nuxt/", ".nuxt/",
"gancio_plugins",
"yarn.lock" "yarn.lock"
], ],
"engines": { "engines": {
@ -36,19 +37,20 @@
"@mdi/js": "^7.0.96", "@mdi/js": "^7.0.96",
"@nuxtjs/auth": "^4.9.1", "@nuxtjs/auth": "^4.9.1",
"@nuxtjs/axios": "^5.13.5", "@nuxtjs/axios": "^5.13.5",
"@nuxtjs/i18n": "^7.3.0",
"@nuxtjs/sitemap": "^2.4.0", "@nuxtjs/sitemap": "^2.4.0",
"accept-language": "^3.0.18", "accept-language": "^3.0.18",
"axios": "^0.27.2", "axios": "^0.27.2",
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
"body-parser": "^1.20.0", "body-parser": "^1.20.0",
"cookie-parser": "^1.4.6", "cookie-parser": "^1.4.6",
"cookie-session": "^2.0.0",
"cookie-universal-nuxt": "^2.2.2", "cookie-universal-nuxt": "^2.2.2",
"cors": "^2.8.5", "cors": "^2.8.5",
"dayjs": "^1.11.5", "dayjs": "^1.11.5",
"dompurify": "^2.4.1", "dompurify": "^2.4.1",
"email-templates": "^10.0.1", "email-templates": "^10.0.1",
"express": "^4.18.1", "express": "^4.18.1",
"express-session": "^1.17.3",
"http-signature": "^1.3.6", "http-signature": "^1.3.6",
"https-proxy-agent": "^5.0.1", "https-proxy-agent": "^5.0.1",
"ical.js": "^1.5.0", "ical.js": "^1.5.0",
@ -67,7 +69,6 @@
"multer": "^1.4.5-lts.1", "multer": "^1.4.5-lts.1",
"mysql2": "^2.3.3", "mysql2": "^2.3.3",
"nuxt-edge": "2.16.0-27720022.54e852f", "nuxt-edge": "2.16.0-27720022.54e852f",
"nuxt-i18n": "^6.28.1",
"oauth2orize": "^1.11.1", "oauth2orize": "^1.11.1",
"passport": "^0.6.0", "passport": "^0.6.0",
"passport-anonymous": "^1.0.1", "passport-anonymous": "^1.0.1",

View file

@ -6,56 +6,56 @@ v-container.container.pa-0.pa-md-3
v-tabs(v-model='selectedTab' show-arrows :next-icon='mdiChevronRight' :prev-icon='mdiChevronLeft') v-tabs(v-model='selectedTab' show-arrows :next-icon='mdiChevronRight' :prev-icon='mdiChevronLeft')
//- SETTINGS //- SETTINGS
v-tab {{$t('common.settings')}} v-tab(href='#settings') {{$t('common.settings')}}
v-tab-item v-tab-item(value='settings')
Settings Settings
//- THEME //- THEME
v-tab {{$t('common.theme')}} v-tab(href='#theme') {{$t('common.theme')}}
v-tab-item v-tab-item(value='theme')
Theme Theme
//- USERS //- USERS
v-tab v-tab(href='#users')
v-badge(:value='!!unconfirmedUsers.length' :content='unconfirmedUsers.length') {{$t('common.users')}} v-badge(:value='!!unconfirmedUsers.length' :content='unconfirmedUsers.length') {{$t('common.users')}}
v-tab-item v-tab-item(value='users')
Users(:users='users' @update='updateUsers') Users(:users='users' @update='updateUsers')
//- PLACES //- PLACES
v-tab {{$t('common.places')}} v-tab(href='#places') {{$t('common.places')}}
v-tab-item v-tab-item(value='places')
Places Places
//- Collections //- Collections
v-tab {{$t('common.collections')}} v-tab(href='#collections') {{$t('common.collections')}}
v-tab-item v-tab-item(value='collections')
Collections Collections
//- EVENTS //- EVENTS
v-tab v-tab(href='#unconfirmed_events')
v-badge(:value='!!unconfirmedEvents.length' :content='unconfirmedEvents.length') {{$t('common.events')}} v-badge(:value='!!unconfirmedEvents.length' :content='unconfirmedEvents.length') {{$t('common.events')}}
v-tab-item v-tab-item(value='unconfirmed_events')
Events(:unconfirmedEvents='unconfirmedEvents' Events(:unconfirmedEvents='unconfirmedEvents'
@confirmed='id => { unconfirmedEvents = unconfirmedEvents.filter(e => e.id !== id)}') @confirmed='id => { unconfirmedEvents = unconfirmedEvents.filter(e => e.id !== id)}')
//- ANNOUNCEMENTS //- ANNOUNCEMENTS
v-tab {{$t('common.announcements')}} v-tab(href='#announcements') {{$t('common.announcements')}}
v-tab-item v-tab-item(value='announcements')
Announcement Announcement
//- PLUGINS //- PLUGINS
v-tab {{$t('common.plugins')}} v-tab(href='#plugins') {{$t('common.plugins')}}
v-tab-item v-tab-item(value='plugins')
Plugin Plugin
//- FEDERATION //- FEDERATION
v-tab {{$t('common.federation')}} v-tab(href='#federation') {{$t('common.federation')}}
v-tab-item v-tab-item(value='federation')
Federation Federation
//- MODERATION //- MODERATION
v-tab(v-if='settings.enable_federation') {{$t('common.moderation')}} v-tab(v-if='settings.enable_federation' href='#moderation') {{$t('common.moderation')}}
v-tab-item v-tab-item(value='moderation')
Moderation Moderation
</template> </template>
<script> <script>
@ -88,9 +88,9 @@ export default {
try { try {
const users = await $axios.$get('/users') const users = await $axios.$get('/users')
const unconfirmedEvents = await $axios.$get('/event/unconfirmed') const unconfirmedEvents = await $axios.$get('/event/unconfirmed')
return { users, unconfirmedEvents, selectedTab: 0, url } return { users, unconfirmedEvents, url }
} catch (e) { } catch (e) {
return { users: [], unconfirmedEvents: [], selectedTab: 0, url } return { users: [], unconfirmedEvents: [], url }
} }
}, },
data () { data () {
@ -99,7 +99,6 @@ export default {
users: [], users: [],
description: '', description: '',
unconfirmedEvents: [], unconfirmedEvents: [],
selectedTab: 0
} }
}, },
head () { head () {
@ -109,6 +108,14 @@ export default {
...mapState(['settings']), ...mapState(['settings']),
unconfirmedUsers () { unconfirmedUsers () {
return this.users.filter(u => !u.is_active) return this.users.filter(u => !u.is_active)
},
selectedTab: {
set (tab) {
this.$router.replace({ query: { ...this.$route.query, tab } })
},
get () {
return this.$route.query.tab
}
} }
}, },
methods: { methods: {

View file

@ -39,9 +39,9 @@ v-container#event.pa-0.pa-sm-2
v-divider v-divider
//- info & actions //- info & actions
v-list(dense nav) v-list(dense nav)
v-list-group(:append-icon='mdiChevronUp' :value='true') //- v-list-group(:append-icon='mdiChevronUp' :value='true')
template(v-slot:activator) //- template(v-slot:activator)
v-list-item.text-overline Actions //- v-list-item.text-overline {{$t('common.actions')}}
//- copy link //- copy link
v-list-item(@click='clipboard(`${settings.baseurl}/event/${event.slug || event.id}`)') v-list-item(@click='clipboard(`${settings.baseurl}/event/${event.slug || event.id}`)')

View file

@ -16,6 +16,8 @@ import 'dayjs/locale/fr'
import 'dayjs/locale/de' import 'dayjs/locale/de'
import 'dayjs/locale/gl' import 'dayjs/locale/gl'
import 'dayjs/locale/sk' import 'dayjs/locale/sk'
import 'dayjs/locale/pt'
import 'dayjs/locale/zh'
dayjs.extend(relativeTime) dayjs.extend(relativeTime)
dayjs.extend(utc) dayjs.extend(utc)
@ -59,7 +61,7 @@ export default ({ app, store }) => {
Vue.filter('recurrentDetail', event => { Vue.filter('recurrentDetail', event => {
const parent = event.parent const parent = event.parent
if (!parent.frequency || !parent.type) return if (!parent.recurrent || parent.recurrent.frequency) return 'error!'
const { frequency, type } = parent.recurrent const { frequency, type } = parent.recurrent
let recurrent let recurrent
if (frequency === '1w' || frequency === '2w') { if (frequency === '1w' || frequency === '2w') {

View file

@ -1,35 +1,36 @@
import Vue from 'vue' export default async ({ app, store, res, $vuetify }) => {
import VueI18n from 'vue-i18n'
import merge from 'lodash/merge'
Vue.use(VueI18n) $vuetify.lang.current = app.i18n.locale
export default async ({ app, store, res }) => { app.i18n.onLanguageSwitched = (oldLocale, newLocale) => {
const messages = {} $vuetify.lang.current = newLocale
if (process.server) {
if (res.locals) {
store.commit('setLocale', res.locals.acceptedLocale)
if (res.locals.user_locale) {
store.commit('setUserLocale', res.locals.user_locale)
}
}
} }
messages[store.state.locale] = await import(/* webpackChunkName: "lang-[request]" */`../locales/${store.state.locale}.json`) // const messages = {}
// if (process.server) {
// if (res.locals) {
// store.commit('setLocale', res.locals.acceptedLocale)
// if (res.locals.user_locale) {
// store.commit('setUserLocale', res.locals.user_locale)
// }
// }
// }
// messages[store.state.locale] = await import(/* webpackChunkName: "lang-[request]" */`../locales/${store.state.locale}.json`)
// always include en fallback locale // always include en fallback locale
if (store.state.locale !== 'en') { // if (store.state.locale !== 'en') {
messages.en = await import('../locales/en.json') // messages.en = await import('../locales/en.json')
} // }
if (store.state.user_locale) { // if (store.state.user_locale) {
merge(messages[store.state.locale], store.state.user_locale) // merge(messages[store.state.locale], store.state.user_locale)
} // }
// Set i18n instance on app // Set i18n instance on app
app.i18n = new VueI18n({ // app.i18n = new VueI18n({
locale: store.state.locale, // locale: store.state.locale,
fallbackLocale: 'en', // fallbackLocale: 'en',
messages // messages
}) // })
} }

View file

@ -1,6 +1,6 @@
const bodyParser = require('body-parser') const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser') const cookieParser = require('cookie-parser')
const session = require('express-session') const session = require('cookie-session')
const OAuthClient = require('../models/oauth_client') const OAuthClient = require('../models/oauth_client')
const OAuthToken = require('../models/oauth_token') const OAuthToken = require('../models/oauth_token')

View file

@ -7,7 +7,7 @@ const sharp = require('sharp')
const config = require('../../config') const config = require('../../config')
const generateKeyPair = promisify(crypto.generateKeyPair) const generateKeyPair = promisify(crypto.generateKeyPair)
const log = require('../../log') const log = require('../../log')
const locales = require('../../../locales/index') // const locales = require('../../../locales/index')
const escape = require('lodash/escape') const escape = require('lodash/escape')
const pluginController = require('./plugins') const pluginController = require('./plugins')
@ -99,18 +99,18 @@ const settingsController = {
} }
// initialize user_locale // initialize user_locale
if (config.user_locale && fs.existsSync(path.resolve(config.user_locale))) { // if (config.user_locale && fs.existsSync(path.resolve(config.user_locale))) {
const user_locales_files = fs.readdirSync(path.resolve(config.user_locale)) // const user_locales_files = fs.readdirSync(path.resolve(config.user_locale))
user_locales_files.forEach( f => { // user_locales_files.forEach( f => {
const locale = path.basename(f ,'.json') // const locale = path.basename(f ,'.json')
if (locales[locale]) { // if (locales[locale]) {
log.info(`Adding custom locale ${locale}`) // log.info(`Adding custom locale ${locale}`)
settingsController.user_locale[locale] = require(path.resolve(config.user_locale, f)).default // settingsController.user_locale[locale] = require(path.resolve(config.user_locale, f)).default
} else { // } else {
log.warning(`Unknown custom user locale: ${locale} [valid locales are ${locales}]`) // log.warning(`Unknown custom user locale: ${locale} [valid locales are ${locales}]`)
} // }
}) // })
} // }
pluginController._load() pluginController._load()
}, },

View file

@ -96,7 +96,7 @@ module.exports = {
about: settings.about about: settings.about
} }
// set user locale // set user locale
res.locals.user_locale = settingsController.user_locale[res.locals.acceptedLocale] // res.locals.user_locale = settingsController.user_locale[res.locals.acceptedLocale]
dayjs.tz.setDefault(res.locals.settings.instance_timezone) dayjs.tz.setDefault(res.locals.settings.instance_timezone)
next() next()
}, },

View file

@ -1,7 +1,6 @@
import dayjs from 'dayjs' import dayjs from 'dayjs'
export const state = () => ({ export const state = () => ({
user_locale: {},
settings: { settings: {
instance_timezone: 'Europe/Rome', instance_timezone: 'Europe/Rome',
instance_name: '', instance_name: '',
@ -29,9 +28,6 @@ export const mutations = {
setSetting (state, setting) { setSetting (state, setting) {
state.settings[setting.key] = setting.value state.settings[setting.key] = setting.value
}, },
setUserlocale (state, messages) {
state.user_locale = messages
},
setAnnouncements (state, announcements) { setAnnouncements (state, announcements) {
state.announcements = announcements state.announcements = announcements
}, },

View file

@ -3,7 +3,7 @@
Plugin Name: WPGancio Plugin Name: WPGancio
Plugin URI: https://gancio.org Plugin URI: https://gancio.org
Description: Connects an user of a gancio instance to a Wordpress user so that published events are automatically pushed with Gancio API. Description: Connects an user of a gancio instance to a Wordpress user so that published events are automatically pushed with Gancio API.
Version: 1.4 Version: 1.5
Author: Gancio Author: Gancio
License: AGPL 3.0 License: AGPL 3.0
@ -19,8 +19,8 @@ You should have received a copy of the GNU Affero General Public License
along with (WPGancio). If not, see (https://www.gnu.org/licenses/agpl-3.0.html). along with (WPGancio). If not, see (https://www.gnu.org/licenses/agpl-3.0.html).
*/ */
defined( 'ABSPATH' ) or die( 'Nope, not accessing this' ); defined('ABSPATH') or die('Nope, not accessing this');
define( 'WPGANCIO_DIR', plugin_dir_path( __FILE__ ) ); define('WPGANCIO_DIR', plugin_dir_path(__FILE__));
require_once(WPGANCIO_DIR . 'settings.php'); require_once(WPGANCIO_DIR . 'settings.php');
require_once(WPGANCIO_DIR . 'network_settings.php'); require_once(WPGANCIO_DIR . 'network_settings.php');
require_once(WPGANCIO_DIR . 'wc.php'); require_once(WPGANCIO_DIR . 'wc.php');
@ -40,4 +40,3 @@ require_once(WPGANCIO_DIR . 'oauth.php');
* - start an OAuth 2.0 authentication flow with the selected instance * - start an OAuth 2.0 authentication flow with the selected instance
* - Send each new / updated events to the selected instance via Gancio API * - Send each new / updated events to the selected instance via Gancio API
*/ */

View file

@ -4,7 +4,7 @@ Donate link: https://gancio.org
Tags: events, gancio, fediverse, AP, activity pub Tags: events, gancio, fediverse, AP, activity pub
Requires at least: 4.7 Requires at least: 4.7
Tested up to: 6.0 Tested up to: 6.0
Stable tag: 1.4 Stable tag: 1.5
Requires PHP: 7.0 Requires PHP: 7.0
License: AGPLv3 or later License: AGPLv3 or later
License URI: https://www.gnu.org/licenses/agpl-3.0.html License URI: https://www.gnu.org/licenses/agpl-3.0.html

126
yarn.lock
View file

@ -262,7 +262,7 @@
chalk "^2.0.0" chalk "^2.0.0"
js-tokens "^4.0.0" js-tokens "^4.0.0"
"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.14.9", "@babel/parser@^7.18.10", "@babel/parser@^7.18.4", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6": "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.4", "@babel/parser@^7.20.1", "@babel/parser@^7.20.2", "@babel/parser@^7.6.0", "@babel/parser@^7.9.6":
version "7.20.3" version "7.20.3"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.3.tgz#5358cf62e380cf69efcb87a7bb922ff88bfac6e2"
integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg== integrity sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==
@ -933,7 +933,7 @@
"@babel/parser" "^7.18.10" "@babel/parser" "^7.18.10"
"@babel/types" "^7.18.10" "@babel/types" "^7.18.10"
"@babel/traverse@^7.14.9", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1", "@babel/traverse@^7.7.2": "@babel/traverse@^7.18.10", "@babel/traverse@^7.19.0", "@babel/traverse@^7.19.1", "@babel/traverse@^7.20.1", "@babel/traverse@^7.7.2":
version "7.20.1" version "7.20.1"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.1.tgz#9b15ccbf882f6d107eeeecf263fbcdd208777ec8" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.1.tgz#9b15ccbf882f6d107eeeecf263fbcdd208777ec8"
integrity sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA== integrity sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==
@ -1744,6 +1744,24 @@
consola "^2.15.3" consola "^2.15.3"
defu "^5.0.0" defu "^5.0.0"
"@nuxtjs/i18n@^7.3.0":
version "7.3.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/i18n/-/i18n-7.3.0.tgz#49ddaaf5c39a0eb60e59515bbdebb0a94845cc06"
integrity sha512-KBmFzgHjaJ/b+I/nISWUkAxcigjc5FiR1ScRzq/eC8Ahxi5zIulfF8vRROmYbW1gP6B2yYBblOuWemW/T/YM0A==
dependencies:
"@babel/parser" "^7.18.10"
"@babel/traverse" "^7.18.10"
"@intlify/vue-i18n-extensions" "^1.0.2"
"@intlify/vue-i18n-loader" "^1.1.0"
cookie "^0.5.0"
devalue "^2.0.1"
is-https "^4.0.0"
js-cookie "^3.0.1"
klona "^2.0.5"
lodash.merge "^4.6.2"
ufo "^0.8.5"
vue-i18n "^8.27.2"
"@nuxtjs/proxy@^2.1.0": "@nuxtjs/proxy@^2.1.0":
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/@nuxtjs/proxy/-/proxy-2.1.0.tgz#fa7715a11d237fa1273503c4e9e137dd1bf5575b" resolved "https://registry.yarnpkg.com/@nuxtjs/proxy/-/proxy-2.1.0.tgz#fa7715a11d237fa1273503c4e9e137dd1bf5575b"
@ -3810,6 +3828,16 @@ cookie-parser@^1.4.6:
cookie "0.4.1" cookie "0.4.1"
cookie-signature "1.0.6" cookie-signature "1.0.6"
cookie-session@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/cookie-session/-/cookie-session-2.0.0.tgz#d07aa27822f43619e4342df1342268c849833089"
integrity sha512-hKvgoThbw00zQOleSlUr2qpvuNweoqBtxrmx0UFosx6AGi9lYtLoA+RbsvknrEX8Pr6MDbdWAb2j6SnMn+lPsg==
dependencies:
cookies "0.8.0"
debug "3.2.7"
on-headers "~1.0.2"
safe-buffer "5.2.1"
cookie-signature@1.0.6: cookie-signature@1.0.6:
version "1.0.6" version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
@ -3836,12 +3864,7 @@ cookie@0.4.1:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==
cookie@0.4.2, cookie@^0.4.0, cookie@^0.4.1: cookie@0.5.0, cookie@^0.5.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
cookie@0.5.0:
version "0.5.0" version "0.5.0"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
@ -3851,11 +3874,24 @@ cookie@^0.3.1:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
integrity sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw== integrity sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==
cookie@^0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
cookiejar@^2.1.3: cookiejar@^2.1.3:
version "2.1.3" version "2.1.3"
resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc"
integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==
cookies@0.8.0:
version "0.8.0"
resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.8.0.tgz#1293ce4b391740a8406e3c9870e828c4b54f3f90"
integrity sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==
dependencies:
depd "~2.0.0"
keygrip "~1.1.0"
copy-concurrently@^1.0.0: copy-concurrently@^1.0.0:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@ -4291,6 +4327,13 @@ debug@2.6.9, debug@2.x.x, debug@^2.2.0, debug@^2.3.3:
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
debug@3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3, debug@^4.3.4: debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3, debug@^4.3.4:
version "4.3.4" version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
@ -5085,20 +5128,6 @@ expect@^29.3.1:
jest-message-util "^29.3.1" jest-message-util "^29.3.1"
jest-util "^29.3.1" jest-util "^29.3.1"
express-session@^1.17.3:
version "1.17.3"
resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.17.3.tgz#14b997a15ed43e5949cb1d073725675dd2777f36"
integrity sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==
dependencies:
cookie "0.4.2"
cookie-signature "1.0.6"
debug "2.6.9"
depd "~2.0.0"
on-headers "~1.0.2"
parseurl "~1.3.3"
safe-buffer "5.2.1"
uid-safe "~2.1.5"
express@^4.18.1: express@^4.18.1:
version "4.18.2" version "4.18.2"
resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
@ -7162,7 +7191,7 @@ js-cookie@^2.2.1:
resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8"
integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==
js-cookie@^3.0.0: js-cookie@^3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414" resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414"
integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw== integrity sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw==
@ -7379,6 +7408,13 @@ jws@^3.2.2:
jwa "^1.4.1" jwa "^1.4.1"
safe-buffer "^5.0.1" safe-buffer "^5.0.1"
keygrip@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.1.0.tgz#871b1681d5e159c62a445b0c74b615e0917e7226"
integrity sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==
dependencies:
tsscmp "1.0.6"
kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2" version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
@ -7408,7 +7444,7 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
klona@^2.0.4: klona@^2.0.4, klona@^2.0.5:
version "2.0.5" version "2.0.5"
resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc"
integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==
@ -8634,24 +8670,6 @@ nuxt-edge@2.16.0-27720022.54e852f:
"@nuxt/vue-renderer-edge" "2.16.0-27720022.54e852f" "@nuxt/vue-renderer-edge" "2.16.0-27720022.54e852f"
"@nuxt/webpack-edge" "2.16.0-27720022.54e852f" "@nuxt/webpack-edge" "2.16.0-27720022.54e852f"
nuxt-i18n@^6.28.1:
version "6.28.1"
resolved "https://registry.yarnpkg.com/nuxt-i18n/-/nuxt-i18n-6.28.1.tgz#63e3e809fa41d855c5c7c443c0074eecaa97d273"
integrity sha512-JKRs8AmixVZ7k90Rrwq468McfnInP1ymuejYHRGA4VV0nZCLYsdDQXZxXl3JXaER9VatM9C24GM3ArAYFOtUhg==
dependencies:
"@babel/parser" "^7.14.9"
"@babel/traverse" "^7.14.9"
"@intlify/vue-i18n-extensions" "^1.0.2"
"@intlify/vue-i18n-loader" "^1.1.0"
cookie "^0.4.1"
devalue "^2.0.1"
is-https "^4.0.0"
js-cookie "^3.0.0"
klona "^2.0.4"
lodash.merge "^4.6.2"
ufo "^0.7.7"
vue-i18n "^8.25.0"
nwsapi@^2.2.2: nwsapi@^2.2.2:
version "2.2.2" version "2.2.2"
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.2.tgz#e5418863e7905df67d51ec95938d67bf801f0bb0"
@ -10443,11 +10461,6 @@ randexp@0.4.6:
discontinuous-range "1.0.0" discontinuous-range "1.0.0"
ret "~0.1.10" ret "~0.1.10"
random-bytes@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b"
integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@ -12082,6 +12095,11 @@ tslib@^2.0.3, tslib@^2.2.0, tslib@^2.3.1:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e"
integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==
tsscmp@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.6.tgz#85b99583ac3589ec4bfef825b5000aa911d605eb"
integrity sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==
tty-browserify@0.0.0: tty-browserify@0.0.0:
version "0.0.0" version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@ -12164,11 +12182,6 @@ uc.micro@^1.0.1:
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
ufo@^0.7.7:
version "0.7.11"
resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.7.11.tgz#17defad497981290383c5d26357773431fdbadcb"
integrity sha512-IT3q0lPvtkqQ8toHQN/BkOi4VIqoqheqM1FnkNWT9y0G8B3xJhwnoKBu5OHx8zHDOvveQzfKuFowJ0VSARiIDg==
ufo@^0.8.5: ufo@^0.8.5:
version "0.8.6" version "0.8.6"
resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.8.6.tgz#c0ec89bc0e0c9fa59a683680feb0f28b55ec323b" resolved "https://registry.yarnpkg.com/ufo/-/ufo-0.8.6.tgz#c0ec89bc0e0c9fa59a683680feb0f28b55ec323b"
@ -12179,13 +12192,6 @@ uglify-js@^3.5.1:
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c"
integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==
uid-safe@~2.1.5:
version "2.1.5"
resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a"
integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==
dependencies:
random-bytes "~1.0.0"
uid2@0.0.x: uid2@0.0.x:
version "0.0.4" version "0.0.4"
resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.4.tgz#033f3b1d5d32505f5ce5f888b9f3b667123c0a44" resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.4.tgz#033f3b1d5d32505f5ce5f888b9f3b667123c0a44"
@ -12503,7 +12509,7 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
vue-i18n@^8.25.0: vue-i18n@^8.27.2:
version "8.28.2" version "8.28.2"
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.28.2.tgz#913558066e274395c0a9f40b2f3393d5c2636840" resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-8.28.2.tgz#913558066e274395c0a9f40b2f3393d5c2636840"
integrity sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA== integrity sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA==