From eba3c70c9bef683382a092ec4cf0164a36a08617 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Sun, 10 Oct 2021 16:24:12 +0200 Subject: [PATCH 1/9] Various accessibility improvements * Add announcement element with `aria-live` * Add skip to main content element Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- js/package.json | 2 + js/src/App.vue | 48 ++++++- js/src/common.scss | 20 +++ .../components/Account/ProfileOnboarding.vue | 4 +- js/src/components/Comment/Comment.vue | 1 + js/src/components/Comment/CommentTree.vue | 9 +- .../Discussion/DiscussionComment.vue | 2 +- js/src/components/Editor.vue | 9 ++ js/src/components/Error.vue | 8 +- .../components/Event/AddressAutoComplete.vue | 1 + .../components/Event/EventMetadataSidebar.vue | 20 +-- .../components/Event/ParticipationButton.vue | 36 ++++-- js/src/components/Footer.vue | 21 +++- js/src/components/NavBar.vue | 22 +++- .../Participation/ConfirmParticipation.vue | 8 +- .../ParticipationWithAccount.vue | 5 + .../ParticipationWithoutAccount.vue | 5 + .../Participation/UnloggedParticipation.vue | 5 + js/src/components/PictureUpload.vue | 7 +- js/src/main.ts | 4 + js/src/router/actor.ts | 13 +- js/src/router/discussion.ts | 17 ++- js/src/router/error.ts | 4 + js/src/router/event.ts | 50 ++++++-- js/src/router/groups.ts | 27 ++-- js/src/router/index.ts | 56 +++++++-- js/src/router/settings.ts | 117 ++++++++++++++---- js/src/router/user.ts | 47 +++++-- js/src/types/event.model.ts | 6 +- js/src/views/About.vue | 49 ++++---- js/src/views/About/AboutInstance.vue | 14 +-- js/src/views/Admin/AdminProfile.vue | 8 ++ js/src/views/Admin/AdminUserProfile.vue | 8 ++ js/src/views/Admin/Follows.vue | 5 + js/src/views/Discussions/Create.vue | 2 +- js/src/views/Discussions/Discussion.vue | 2 +- js/src/views/Event/Edit.vue | 5 +- js/src/views/Event/Event.vue | 12 ++ js/src/views/Event/Participants.vue | 27 +++- js/src/views/Group/Group.vue | 3 +- js/src/views/Group/GroupSettings.vue | 6 +- js/src/views/Group/Settings.vue | 5 + js/src/views/Home.vue | 3 + js/src/views/Moderation/Logs.vue | 5 + js/src/views/Moderation/ReportList.vue | 5 + js/src/views/Posts/Edit.vue | 2 +- js/src/views/Posts/List.vue | 10 +- js/src/views/Resources/ResourceFolder.vue | 1 + js/src/views/Settings/Notifications.vue | 20 ++- js/src/views/Settings/Preferences.vue | 3 +- js/src/views/Todos/Todo.vue | 8 ++ js/src/views/Todos/TodoList.vue | 8 ++ js/src/views/Todos/TodoLists.vue | 10 ++ js/src/views/User/EmailValidate.vue | 8 +- js/src/views/User/PasswordReset.vue | 8 +- js/src/views/User/ProviderValidation.vue | 8 +- js/src/views/User/Register.vue | 4 +- js/src/views/User/ResendConfirmation.vue | 8 +- js/src/views/User/SendPasswordReset.vue | 8 +- js/src/views/User/SettingsOnboard.vue | 5 + js/src/views/User/Validate.vue | 8 +- js/yarn.lock | 10 ++ 62 files changed, 687 insertions(+), 175 deletions(-) diff --git a/js/package.json b/js/package.json index 7b3fc2b9f..9e38573ef 100644 --- a/js/package.json +++ b/js/package.json @@ -29,6 +29,8 @@ "@tiptap/extension-underline": "^2.0.0-beta.7", "@tiptap/starter-kit": "^2.0.0-beta.37", "@tiptap/vue-2": "^2.0.0-beta.21", + "@vue-a11y/announcer": "^2.1.0", + "@vue-a11y/skip-to": "^2.1.2", "@vue/apollo-option": "4.0.0-alpha.11", "apollo-absinthe-upload-link": "^1.5.0", "blurhash": "^1.1.3", diff --git a/js/src/App.vue b/js/src/App.vue index f9818269d..bcda04912 100644 --- a/js/src/App.vue +++ b/js/src/App.vue @@ -1,5 +1,7 @@ <template> <div id="mobilizon"> + <VueAnnouncer /> + <VueSkipTo to="#main" :label="$t('Skip to main content')" /> <NavBar /> <div v-if="config && config.demoMode"> <b-message @@ -22,9 +24,9 @@ </div> <error v-if="error" :error="error" /> - <main v-else> + <main id="main" v-else> <transition name="fade" mode="out-in"> - <router-view /> + <router-view ref="routerView" /> </transition> </main> <mobilizon-footer /> @@ -32,7 +34,7 @@ </template> <script lang="ts"> -import { Component, Vue } from "vue-property-decorator"; +import { Component, Ref, Vue, Watch } from "vue-property-decorator"; import NavBar from "./components/NavBar.vue"; import { AUTH_ACCESS_TOKEN, @@ -52,6 +54,7 @@ import { IConfig } from "./types/config.model"; import { ICurrentUser } from "./types/current-user.model"; import jwt_decode, { JwtPayload } from "jwt-decode"; import { refreshAccessToken } from "./apollo/utils"; +import { Route } from "vue-router"; @Component({ apollo: { @@ -82,6 +85,8 @@ export default class App extends Vue { interval: number | undefined = undefined; + @Ref("routerView") routerView!: Vue; + async created(): Promise<void> { if (await this.initializeCurrentUser()) { await initializeCurrentActor(this.$apollo.provider.defaultClient); @@ -197,6 +202,39 @@ export default class App extends Vue { clearInterval(this.interval); this.interval = undefined; } + + @Watch("$route", { immediate: true }) + updateAnnouncement(route: Route): void { + const pageTitle = this.extractPageTitleFromRoute(route); + if (pageTitle) { + this.$announcer.polite( + this.$t("Navigated to {pageTitle}", { + pageTitle, + }) as string + ); + } + // Set the focus to the router view + // https://marcus.io/blog/accessible-routing-vuejs + setTimeout(() => { + const focusTarget = this.routerView.$el as HTMLElement; + // Make focustarget programmatically focussable + focusTarget.setAttribute("tabindex", "-1"); + + // Focus element + focusTarget.focus(); + + // Remove tabindex from focustarget. + // Reason: https://axesslab.com/skip-links/#update-3-a-comment-from-gov-uk + focusTarget.removeAttribute("tabindex"); + }, 0); + } + + extractPageTitleFromRoute(route: Route): string { + if (route.meta?.announcer?.message) { + return route.meta?.announcer?.message(); + } + return document.title; + } } </script> @@ -218,4 +256,8 @@ $mdi-font-path: "~@mdi/font/fonts"; flex-grow: 1; } } + +.vue-skip-to { + z-index: 40; +} </style> diff --git a/js/src/common.scss b/js/src/common.scss index 004ddb1b4..66979923b 100644 --- a/js/src/common.scss +++ b/js/src/common.scss @@ -135,3 +135,23 @@ a.list-item { font-size: 1.25rem; } } + +@mixin focus() { + &:focus { + border: 2px solid black; + border-radius: 5px; + } +} + +ul.menu-list > li, +p { + @include focus; +} +.navbar-item { + @include focus; +} + +.navbar-dropdown span.navbar-item:hover { + background-color: whitesmoke; + color: #0a0a0a; +} diff --git a/js/src/components/Account/ProfileOnboarding.vue b/js/src/components/Account/ProfileOnboarding.vue index 43448fc1b..bba073384 100644 --- a/js/src/components/Account/ProfileOnboarding.vue +++ b/js/src/components/Account/ProfileOnboarding.vue @@ -11,7 +11,7 @@ ) }} </p> - <hr /> + <hr role="presentation" /> <p class="content"> <span> {{ @@ -33,7 +33,7 @@ " /> </p> - <hr /> + <hr role="presentation" /> <p class="content"> {{ $t( diff --git a/js/src/components/Comment/Comment.vue b/js/src/components/Comment/Comment.vue index 14d0a9be3..33fd0cc92 100644 --- a/js/src/components/Comment/Comment.vue +++ b/js/src/components/Comment/Comment.vue @@ -137,6 +137,7 @@ ref="commentEditor" v-model="newComment.text" mode="comment" + :aria-label="$t('Comment body')" /> <b-button :disabled="newComment.text.trim().length === 0" diff --git a/js/src/components/Comment/CommentTree.vue b/js/src/components/Comment/CommentTree.vue index 4d997bee0..ef1c28038 100644 --- a/js/src/components/Comment/CommentTree.vue +++ b/js/src/components/Comment/CommentTree.vue @@ -23,6 +23,7 @@ ref="commenteditor" mode="comment" v-model="newComment.text" + :aria-label="$t('Comment body')" /> </p> <p class="help is-danger" v-if="emptyCommentError"> @@ -30,9 +31,11 @@ </p> </div> <div class="field notify-participants" v-if="isEventOrganiser"> - <b-switch v-model="newComment.isAnnouncement">{{ - $t("Notify participants") - }}</b-switch> + <b-switch + aria-labelledby="notify-participants-toggle" + v-model="newComment.isAnnouncement" + >{{ $t("Notify participants") }}</b-switch + > </div> </div> </div> diff --git a/js/src/components/Discussion/DiscussionComment.vue b/js/src/components/Discussion/DiscussionComment.vue index c3d27c968..3dd5706e6 100644 --- a/js/src/components/Discussion/DiscussionComment.vue +++ b/js/src/components/Discussion/DiscussionComment.vue @@ -88,7 +88,7 @@ {{ $t("[This comment has been deleted by it's author]") }} </div> <form v-else class="edition" @submit.prevent="updateComment"> - <editor v-model="updatedComment" /> + <editor v-model="updatedComment" :aria-label="$t('Comment body')" /> <div class="buttons"> <b-button native-type="submit" diff --git a/js/src/components/Editor.vue b/js/src/components/Editor.vue index 1c9c49e43..9e208eacc 100644 --- a/js/src/components/Editor.vue +++ b/js/src/components/Editor.vue @@ -227,6 +227,8 @@ export default class EditorComponent extends Vue { @Prop({ required: false, default: 100_000_000 }) maxSize!: number; + @Prop({ required: false }) ariaLabel!: string; + currentActor!: IPerson; editor: Editor | null = null; @@ -256,6 +258,13 @@ export default class EditorComponent extends Vue { mounted(): void { this.editor = new Editor({ + editorProps: { + attributes: { + "aria-multiline": this.isShortMode.toString(), + "aria-label": this.ariaLabel, + role: "textbox", + }, + }, extensions: [ StarterKit, Document, diff --git a/js/src/components/Error.vue b/js/src/components/Error.vue index 30585a8aa..752938f06 100644 --- a/js/src/components/Error.vue +++ b/js/src/components/Error.vue @@ -103,9 +103,11 @@ :active="copied !== false" always > - <b-button @click="copyErrorToClipboard">{{ - $t("Copy details to clipboard") - }}</b-button> + <b-button + @click="copyErrorToClipboard" + @keyup.enter="copyErrorToClipboard" + >{{ $t("Copy details to clipboard") }}</b-button + > </b-tooltip> </div> </section> diff --git a/js/src/components/Event/AddressAutoComplete.vue b/js/src/components/Event/AddressAutoComplete.vue index a3c806801..886c3fa13 100644 --- a/js/src/components/Event/AddressAutoComplete.vue +++ b/js/src/components/Event/AddressAutoComplete.vue @@ -31,6 +31,7 @@ v-if="!gettingLocation" icon-right="target" @click="locateMe" + @keyup.enter="locateMe" >{{ $t("Use my location") }}</b-button > <span v-else>{{ $t("Getting location") }}</span> diff --git a/js/src/components/Event/EventMetadataSidebar.vue b/js/src/components/Event/EventMetadataSidebar.vue index af567ee76..912038d6d 100644 --- a/js/src/components/Event/EventMetadataSidebar.vue +++ b/js/src/components/Event/EventMetadataSidebar.vue @@ -7,25 +7,15 @@ <div class="address-wrapper"> <span v-if="!physicalAddress">{{ $t("No address defined") }}</span> <div class="address" v-if="physicalAddress"> - <div> - <address> - <p - class="addressDescription" - :title="physicalAddress.poiInfos.name" - > - {{ physicalAddress.poiInfos.name }} - </p> - <p class="has-text-grey-dark"> - {{ physicalAddress.poiInfos.alternativeName }} - </p> - </address> - </div> - <span + <address-info :address="physicalAddress" /> + <b-button + type="is-text" class="map-show-button" @click="showMap = !showMap" v-if="physicalAddress.geom" - >{{ $t("Show map") }}</span > + {{ $t("Show map") }} + </b-button> </div> </div> </event-metadata-block> diff --git a/js/src/components/Event/ParticipationButton.vue b/js/src/components/Event/ParticipationButton.vue index c19a30ccf..65c44041f 100644 --- a/js/src/components/Event/ParticipationButton.vue +++ b/js/src/components/Event/ParticipationButton.vue @@ -30,18 +30,22 @@ A button to set your participation position="is-bottom-left" v-if="participation && participation.role === ParticipantRole.PARTICIPANT" > - <button class="button is-success is-large" type="button" slot="trigger"> - <b-icon icon="check" /> - <template> - <span>{{ $t("I participate") }}</span> - </template> - <b-icon icon="menu-down" /> - </button> + <template #trigger="{ active }"> + <b-button + type="is-success" + size="is-large" + icon-left="check" + :icon-right="active ? 'menu-up' : 'menu-down'" + > + {{ $t("I participate") }} + </b-button> + </template> <b-dropdown-item :value="false" aria-role="listitem" @click="confirmLeave" + @keyup.enter="confirmLeave" class="has-text-danger" >{{ $t("Cancel my participation…") }}</b-dropdown-item > @@ -73,6 +77,7 @@ A button to set your participation :value="false" aria-role="listitem" @click="confirmLeave" + @keyup.enter="confirmLeave" class="has-text-danger" >{{ $t("Cancel my participation request…") }}</b-dropdown-item > @@ -101,17 +106,21 @@ A button to set your participation position="is-bottom-left" v-else-if="!participation && currentActor.id" > - <button class="button is-primary is-large" type="button" slot="trigger"> - <template> - <span>{{ $t("Participate") }}</span> - </template> - <b-icon icon="menu-down" /> - </button> + <template #trigger="{ active }"> + <b-button + type="is-primary" + size="is-large" + :icon-right="active ? 'menu-up' : 'menu-down'" + > + {{ $t("Participate") }} + </b-button> + </template> <b-dropdown-item :value="true" aria-role="listitem" @click="joinEvent(currentActor)" + @keyup.enter="joinEvent(currentActor)" > <div class="media"> <div class="media-left"> @@ -136,6 +145,7 @@ A button to set your participation :value="false" aria-role="listitem" @click="joinModal" + @keyup.enter="joinModal" v-if="identities.length > 1" >{{ $t("with another identity…") }}</b-dropdown-item > diff --git a/js/src/components/Footer.vue b/js/src/components/Footer.vue index b64546566..a38792dbd 100644 --- a/js/src/components/Footer.vue +++ b/js/src/components/Footer.vue @@ -25,7 +25,12 @@ v-model="locale" :placeholder="$t('Select a language')" > - <option v-for="(language, lang) in langs" :value="lang" :key="lang"> + <option + v-for="(language, lang) in langs" + :value="lang" + :key="lang" + :selected="isLangSelected(lang)" + > {{ language }} </option> </b-select> @@ -48,6 +53,9 @@ {{ $t("License") }} </a> </li> + <li> + <a href="#navbar">{{ $t("Back to top") }}</a> + </li> </ul> <div class="content has-text-centered"> <i18n @@ -101,6 +109,10 @@ export default class Footer extends Vue { this.locale = locale; } } + + isLangSelected(lang: string): boolean { + return lang === this.locale; + } } </script> <style lang="scss" scoped> @@ -145,6 +157,13 @@ footer.footer { color: $white; text-decoration: underline; text-decoration-color: $secondary; + + &:focus { + background-color: #000; + color: #fff; + outline: 3px solid #000; + text-decoration: none; + } } ::v-deep span.select { diff --git a/js/src/components/NavBar.vue b/js/src/components/NavBar.vue index a17d978ad..29aab31ec 100644 --- a/js/src/components/NavBar.vue +++ b/js/src/components/NavBar.vue @@ -1,5 +1,6 @@ <template> <b-navbar + id="navbar" type="is-secondary" wrapper-class="container" :active.sync="mobileNavbarActive" @@ -58,6 +59,7 @@ href="https://mediation.koena.net/framasoft/mobilizon/" target="_blank" rel="noopener" + hreflang="fr" > <img src="/img/koena-a11y.svg" @@ -75,6 +77,10 @@ v-if="currentActor.id && currentUser.isLoggedIn" right collapsible + ref="user-dropdown" + tabindex="0" + tag="span" + @keyup.enter="toggleMenu" > <template slot="label" @@ -109,8 +115,11 @@ v-else :active="identity.id === currentActor.id" :key="identity.id" + tabindex="0" + @click="setIdentity(identity)" + @keyup.enter="setIdentity(identity)" > - <span @click="setIdentity(identity)"> + <span> <div class="media-left"> <figure class="image is-32x32" v-if="identity.avatar"> <img @@ -131,7 +140,7 @@ </div> </span> - <hr class="navbar-divider" /> + <hr class="navbar-divider" role="presentation" /> </b-navbar-item> <b-navbar-item @@ -146,8 +155,13 @@ >{{ $t("Administration") }}</b-navbar-item > - <b-navbar-item tag="span"> - <span @click="logout">{{ $t("Log out") }}</span> + <b-navbar-item + tag="span" + tabindex="0" + @click="logout" + @keyup.enter="logout" + > + <span>{{ $t("Log out") }}</span> </b-navbar-item> </b-navbar-dropdown> diff --git a/js/src/components/Participation/ConfirmParticipation.vue b/js/src/components/Participation/ConfirmParticipation.vue index edbe15803..b27b49701 100644 --- a/js/src/components/Participation/ConfirmParticipation.vue +++ b/js/src/components/Participation/ConfirmParticipation.vue @@ -71,7 +71,13 @@ import { IParticipant } from "../../types/participant.model"; import RouteName from "../../router/name"; import { CONFIRM_PARTICIPATION } from "../../graphql/event"; -@Component +@Component({ + metaInfo() { + return { + title: this.$t("Confirm participation") as string, + }; + }, +}) export default class ConfirmParticipation extends Vue { @Prop({ type: String, required: true }) token!: string; diff --git a/js/src/components/Participation/ParticipationWithAccount.vue b/js/src/components/Participation/ParticipationWithAccount.vue index a171afdd5..fa252f072 100644 --- a/js/src/components/Participation/ParticipationWithAccount.vue +++ b/js/src/components/Participation/ParticipationWithAccount.vue @@ -28,6 +28,11 @@ import { IEvent } from "@/types/event.model"; }, }, }, + metaInfo() { + return { + title: this.$t("Participation with account") as string, + }; + }, }) export default class ParticipationWithAccount extends Vue { @Prop({ type: String, required: true }) uuid!: string; diff --git a/js/src/components/Participation/ParticipationWithoutAccount.vue b/js/src/components/Participation/ParticipationWithoutAccount.vue index 2611190a4..3337c51e0 100644 --- a/js/src/components/Participation/ParticipationWithoutAccount.vue +++ b/js/src/components/Participation/ParticipationWithoutAccount.vue @@ -155,6 +155,11 @@ import { ApolloCache, FetchResult } from "@apollo/client/core"; }, config: CONFIG, }, + metaInfo() { + return { + title: this.$t("Participation without account") as string, + }; + }, }) export default class ParticipationWithoutAccount extends Vue { @Prop({ type: String, required: true }) uuid!: string; diff --git a/js/src/components/Participation/UnloggedParticipation.vue b/js/src/components/Participation/UnloggedParticipation.vue index 9adc6d491..a53fb9f0e 100644 --- a/js/src/components/Participation/UnloggedParticipation.vue +++ b/js/src/components/Participation/UnloggedParticipation.vue @@ -130,6 +130,11 @@ import RouteName from "../../router/name"; }, config: CONFIG, }, + metaInfo() { + return { + title: this.$t("Unlogged participation") as string, + }; + }, }) export default class UnloggedParticipation extends Vue { @Prop({ type: String, required: true }) uuid!: string; diff --git a/js/src/components/PictureUpload.vue b/js/src/components/PictureUpload.vue index 0b6c9eee9..87e763ef4 100644 --- a/js/src/components/PictureUpload.vue +++ b/js/src/components/PictureUpload.vue @@ -38,7 +38,12 @@ </span> </b-upload> </b-field> - <b-button type="is-text" v-if="imageSrc" @click="removeOrClearPicture"> + <b-button + type="is-text" + v-if="imageSrc" + @click="removeOrClearPicture" + @keyup.enter="removeOrClearPicture" + > {{ $t("Clear") }} </b-button> </div> diff --git a/js/src/main.ts b/js/src/main.ts index cae711f1a..c3e513bd6 100644 --- a/js/src/main.ts +++ b/js/src/main.ts @@ -4,6 +4,8 @@ import Component from "vue-class-component"; import VueScrollTo from "vue-scrollto"; import VueMeta from "vue-meta"; import VTooltip from "v-tooltip"; +import VueAnnouncer from "@vue-a11y/announcer"; +import VueSkipTo from "@vue-a11y/skip-to"; import App from "./App.vue"; import router from "./router"; import { NotifierPlugin } from "./plugins/notifier"; @@ -20,6 +22,8 @@ Vue.use(filters); Vue.use(VueMeta); Vue.use(VueScrollTo); Vue.use(VTooltip); +Vue.use(VueAnnouncer); +Vue.use(VueSkipTo); // Register the router hooks with their names Component.registerHooks([ diff --git a/js/src/router/actor.ts b/js/src/router/actor.ts index f6173c055..6ac74ef98 100644 --- a/js/src/router/actor.ts +++ b/js/src/router/actor.ts @@ -1,5 +1,6 @@ import { RouteConfig } from "vue-router"; import { ImportedComponent } from "vue/types/options"; +import { i18n } from "@/utils/i18n"; export enum ActorRouteName { GROUP = "Group", @@ -14,7 +15,10 @@ export const actorRoutes: RouteConfig[] = [ name: ActorRouteName.CREATE_GROUP, component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "CreateGroup" */ "@/views/Group/Create.vue"), - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { message: (): string => i18n.t("Create group") as string }, + }, }, { path: "/@:preferredUsername", @@ -22,13 +26,16 @@ export const actorRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "Group" */ "@/views/Group/Group.vue"), props: true, - meta: { requiredAuth: false }, + meta: { requiredAuth: false, announcer: { skip: true } }, }, { path: "/groups/me", name: ActorRouteName.MY_GROUPS, component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "MyGroups" */ "@/views/Group/MyGroups.vue"), - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { message: (): string => i18n.t("My groups") as string }, + }, }, ]; diff --git a/js/src/router/discussion.ts b/js/src/router/discussion.ts index 7627aed19..ec538e466 100644 --- a/js/src/router/discussion.ts +++ b/js/src/router/discussion.ts @@ -1,5 +1,6 @@ import { RouteConfig } from "vue-router"; import { ImportedComponent } from "vue/types/options"; +import { i18n } from "@/utils/i18n"; export enum DiscussionRouteName { DISCUSSION_LIST = "DISCUSSION_LIST", @@ -16,7 +17,12 @@ export const discussionRoutes: RouteConfig[] = [ /* webpackChunkName: "DiscussionsList" */ "@/views/Discussions/DiscussionsList.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Discussions list") as string, + }, + }, }, { path: "/@:preferredUsername/discussions/new", @@ -26,7 +32,12 @@ export const discussionRoutes: RouteConfig[] = [ /* webpackChunkName: "CreateDiscussion" */ "@/views/Discussions/Create.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Create discussion") as string, + }, + }, }, { path: "/@:preferredUsername/c/:slug/:comment_id?", @@ -36,6 +47,6 @@ export const discussionRoutes: RouteConfig[] = [ /* webpackChunkName: "Discussion" */ "@/views/Discussions/Discussion.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, ]; diff --git a/js/src/router/error.ts b/js/src/router/error.ts index 9c48407d3..9f1f563ea 100644 --- a/js/src/router/error.ts +++ b/js/src/router/error.ts @@ -1,5 +1,6 @@ import { RouteConfig } from "vue-router"; import { ImportedComponent } from "vue/types/options"; +import { i18n } from "@/utils/i18n"; export enum ErrorRouteName { ERROR = "Error", @@ -11,5 +12,8 @@ export const errorRoutes: RouteConfig[] = [ name: ErrorRouteName.ERROR, component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "Error" */ "../views/Error.vue"), + meta: { + announcer: { message: (): string => i18n.t("Error") as string }, + }, }, ]; diff --git a/js/src/router/event.ts b/js/src/router/event.ts index 0bb7df3e1..633f5698b 100644 --- a/js/src/router/event.ts +++ b/js/src/router/event.ts @@ -1,5 +1,6 @@ import { RouteConfig, Route } from "vue-router"; import { ImportedComponent } from "vue/types/options"; +import { i18n } from "@/utils/i18n"; const participations = (): Promise<ImportedComponent> => import( @@ -33,25 +34,34 @@ export const eventRoutes: RouteConfig[] = [ name: EventRouteName.EVENT_LIST, component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "EventList" */ "@/views/Event/EventList.vue"), - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Event list") as string }, + }, }, { path: "/events/create", name: EventRouteName.CREATE_EVENT, component: editEvent, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { message: (): string => i18n.t("Create event") as string }, + }, }, { path: "/events/me", name: EventRouteName.MY_EVENTS, component: myEvents, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { message: (): string => i18n.t("My events") as string }, + }, }, { path: "/events/edit/:eventId", name: EventRouteName.EDIT_EVENT, component: editEvent, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, props: (route: Route): Record<string, unknown> => { return { ...route.params, ...{ isUpdate: true } }; }, @@ -60,7 +70,7 @@ export const eventRoutes: RouteConfig[] = [ path: "/events/duplicate/:eventId", name: EventRouteName.DUPLICATE_EVENT, component: editEvent, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announce: { skip: true } }, props: (route: Route): Record<string, unknown> => ({ ...route.params, ...{ isDuplicate: true }, @@ -70,7 +80,7 @@ export const eventRoutes: RouteConfig[] = [ path: "/events/:eventId/participations", name: EventRouteName.PARTICIPATIONS, component: participations, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, props: true, }, { @@ -78,7 +88,7 @@ export const eventRoutes: RouteConfig[] = [ name: EventRouteName.EVENT, component: event, props: true, - meta: { requiredAuth: false }, + meta: { requiredAuth: false, announcer: { skip: true } }, }, { path: "/events/:uuid/participate", @@ -86,12 +96,22 @@ export const eventRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import("../components/Participation/UnloggedParticipation.vue"), props: true, + meta: { + announcer: { + message: (): string => i18n.t("Unlogged participation") as string, + }, + }, }, { path: "/events/:uuid/participate/with-account", name: EventRouteName.EVENT_PARTICIPATE_WITH_ACCOUNT, component: (): Promise<ImportedComponent> => import("../components/Participation/ParticipationWithAccount.vue"), + meta: { + announcer: { + message: (): string => i18n.t("Participation with account") as string, + }, + }, props: true, }, { @@ -99,6 +119,12 @@ export const eventRoutes: RouteConfig[] = [ name: EventRouteName.EVENT_PARTICIPATE_WITHOUT_ACCOUNT, component: (): Promise<ImportedComponent> => import("../components/Participation/ParticipationWithoutAccount.vue"), + meta: { + announcer: { + message: (): string => + i18n.t("Participation without account") as string, + }, + }, props: true, }, { @@ -106,6 +132,11 @@ export const eventRoutes: RouteConfig[] = [ name: EventRouteName.EVENT_PARTICIPATE_CONFIRM, component: (): Promise<ImportedComponent> => import("../components/Participation/ConfirmParticipation.vue"), + meta: { + announcer: { + message: (): string => i18n.t("Confirm participation") as string, + }, + }, props: true, }, { @@ -114,6 +145,9 @@ export const eventRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "Search" */ "@/views/Search.vue"), props: true, - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Tag search") as string }, + }, }, ]; diff --git a/js/src/router/groups.ts b/js/src/router/groups.ts index c6f370d1c..7ebdbc828 100644 --- a/js/src/router/groups.ts +++ b/js/src/router/groups.ts @@ -33,7 +33,7 @@ export const groupsRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import("@/views/Todos/TodoLists.vue"), props: true, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "/todo-lists/:id", @@ -41,7 +41,7 @@ export const groupsRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import("@/views/Todos/TodoList.vue"), props: true, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "/todo/:todoId", @@ -49,21 +49,21 @@ export const groupsRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import("@/views/Todos/Todo.vue"), props: true, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "/@:preferredUsername/resources", name: GroupsRouteName.RESOURCE_FOLDER_ROOT, component: resourceFolder, props: { path: "/" }, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "/@:preferredUsername/resources/:path+", name: GroupsRouteName.RESOURCE_FOLDER, component: resourceFolder, props: true, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "/@:preferredUsername/settings", @@ -79,6 +79,7 @@ export const groupsRoutes: RouteConfig[] = [ name: GroupsRouteName.GROUP_PUBLIC_SETTINGS, component: (): Promise<ImportedComponent> => import("../views/Group/GroupSettings.vue"), + meta: { announcer: { skip: true } }, }, { path: "members", @@ -86,6 +87,7 @@ export const groupsRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import("../views/Group/GroupMembers.vue"), props: true, + meta: { announcer: { skip: true } }, }, { path: "followers", @@ -93,6 +95,7 @@ export const groupsRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import("../views/Group/GroupFollowers.vue"), props: true, + meta: { announcer: { skip: true } }, }, ], }, @@ -102,7 +105,7 @@ export const groupsRoutes: RouteConfig[] = [ import("@/views/Posts/Edit.vue"), props: true, name: GroupsRouteName.POST_CREATE, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "/p/:slug/edit", @@ -113,7 +116,7 @@ export const groupsRoutes: RouteConfig[] = [ ...{ isUpdate: true }, }), name: GroupsRouteName.POST_EDIT, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "/p/:slug", @@ -121,7 +124,7 @@ export const groupsRoutes: RouteConfig[] = [ import("@/views/Posts/Post.vue"), props: true, name: GroupsRouteName.POST, - meta: { requiredAuth: false }, + meta: { requiredAuth: false, announcer: { skip: true } }, }, { path: "/@:preferredUsername/p", @@ -129,14 +132,14 @@ export const groupsRoutes: RouteConfig[] = [ import("@/views/Posts/List.vue"), props: true, name: GroupsRouteName.POSTS, - meta: { requiredAuth: false }, + meta: { requiredAuth: false, announcer: { skip: true } }, }, { path: "/@:preferredUsername/events", component: groupEvents, props: true, name: GroupsRouteName.GROUP_EVENTS, - meta: { requiredAuth: false }, + meta: { requiredAuth: false, announcer: { skip: true } }, }, { path: "/@:preferredUsername/join", @@ -144,7 +147,7 @@ export const groupsRoutes: RouteConfig[] = [ import("@/components/Group/JoinGroupWithAccount.vue"), props: true, name: GroupsRouteName.GROUP_JOIN, - meta: { requiredAuth: false }, + meta: { requiredAuth: false, announcer: { skip: true } }, }, { path: "/@:preferredUsername/timeline", @@ -152,6 +155,6 @@ export const groupsRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import("@/views/Group/Timeline.vue"), props: true, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, ]; diff --git a/js/src/router/index.ts b/js/src/router/index.ts index c26374ec4..0ca197452 100644 --- a/js/src/router/index.ts +++ b/js/src/router/index.ts @@ -13,6 +13,7 @@ import { groupsRoutes } from "./groups"; import { discussionRoutes } from "./discussion"; import { userRoutes } from "./user"; import RouteName from "./name"; +import { i18n } from "@/utils/i18n"; Vue.use(Router); @@ -49,13 +50,19 @@ export const routes = [ component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "Search" */ "@/views/Search.vue"), props: true, - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Search") as string }, + }, }, { path: "/", name: RouteName.HOME, component: Home, - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Homepage") as string }, + }, }, { path: "/about", @@ -72,27 +79,41 @@ export const routes = [ import( /* webpackChunkName: "about" */ "@/views/About/AboutInstance.vue" ), + meta: { + announcer: { + message: (): string => i18n.t("About instance") as string, + }, + }, }, { path: "/terms", name: RouteName.TERMS, component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "cookies" */ "@/views/About/Terms.vue"), - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Terms") as string }, + }, }, { path: "/privacy", name: RouteName.PRIVACY, component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "cookies" */ "@/views/About/Privacy.vue"), - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Privacy") as string }, + }, }, { path: "/rules", name: RouteName.RULES, component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "cookies" */ "@/views/About/Rules.vue"), - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Rules") as string }, + }, }, { path: "/glossary", @@ -101,7 +122,10 @@ export const routes = [ import( /* webpackChunkName: "cookies" */ "@/views/About/Glossary.vue" ), - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Glossary") as string }, + }, }, ], }, @@ -110,7 +134,10 @@ export const routes = [ name: RouteName.INTERACT, component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "interact" */ "@/views/Interact.vue"), - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Interact") as string }, + }, }, { path: "/auth/:provider/callback", @@ -119,6 +146,11 @@ export const routes = [ import( /* webpackChunkName: "ProviderValidation" */ "@/views/User/ProviderValidation.vue" ), + meta: { + announcer: { + message: (): string => i18n.t("Redirecting to Mobilizon") as string, + }, + }, }, { path: "/welcome/:step?", @@ -127,7 +159,10 @@ export const routes = [ import( /* webpackChunkName: "WelcomeScreen" */ "@/views/User/SettingsOnboard.vue" ), - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { message: (): string => i18n.t("First steps") as string }, + }, props: (route: Route): Record<string, unknown> => { const step = Number.parseInt(route.params.step, 10); if (Number.isNaN(step)) { @@ -143,7 +178,10 @@ export const routes = [ import( /* webpackChunkName: "PageNotFound" */ "../views/PageNotFound.vue" ), - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Page not found") as string }, + }, }, { path: "*", diff --git a/js/src/router/settings.ts b/js/src/router/settings.ts index b118dd5c6..29b3de00c 100644 --- a/js/src/router/settings.ts +++ b/js/src/router/settings.ts @@ -1,5 +1,6 @@ import { Route, RouteConfig } from "vue-router"; import { ImportedComponent } from "vue/types/options"; +import { i18n } from "@/utils/i18n"; export enum SettingsRouteName { SETTINGS = "SETTINGS", @@ -34,7 +35,7 @@ export const settingsRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "Settings" */ "@/views/Settings.vue"), props: true, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, redirect: { name: SettingsRouteName.ACCOUNT_SETTINGS }, name: SettingsRouteName.SETTINGS, children: [ @@ -42,7 +43,10 @@ export const settingsRoutes: RouteConfig[] = [ path: "account", name: SettingsRouteName.ACCOUNT_SETTINGS, redirect: { name: SettingsRouteName.ACCOUNT_SETTINGS_GENERAL }, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { skip: true }, + }, }, { path: "account/general", @@ -52,7 +56,12 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "AccountSettings" */ "@/views/Settings/AccountSettings.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Account settings") as string, + }, + }, }, { path: "preferences", @@ -62,7 +71,10 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "Preferences" */ "@/views/Settings/Preferences.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { message: (): string => i18n.t("Preferences") as string }, + }, }, { path: "notifications", @@ -72,13 +84,18 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "Notifications" */ "@/views/Settings/Notifications.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Notifications") as string, + }, + }, }, { path: "admin", name: SettingsRouteName.ADMIN, redirect: { name: SettingsRouteName.ADMIN_DASHBOARD }, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "admin/dashboard", @@ -87,7 +104,12 @@ export const settingsRoutes: RouteConfig[] = [ import( /* webpackChunkName: "Dashboard" */ "@/views/Admin/Dashboard.vue" ), - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Admin dashboard") as string, + }, + }, }, { path: "admin/settings", @@ -97,7 +119,12 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "AdminSettings" */ "@/views/Admin/Settings.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Admin settings") as string, + }, + }, }, { path: "admin/users", @@ -105,7 +132,10 @@ export const settingsRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "Users" */ "@/views/Admin/Users.vue"), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { message: (): string => i18n.t("Users") as string }, + }, }, { path: "admin/users/:id", @@ -115,7 +145,10 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "AdminUserProfile" */ "@/views/Admin/AdminUserProfile.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { skip: true }, + }, }, { path: "admin/profiles", @@ -125,7 +158,10 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "AdminProfiles" */ "@/views/Admin/Profiles.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { message: (): string => i18n.t("Profiles") as string }, + }, }, { path: "admin/profiles/:id", @@ -135,7 +171,7 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "AdminProfile" */ "@/views/Admin/AdminProfile.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "admin/groups", @@ -145,7 +181,12 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "GroupProfiles" */ "@/views/Admin/GroupProfiles.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Group profiles") as string, + }, + }, }, { path: "admin/groups/:id", @@ -155,7 +196,7 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "AdminGroupProfile" */ "@/views/Admin/AdminGroupProfile.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "admin/relays", @@ -163,7 +204,7 @@ export const settingsRoutes: RouteConfig[] = [ redirect: { name: SettingsRouteName.RELAY_FOLLOWINGS }, component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "Follows" */ "@/views/Admin/Follows.vue"), - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, children: [ { path: "followings", @@ -172,7 +213,12 @@ export const settingsRoutes: RouteConfig[] = [ import( /* webpackChunkName: "Followings" */ "@/components/Admin/Followings.vue" ), - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Followings") as string, + }, + }, }, { path: "followers", @@ -181,7 +227,12 @@ export const settingsRoutes: RouteConfig[] = [ import( /* webpackChunkName: "Followers" */ "@/components/Admin/Followers.vue" ), - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Followers") as string, + }, + }, }, ], props: true, @@ -190,7 +241,7 @@ export const settingsRoutes: RouteConfig[] = [ path: "/moderation", name: SettingsRouteName.MODERATION, redirect: { name: SettingsRouteName.REPORTS }, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "/moderation/reports/:filter?", @@ -200,7 +251,12 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "ReportList" */ "@/views/Moderation/ReportList.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Reports list") as string, + }, + }, }, { path: "/moderation/report/:reportId", @@ -210,7 +266,10 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "Report" */ "@/views/Moderation/Report.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { message: (): string => i18n.t("Report") as string }, + }, }, { path: "/moderation/logs", @@ -220,13 +279,18 @@ export const settingsRoutes: RouteConfig[] = [ /* webpackChunkName: "ModerationLogs" */ "@/views/Moderation/Logs.vue" ), props: true, - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Moderation logs") as string, + }, + }, }, { path: "/identity", name: SettingsRouteName.IDENTITIES, redirect: { name: SettingsRouteName.UPDATE_IDENTITY }, - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, { path: "/identity/create", @@ -239,7 +303,12 @@ export const settingsRoutes: RouteConfig[] = [ identityName: route.params.identityName, isUpdate: false, }), - meta: { requiredAuth: true }, + meta: { + requiredAuth: true, + announcer: { + message: (): string => i18n.t("Create identity") as string, + }, + }, }, { path: "/identity/update/:identityName?", @@ -252,7 +321,7 @@ export const settingsRoutes: RouteConfig[] = [ identityName: route.params.identityName, isUpdate: true, }), - meta: { requiredAuth: true }, + meta: { requiredAuth: true, announcer: { skip: true } }, }, ], }, diff --git a/js/src/router/user.ts b/js/src/router/user.ts index 51079b869..2089df9a7 100644 --- a/js/src/router/user.ts +++ b/js/src/router/user.ts @@ -1,6 +1,7 @@ import { beforeRegisterGuard } from "@/router/guards/register-guard"; import { Route, RouteConfig } from "vue-router"; import { ImportedComponent } from "vue/types/options"; +import { i18n } from "@/utils/i18n"; export enum UserRouteName { REGISTER = "Register", @@ -22,7 +23,10 @@ export const userRoutes: RouteConfig[] = [ /* webpackChunkName: "RegisterUser" */ "@/views/User/Register.vue" ), props: true, - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Register") as string }, + }, beforeEnter: beforeRegisterGuard, }, { @@ -37,7 +41,10 @@ export const userRoutes: RouteConfig[] = [ email: route.params.email, userAlreadyActivated: route.params.userAlreadyActivated === "true", }), - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Register") as string }, + }, }, { path: "/resend-instructions", @@ -47,7 +54,12 @@ export const userRoutes: RouteConfig[] = [ /* webpackChunkName: "ResendConfirmation" */ "@/views/User/ResendConfirmation.vue" ), props: true, - meta: { requiresAuth: false }, + meta: { + requiresAuth: false, + announcer: { + message: (): string => i18n.t("Resent confirmation email") as string, + }, + }, }, { path: "/password-reset/send", @@ -57,7 +69,12 @@ export const userRoutes: RouteConfig[] = [ /* webpackChunkName: "SendPasswordReset" */ "@/views/User/SendPasswordReset.vue" ), props: true, - meta: { requiresAuth: false }, + meta: { + requiresAuth: false, + announcer: { + message: (): string => i18n.t("Send password reset") as string, + }, + }, }, { path: "/password-reset/:token", @@ -66,7 +83,10 @@ export const userRoutes: RouteConfig[] = [ import( /* webpackChunkName: "PasswordReset" */ "@/views/User/PasswordReset.vue" ), - meta: { requiresAuth: false }, + meta: { + requiresAuth: false, + announcer: { message: (): string => i18n.t("Password reset") as string }, + }, props: true, }, { @@ -77,7 +97,10 @@ export const userRoutes: RouteConfig[] = [ /* webpackChunkName: "EmailValidate" */ "@/views/User/EmailValidate.vue" ), props: true, - meta: { requiresAuth: false }, + meta: { + requiresAuth: false, + announcer: { message: (): string => i18n.t("Email validate") as string }, + }, }, { path: "/validate/:token", @@ -85,7 +108,12 @@ export const userRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "Validate" */ "@/views/User/Validate.vue"), props: true, - meta: { requiresAuth: false }, + meta: { + requiresAuth: false, + announcer: { + message: (): string => i18n.t("Validating account") as string, + }, + }, }, { path: "/login", @@ -93,6 +121,9 @@ export const userRoutes: RouteConfig[] = [ component: (): Promise<ImportedComponent> => import(/* webpackChunkName: "Login" */ "@/views/User/Login.vue"), props: true, - meta: { requiredAuth: false }, + meta: { + requiredAuth: false, + announcer: { message: (): string => i18n.t("Login") as string }, + }, }, ]; diff --git a/js/src/types/event.model.ts b/js/src/types/event.model.ts index 85bfd22a3..7842b7be4 100644 --- a/js/src/types/event.model.ts +++ b/js/src/types/event.model.ts @@ -82,7 +82,7 @@ export interface IEvent { onlineAddress?: string; phoneAddress?: string; - physicalAddress?: IAddress; + physicalAddress: IAddress | null; tags: ITag[]; options: IEventOptions; @@ -115,7 +115,7 @@ export class EventModel implements IEvent { phoneAddress: string | undefined = ""; - physicalAddress?: IAddress; + physicalAddress: IAddress | null = null; picture: IMedia | null = null; @@ -192,7 +192,7 @@ export class EventModel implements IEvent { this.phoneAddress = hash.phoneAddress; this.physicalAddress = hash.physicalAddress ? new Address(hash.physicalAddress) - : undefined; + : null; this.participantStats = hash.participantStats; this.contacts = hash.contacts; diff --git a/js/src/views/About.vue b/js/src/views/About.vue index ce838171c..964811c43 100644 --- a/js/src/views/About.vue +++ b/js/src/views/About.vue @@ -1,28 +1,6 @@ <template> <div> - <div class="hero intro is-small is-primary"> - <div class="hero-body"> - <div class="container"> - <h1 class="title">{{ $t("About Mobilizon") }}</h1> - <p> - {{ - $t( - "A user-friendly, emancipatory and ethical tool for gathering, organising, and mobilising." - ) - }} - </p> - <b-button - icon-left="open-in-new" - size="is-large" - type="is-secondary" - tag="a" - href="https://joinmobilizon.org" - >{{ $t("Learn more") }}</b-button - > - </div> - </div> - </div> - <main class="container"> + <section class="container"> <div class="columns"> <div class="column is-one-quarter-desktop"> <aside class="menu"> @@ -62,8 +40,29 @@ <router-view /> </div> </div> - </main> - + </section> + <div class="hero intro is-small is-secondary"> + <div class="hero-body"> + <div class="container"> + <h1 class="title">{{ $t("Powered by Mobilizon") }}</h1> + <p> + {{ + $t( + "A user-friendly, emancipatory and ethical tool for gathering, organising, and mobilising." + ) + }} + </p> + <b-button + icon-left="open-in-new" + size="is-large" + type="is-primary" + tag="a" + href="https://joinmobilizon.org" + >{{ $t("Learn more") }}</b-button + > + </div> + </div> + </div> <div class="hero register is-primary is-medium" v-if="!currentUser || !currentUser.id" diff --git a/js/src/views/About/AboutInstance.vue b/js/src/views/About/AboutInstance.vue index 07591e325..433a9a716 100644 --- a/js/src/views/About/AboutInstance.vue +++ b/js/src/views/About/AboutInstance.vue @@ -3,7 +3,7 @@ <section class="hero is-primary"> <div class="hero-body"> <div class="container"> - <h2 class="title">{{ config.name }}</h2> + <h1 class="title">{{ config.name }}</h1> <p>{{ config.description }}</p> </div> </div> @@ -24,7 +24,7 @@ </i18n> </div> <div class="column contact"> - <h4>{{ $t("Contact") }}</h4> + <p class="has-text-weight-bold">{{ $t("Contact") }}</p> <instance-contact-link v-if="config && config.contact" :contact="config.contact" @@ -32,13 +32,13 @@ <p v-else>{{ $t("No information") }}</p> </div> </section> - <hr /> + <hr role="presentation" /> <section class="long-description content"> <div v-html="config.longDescription" /> </section> - <hr /> + <hr role="presentation" /> <section class="config"> - <h3 class="subtitle">{{ $t("Instance configuration") }}</h3> + <h2 class="subtitle">{{ $t("Instance configuration") }}</h2> <table class="table is-fullwidth"> <tr> <td>{{ $t("Instance languages") }}</td> @@ -168,7 +168,7 @@ section { } &.hero { - h2.title { + h1.title { margin: auto; } } @@ -195,7 +195,7 @@ section { } } .contact { - h4 { + h3 { font-weight: bold; } p { diff --git a/js/src/views/Admin/AdminProfile.vue b/js/src/views/Admin/AdminProfile.vue index 96ebf0a4f..58f88b16a 100644 --- a/js/src/views/Admin/AdminProfile.vue +++ b/js/src/views/Admin/AdminProfile.vue @@ -307,6 +307,14 @@ const MEMBERSHIPS_PER_PAGE = 10; ActorCard, EmptyContent, }, + metaInfo() { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const { person } = this; + return { + title: person ? person.name || usernameWithDomain(person) : "", + }; + }, }) export default class AdminProfile extends Vue { @Prop({ required: true }) id!: string; diff --git a/js/src/views/Admin/AdminUserProfile.vue b/js/src/views/Admin/AdminUserProfile.vue index e5ee8784e..cfb0b5759 100644 --- a/js/src/views/Admin/AdminUserProfile.vue +++ b/js/src/views/Admin/AdminUserProfile.vue @@ -96,6 +96,14 @@ import { IPerson } from "../../types/actor"; }, }, }, + metaInfo() { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const { user } = this; + return { + title: user.email, + }; + }, }) export default class AdminUserProfile extends Vue { @Prop({ required: true }) id!: string; diff --git a/js/src/views/Admin/Follows.vue b/js/src/views/Admin/Follows.vue index 2d9b6e599..d23a53cbc 100644 --- a/js/src/views/Admin/Follows.vue +++ b/js/src/views/Admin/Follows.vue @@ -87,6 +87,11 @@ import RouteName from "../../router/name"; }, }, }, + metaInfo() { + return { + title: this.$t("Follows") as string, + }; + }, }) export default class Follows extends Vue { RouteName = RouteName; diff --git a/js/src/views/Discussions/Create.vue b/js/src/views/Discussions/Create.vue index 3c692e0e7..bbcbf560a 100644 --- a/js/src/views/Discussions/Create.vue +++ b/js/src/views/Discussions/Create.vue @@ -55,7 +55,7 @@ </b-field> <b-field :label="$t('Text')"> - <editor v-model="discussion.text" /> + <editor v-model="discussion.text" :aria-label="$t('Comment body')" /> </b-field> <button class="button is-primary" type="submit"> diff --git a/js/src/views/Discussions/Discussion.vue b/js/src/views/Discussions/Discussion.vue index 411bcebdb..a016318d1 100644 --- a/js/src/views/Discussions/Discussion.vue +++ b/js/src/views/Discussions/Discussion.vue @@ -125,7 +125,7 @@ > <form @submit.prevent="reply" v-if="!error"> <b-field :label="$t('Text')"> - <editor v-model="newComment" /> + <editor v-model="newComment" :aria-label="$t('Comment body')" /> </b-field> <b-button native-type="submit" diff --git a/js/src/views/Event/Edit.vue b/js/src/views/Event/Edit.vue index 0aa02ec65..17646646d 100644 --- a/js/src/views/Event/Edit.vue +++ b/js/src/views/Event/Edit.vue @@ -84,7 +84,10 @@ <div class="field"> <label class="label">{{ $t("Description") }}</label> - <editor v-model="event.description" /> + <editor + v-model="event.description" + :aria-label="$t('Event description body')" + /> </div> <b-field :label="$t('Website / URL')" label-for="website-url"> diff --git a/js/src/views/Event/Event.vue b/js/src/views/Event/Event.vue index bd0ded10e..bcf387f9d 100755 --- a/js/src/views/Event/Event.vue +++ b/js/src/views/Event/Event.vue @@ -245,12 +245,14 @@ aria-role="listitem" v-if="canManageEvent || event.draft" @click="openDeleteEventModalWrapper" + @keyup.enter="openDeleteEventModalWrapper" > {{ $t("Delete") }} <b-icon icon="delete" /> </b-dropdown-item> <hr + role="presentation" class="dropdown-divider" aria-role="menuitem" v-if="canManageEvent || event.draft" @@ -259,6 +261,7 @@ aria-role="listitem" v-if="!event.draft" @click="triggerShare()" + @keyup.enter="triggerShare()" > <span> {{ $t("Share this event") }} @@ -268,6 +271,7 @@ <b-dropdown-item aria-role="listitem" @click="downloadIcsEvent()" + @keyup.enter="downloadIcsEvent()" v-if="!event.draft" > <span> @@ -279,6 +283,7 @@ aria-role="listitem" v-if="ableToReport" @click="isReportModalActive = true" + @keyup.enter="isReportModalActive = true" > <span> {{ $t("Report") }} @@ -379,6 +384,7 @@ class="button" ref="cancelButton" @click="isJoinModalActive = false" + @keyup.enter="isJoinModalActive = false" > {{ $t("Cancel") }} </button> @@ -390,6 +396,11 @@ ? joinEventWithConfirmation(identity) : joinEvent(identity) " + @keyup.enter=" + event.joinOptions === EventJoinOptions.RESTRICTED + ? joinEventWithConfirmation(identity) + : joinEvent(identity) + " > {{ $t("Confirm my particpation") }} </button> @@ -436,6 +447,7 @@ class="button" ref="cancelButton" @click="isJoinConfirmationModalActive = false" + @keyup.enter="isJoinConfirmationModalActive = false" >{{ $t("Cancel") }} </b-button> <b-button type="is-primary" native-type="submit"> diff --git a/js/src/views/Event/Participants.vue b/js/src/views/Event/Participants.vue index 2e8e247a9..b90a09872 100644 --- a/js/src/views/Event/Participants.vue +++ b/js/src/views/Event/Participants.vue @@ -62,13 +62,17 @@ </template> <b-dropdown-item + has-link v-for="format in exportFormats" :key="format" - @click="exportParticipants(format)" aria-role="listitem" + @click="exportParticipants(format)" + @keyup.enter="exportParticipants(format)" > - <b-icon :icon="formatToIcon(format)"></b-icon> - {{ format }} + <button class="dropdown-button"> + <b-icon :icon="formatToIcon(format)"></b-icon> + {{ format }} + </button> </b-dropdown-item> </b-dropdown> </div> @@ -566,4 +570,21 @@ nav.breadcrumb { text-decoration: none; } } + +button.dropdown-button { + &:hover { + background-color: #f5f5f5; + color: #0a0a0a; + } + width: 100%; + display: flex; + flex: 1; + background: white; + border: none; + cursor: pointer; + color: #4a4a4a; + font-size: 0.875rem; + line-height: 1.5; + padding: 0.375rem 1rem; +} </style> diff --git a/js/src/views/Group/Group.vue b/js/src/views/Group/Group.vue index 8a867ca1d..2cde993c2 100644 --- a/js/src/views/Group/Group.vue +++ b/js/src/views/Group/Group.vue @@ -203,6 +203,7 @@ </span> </b-dropdown-item> <hr + role="presentation" class="dropdown-divider" v-if="isCurrentActorAGroupMember" /> @@ -224,7 +225,7 @@ {{ $t("ICS/WebCal Feed") }} </a> </b-dropdown-item> - <hr class="dropdown-divider" /> + <hr role="presentation" class="dropdown-divider" /> <b-dropdown-item v-if="ableToReport" aria-role="menuitem" diff --git a/js/src/views/Group/GroupSettings.vue b/js/src/views/Group/GroupSettings.vue index 561c9054e..603c4de66 100644 --- a/js/src/views/Group/GroupSettings.vue +++ b/js/src/views/Group/GroupSettings.vue @@ -41,7 +41,11 @@ <b-input v-model="editableGroup.name" id="group-settings-name" /> </b-field> <b-field :label="$t('Group short description')"> - <editor mode="basic" v-model="editableGroup.summary" :maxSize="500" + <editor + mode="basic" + v-model="editableGroup.summary" + :maxSize="500" + :aria-label="$t('Group description body')" /></b-field> <b-field :label="$t('Avatar')"> <picture-upload diff --git a/js/src/views/Group/Settings.vue b/js/src/views/Group/Settings.vue index ddf664c27..d846d8b37 100644 --- a/js/src/views/Group/Settings.vue +++ b/js/src/views/Group/Settings.vue @@ -39,6 +39,11 @@ import SettingMenuItem from "../../components/Settings/SettingMenuItem.vue"; @Component({ components: { SettingMenuSection, SettingMenuItem }, + metaInfo() { + return { + title: this.$t("Group settings") as string, + }; + }, }) export default class Settings extends mixins(GroupMixin) { RouteName = RouteName; diff --git a/js/src/views/Home.vue b/js/src/views/Home.vue index fd60ac694..6e55b6e22 100644 --- a/js/src/views/Home.vue +++ b/js/src/views/Home.vue @@ -241,6 +241,7 @@ </span> </section> <hr + role="presentation" class="home-separator" v-if="canShowMyUpcomingEvents && canShowLastWeekEvents" /> @@ -259,6 +260,7 @@ </div> </section> <hr + role="presentation" class="home-separator" v-if="canShowLastWeekEvents && canShowCloseEvents" /> @@ -297,6 +299,7 @@ </div> </section> <hr + role="presentation" class="home-separator" v-if=" canShowMyUpcomingEvents || canShowLastWeekEvents || canShowCloseEvents diff --git a/js/src/views/Moderation/Logs.vue b/js/src/views/Moderation/Logs.vue index 3cda6cd1d..4e6be0c7a 100644 --- a/js/src/views/Moderation/Logs.vue +++ b/js/src/views/Moderation/Logs.vue @@ -395,6 +395,11 @@ import { Paginate } from "@/types/paginate"; }, }, }, + metaInfo() { + return { + title: this.$t("Moderation logs") as string, + }; + }, }) export default class ReportList extends Vue { actionLogs?: Paginate<IActionLog> = { total: 0, elements: [] }; diff --git a/js/src/views/Moderation/ReportList.vue b/js/src/views/Moderation/ReportList.vue index 928e19c35..bce76169d 100644 --- a/js/src/views/Moderation/ReportList.vue +++ b/js/src/views/Moderation/ReportList.vue @@ -111,6 +111,11 @@ const REPORT_PAGE_LIMIT = 10; pollInterval: 120000, // 2 minutes }, }, + metaInfo() { + return { + title: this.$t("Reports") as string, + }; + }, }) export default class ReportList extends Vue { reports?: Paginate<IReport> = { elements: [], total: 0 }; diff --git a/js/src/views/Posts/Edit.vue b/js/src/views/Posts/Edit.vue index 899dc3d72..91bf702b9 100644 --- a/js/src/views/Posts/Edit.vue +++ b/js/src/views/Posts/Edit.vue @@ -72,7 +72,7 @@ <div class="field"> <label class="label">{{ $t("Post") }}</label> <p v-if="errors.body" class="help is-danger">{{ errors.body }}</p> - <editor v-model="editablePost.body" /> + <editor v-model="editablePost.body" :aria-label="$t('Post body')" /> </div> <subtitle>{{ $t("Who can view this post") }}</subtitle> <fieldset> diff --git a/js/src/views/Posts/List.vue b/js/src/views/Posts/List.vue index 85288374e..14d87b781 100644 --- a/js/src/views/Posts/List.vue +++ b/js/src/views/Posts/List.vue @@ -127,11 +127,13 @@ const POSTS_PAGE_LIMIT = 10; PostElementItem, }, metaInfo() { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const { group } = this; return { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - title: this.$t("My groups") as string, - titleTemplate: "%s | Mobilizon", + title: this.$t("{group} posts", { + group: group.name || usernameWithDomain(group), + }) as string, }; }, }) diff --git a/js/src/views/Resources/ResourceFolder.vue b/js/src/views/Resources/ResourceFolder.vue index 360c85892..c830327b4 100644 --- a/js/src/views/Resources/ResourceFolder.vue +++ b/js/src/views/Resources/ResourceFolder.vue @@ -58,6 +58,7 @@ {{ $t("New link") }} </b-dropdown-item> <hr + role="presentation" class="dropdown-divider" v-if="config.resourceProviders.length" /> diff --git a/js/src/views/Settings/Notifications.vue b/js/src/views/Settings/Notifications.vue index adb60576c..cf3abb3a5 100644 --- a/js/src/views/Settings/Notifications.vue +++ b/js/src/views/Settings/Notifications.vue @@ -18,12 +18,16 @@ <div class="setting-title"> <h2>{{ $t("Browser notifications") }}</h2> </div> - <b-button v-if="subscribed" @click="unsubscribeToWebPush()">{{ - $t("Unsubscribe to browser push notifications") - }}</b-button> + <b-button + v-if="subscribed" + @click="unsubscribeToWebPush()" + @keyup.enter="unsubscribeToWebPush()" + >{{ $t("Unsubscribe to browser push notifications") }}</b-button + > <b-button icon-left="rss" @click="subscribeToWebPush" + @keyup.enter="subscribeToWebPush" v-else-if="canShowWebPush && webPushEnabled" >{{ $t("Activate browser push notifications") }}</b-button > @@ -247,6 +251,9 @@ @click=" (e) => copyURL(e, tokenToURL(feedToken.token, 'atom'), 'atom') " + @keyup.enter=" + (e) => copyURL(e, tokenToURL(feedToken.token, 'atom'), 'atom') + " :href="tokenToURL(feedToken.token, 'atom')" target="_blank" >{{ $t("RSS/Atom Feed") }}</b-button @@ -264,6 +271,9 @@ @click=" (e) => copyURL(e, tokenToURL(feedToken.token, 'ics'), 'ics') " + @keyup.enter=" + (e) => copyURL(e, tokenToURL(feedToken.token, 'ics'), 'ics') + " icon-left="calendar-sync" :href="tokenToURL(feedToken.token, 'ics')" target="_blank" @@ -274,6 +284,7 @@ icon-left="refresh" type="is-text" @click="openRegenerateFeedTokensConfirmation" + @keyup.enter="openRegenerateFeedTokensConfirmation" >{{ $t("Regenerate new links") }}</b-button > </div> @@ -283,6 +294,7 @@ icon-left="refresh" type="is-text" @click="generateFeedTokens" + @keyup.enter="generateFeedTokens" >{{ $t("Create new links") }}</b-button > </div> @@ -333,7 +345,7 @@ type NotificationType = { label: string; subtypes: NotificationSubType[] }; }, metaInfo() { return { - title: this.$t("Notifications") as string, + title: this.$t("Notification settings") as string, }; }, }) diff --git a/js/src/views/Settings/Preferences.vue b/js/src/views/Settings/Preferences.vue index 521ed247a..95543b864 100644 --- a/js/src/views/Settings/Preferences.vue +++ b/js/src/views/Settings/Preferences.vue @@ -61,7 +61,7 @@ <b-message v-else type="is-danger">{{ $t("Unable to detect timezone.") }}</b-message> - <hr /> + <hr role="presentation" /> <b-field grouped> <b-field :label="$t('City or region')" @@ -95,6 +95,7 @@ <b-button :disabled="address == undefined" @click="resetArea" + @keyup.enter="resetArea" class="reset-area" icon-left="close" :aria-label="$t('Reset')" diff --git a/js/src/views/Todos/Todo.vue b/js/src/views/Todos/Todo.vue index 89e5288df..b8970e8a9 100644 --- a/js/src/views/Todos/Todo.vue +++ b/js/src/views/Todos/Todo.vue @@ -55,6 +55,14 @@ import RouteName from "../../router/name"; }, }, }, + metaInfo() { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const { todo } = this; + return { + title: todo.title, + }; + }, }) export default class Todo extends Vue { @Prop({ type: String, required: true }) todoId!: string; diff --git a/js/src/views/Todos/TodoList.vue b/js/src/views/Todos/TodoList.vue index c980c46af..1aaa103ce 100644 --- a/js/src/views/Todos/TodoList.vue +++ b/js/src/views/Todos/TodoList.vue @@ -69,6 +69,14 @@ import { ApolloCache, FetchResult, InMemoryCache } from "@apollo/client/core"; }, currentActor: CURRENT_ACTOR_CLIENT, }, + metaInfo() { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const { todoList } = this; + return { + title: todoList.title, + }; + }, }) export default class TodoList extends Vue { @Prop({ type: String, required: true }) id!: string; diff --git a/js/src/views/Todos/TodoLists.vue b/js/src/views/Todos/TodoLists.vue index 1d86d5a43..c58d7372f 100644 --- a/js/src/views/Todos/TodoLists.vue +++ b/js/src/views/Todos/TodoLists.vue @@ -82,6 +82,16 @@ import RouteName from "../../router/name"; components: { CompactTodo, }, + metaInfo() { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const { group } = this; + return { + title: this.$t("{group}'s todolists", { + group: group.name || usernameWithDomain(group), + }) as string, + }; + }, }) export default class TodoLists extends Vue { @Prop({ type: String, required: true }) preferredUsername!: string; diff --git a/js/src/views/User/EmailValidate.vue b/js/src/views/User/EmailValidate.vue index f6085314b..516fb5243 100644 --- a/js/src/views/User/EmailValidate.vue +++ b/js/src/views/User/EmailValidate.vue @@ -24,7 +24,13 @@ import { VALIDATE_EMAIL } from "../../graphql/user"; import RouteName from "../../router/name"; import { ICurrentUser } from "../../types/current-user.model"; -@Component +@Component({ + metaInfo() { + return { + title: this.$t("Validating email") as string, + }; + }, +}) export default class Validate extends Vue { @Prop({ type: String, required: true }) token!: string; diff --git a/js/src/views/User/PasswordReset.vue b/js/src/views/User/PasswordReset.vue index 2987984d6..907ef021b 100644 --- a/js/src/views/User/PasswordReset.vue +++ b/js/src/views/User/PasswordReset.vue @@ -50,7 +50,13 @@ import { saveUserData } from "../../utils/auth"; import { ILogin } from "../../types/login.model"; import RouteName from "../../router/name"; -@Component +@Component({ + metaInfo() { + return { + title: this.$t("Password reset") as string, + }; + }, +}) export default class PasswordReset extends Vue { @Prop({ type: String, required: true }) token!: string; diff --git a/js/src/views/User/ProviderValidation.vue b/js/src/views/User/ProviderValidation.vue index 8e84167c4..d2d49a52b 100644 --- a/js/src/views/User/ProviderValidation.vue +++ b/js/src/views/User/ProviderValidation.vue @@ -9,7 +9,13 @@ import RouteName from "../../router/name"; import { saveUserData, changeIdentity } from "../../utils/auth"; import { IUser } from "../../types/current-user.model"; -@Component +@Component({ + metaInfo() { + return { + title: this.$t("Redirecting to Mobilizon") as string, + }; + }, +}) export default class ProviderValidate extends Vue { async mounted(): Promise<void> { const accessToken = this.getValueFromMeta("auth-access-token"); diff --git a/js/src/views/User/Register.vue b/js/src/views/User/Register.vue index 8d8b10ccb..a1638a75d 100644 --- a/js/src/views/User/Register.vue +++ b/js/src/views/User/Register.vue @@ -59,7 +59,7 @@ <router-link class="out" :to="{ name: RouteName.ABOUT }">{{ $t("Learn more") }}</router-link> - <hr /> + <hr role="presentation" /> <div class="content"> <subtitle>{{ $t("About {instance}", { instance: config.name }) @@ -170,7 +170,7 @@ > </p> - <hr /> + <hr role="presentation" /> <div class="control" v-if="config && config.auth.oauthProviders.length > 0" diff --git a/js/src/views/User/ResendConfirmation.vue b/js/src/views/User/ResendConfirmation.vue index 3b32b0874..a791e5dc2 100644 --- a/js/src/views/User/ResendConfirmation.vue +++ b/js/src/views/User/ResendConfirmation.vue @@ -56,7 +56,13 @@ import { import { RESEND_CONFIRMATION_EMAIL } from "../../graphql/auth"; import RouteName from "../../router/name"; -@Component +@Component({ + metaInfo() { + return { + title: this.$t("Resend confirmation email") as string, + }; + }, +}) export default class ResendConfirmation extends Vue { @Prop({ type: String, required: false, default: "" }) email!: string; diff --git a/js/src/views/User/SendPasswordReset.vue b/js/src/views/User/SendPasswordReset.vue index 122df2f16..567817811 100644 --- a/js/src/views/User/SendPasswordReset.vue +++ b/js/src/views/User/SendPasswordReset.vue @@ -71,7 +71,13 @@ import { import { SEND_RESET_PASSWORD } from "../../graphql/auth"; import RouteName from "../../router/name"; -@Component +@Component({ + metaInfo() { + return { + title: this.$t("Reset password") as string, + }; + }, +}) export default class SendPasswordReset extends Vue { @Prop({ type: String, required: false, default: "" }) email!: string; diff --git a/js/src/views/User/SettingsOnboard.vue b/js/src/views/User/SettingsOnboard.vue index 8eea99eed..1d8570c60 100644 --- a/js/src/views/User/SettingsOnboard.vue +++ b/js/src/views/User/SettingsOnboard.vue @@ -66,6 +66,11 @@ import { IConfig } from "../../types/config.model"; apollo: { config: TIMEZONES, }, + metaInfo() { + return { + title: this.$t("First steps") as string, + }; + }, }) export default class SettingsOnboard extends Vue { @Prop({ required: false, default: 1, type: Number }) step!: number; diff --git a/js/src/views/User/Validate.vue b/js/src/views/User/Validate.vue index ca5f1c095..7d8f660c6 100644 --- a/js/src/views/User/Validate.vue +++ b/js/src/views/User/Validate.vue @@ -29,7 +29,13 @@ import RouteName from "../../router/name"; import { saveUserData, saveTokenData, changeIdentity } from "../../utils/auth"; import { ILogin } from "../../types/login.model"; -@Component +@Component({ + metaInfo() { + return { + title: this.$t("Validating account") as string, + }; + }, +}) export default class Validate extends Vue { @Prop({ type: String, required: true }) token!: string; diff --git a/js/yarn.lock b/js/yarn.lock index c8c2f5411..40efd271a 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -2254,6 +2254,16 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" +"@vue-a11y/announcer@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@vue-a11y/announcer/-/announcer-2.1.0.tgz#ed725e90b91870c76285840e0aaa637cfafbf27f" + integrity sha512-7V1osiJQxZPBA+2duF2nZugwgbIba/yvKLsHWvGIBJGY0VZhR4vYyFH3VFyFH2Yi46tHEVBN+X+a0uQaJMhCsQ== + +"@vue-a11y/skip-to@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@vue-a11y/skip-to/-/skip-to-2.1.2.tgz#a50f5b97605f5054ca7a7e222bdc721405e38f38" + integrity sha512-oKx0YE/nfWSBI48RKHoRsUmpY0//rDPBZTGk1LxhkkUsXPwzuMlJBFrWGIswdd+3DiIE5OyiDaM45ZldYjtDIA== + "@vue/apollo-option@4.0.0-alpha.11": version "4.0.0-alpha.11" resolved "https://registry.yarnpkg.com/@vue/apollo-option/-/apollo-option-4.0.0-alpha.11.tgz#b4ecac2d1ac40271cb7f20683fb8e4c85974329a" From d58ca5743d4d1b464bf2f34a244a0b5f9569fbf3 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Sun, 10 Oct 2021 16:25:50 +0200 Subject: [PATCH 2/9] Add timezone handling Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- js/package.json | 1 + js/src/components/Address/AddressInfo.vue | 124 +++++++++++ js/src/components/Event/EventFullDate.vue | 186 ++++++++++++---- js/src/components/Event/EventMap.vue | 175 +++++++++++++++ .../components/Event/EventMetadataSidebar.vue | 201 ++---------------- .../Event/FullAddressAutoComplete.vue | 152 +++++++------ js/src/components/NavBar.vue | 9 +- js/src/filters/datetime.ts | 5 +- js/src/graphql/address.ts | 1 + js/src/graphql/config.ts | 25 +++ js/src/graphql/event.ts | 1 + js/src/graphql/user.ts | 11 + js/src/i18n/en_US.json | 46 +++- js/src/i18n/fr_FR.json | 46 +++- js/src/types/address.model.ts | 16 +- js/src/types/event-options.model.ts | 3 + js/src/types/event.model.ts | 21 +- js/src/views/Event/Edit.vue | 199 ++++++++++++++--- js/src/views/Event/Event.vue | 35 ++- .../components/Post/PostElementItem.spec.ts | 2 +- js/tsconfig.json | 2 +- js/yarn.lock | 5 + lib/federation/activity_pub/actor.ex | 4 +- lib/federation/activity_pub/permission.ex | 2 +- lib/federation/activity_pub/types/events.ex | 2 +- lib/graphql/api/events.ex | 6 +- .../middleware/current_actor_provider.ex | 4 +- lib/graphql/resolvers/address.ex | 2 +- lib/graphql/resolvers/event.ex | 99 +++++++-- lib/graphql/schema/address.ex | 2 + lib/graphql/schema/event.ex | 6 +- lib/mobilizon.ex | 1 + lib/mobilizon/addresses/address.ex | 51 ++++- lib/mobilizon/events/event_options.ex | 3 + lib/mobilizon/events/events.ex | 19 +- lib/service/geospatial/addok.ex | 5 +- lib/service/geospatial/google_maps.ex | 5 +- lib/service/geospatial/map_quest.ex | 5 +- lib/service/geospatial/mimirsbrunn.ex | 3 +- lib/service/geospatial/nominatim.ex | 3 +- lib/service/geospatial/pelias.ex | 3 +- lib/service/geospatial/photon.ex | 5 +- lib/service/geospatial/provider.ex | 13 ++ lib/service/metadata/event.ex | 54 ++++- lib/service/timezone_detector.ex | 40 ++++ lib/web/auth/context.ex | 33 +-- mix.exs | 1 + mix.lock | 1 + ...211008084901_add_timezone_to_addresses.exs | 9 + 49 files changed, 1218 insertions(+), 429 deletions(-) create mode 100644 js/src/components/Address/AddressInfo.vue create mode 100644 js/src/components/Event/EventMap.vue create mode 100644 lib/service/timezone_detector.ex create mode 100644 priv/repo/migrations/20211008084901_add_timezone_to_addresses.exs diff --git a/js/package.json b/js/package.json index 9e38573ef..a3d4ca104 100644 --- a/js/package.json +++ b/js/package.json @@ -38,6 +38,7 @@ "bulma-divider": "^0.2.0", "core-js": "^3.6.4", "date-fns": "^2.16.0", + "date-fns-tz": "^1.1.6", "graphql": "^15.0.0", "graphql-tag": "^2.10.3", "intersection-observer": "^0.12.0", diff --git a/js/src/components/Address/AddressInfo.vue b/js/src/components/Address/AddressInfo.vue new file mode 100644 index 000000000..a0ef9eadf --- /dev/null +++ b/js/src/components/Address/AddressInfo.vue @@ -0,0 +1,124 @@ +<template> + <address> + <b-icon + v-if="showIcon" + :icon="address.poiInfos.poiIcon.icon" + size="is-medium" + class="icon" + /> + <p> + <span + class="addressDescription" + :title="address.poiInfos.name" + v-if="address.poiInfos.name" + > + {{ address.poiInfos.name }} + </span> + <br v-if="address.poiInfos.name" /> + <span class="has-text-grey-dark"> + {{ address.poiInfos.alternativeName }} + </span> + <br /> + <small + v-if=" + userTimezoneDifferent && + longShortTimezoneNamesDifferent && + timezoneLongNameValid + " + class="has-text-grey-dark" + > + 🌐 + {{ + $t("{timezoneLongName} ({timezoneShortName})", { + timezoneLongName, + timezoneShortName, + }) + }} + </small> + <small v-else-if="userTimezoneDifferent" class="has-text-grey-dark"> + 🌐 {{ timezoneShortName }} + </small> + </p> + </address> +</template> +<script lang="ts"> +import { IAddress } from "@/types/address.model"; +import { PropType } from "vue"; +import { Component, Prop, Vue } from "vue-property-decorator"; + +@Component +export default class AddressInfo extends Vue { + @Prop({ required: true, type: Object as PropType<IAddress> }) + address!: IAddress; + + @Prop({ required: false, default: false, type: Boolean }) showIcon!: boolean; + @Prop({ required: false, default: false, type: Boolean }) + showTimezone!: boolean; + @Prop({ required: false, type: String }) userTimezone!: string; + + get userTimezoneDifferent(): boolean { + return ( + this.userTimezone != undefined && + this.address.timezone != undefined && + this.userTimezone !== this.address.timezone + ); + } + + get longShortTimezoneNamesDifferent(): boolean { + return ( + this.timezoneLongName != undefined && + this.timezoneShortName != undefined && + this.timezoneLongName !== this.timezoneShortName + ); + } + + get timezoneLongName(): string | undefined { + return this.timezoneName("long"); + } + + get timezoneShortName(): string | undefined { + return this.timezoneName("short"); + } + + get timezoneLongNameValid(): boolean { + return ( + this.timezoneLongName != undefined && !this.timezoneLongName.match(/UTC/) + ); + } + + private timezoneName(format: "long" | "short"): string | undefined { + return this.extractTimezone( + new Intl.DateTimeFormat(undefined, { + timeZoneName: format, + timeZone: this.address.timezone, + }).formatToParts() + ); + } + + private extractTimezone( + parts: Intl.DateTimeFormatPart[] + ): string | undefined { + return parts.find((part) => part.type === "timeZoneName")?.value; + } +} +</script> +<style lang="scss" scoped> +address { + font-style: normal; + display: flex; + justify-content: flex-start; + + span.addressDescription { + text-overflow: ellipsis; + white-space: nowrap; + flex: 1 0 auto; + min-width: 100%; + max-width: 4rem; + overflow: hidden; + } + + span.icon { + padding-right: 1rem; + } +} +</style> diff --git a/js/src/components/Event/EventFullDate.vue b/js/src/components/Event/EventFullDate.vue index 454a39496..33c1d6176 100644 --- a/js/src/components/Event/EventFullDate.vue +++ b/js/src/components/Event/EventFullDate.vue @@ -18,64 +18,97 @@ </docs> <template> - <span v-if="!endsOn">{{ - beginsOn | formatDateTimeString(showStartTime) - }}</span> - <span v-else-if="isSameDay() && showStartTime && showEndTime"> - {{ + <p v-if="!endsOn"> + <span>{{ + formatDateTimeString(beginsOn, timezoneToShow, showStartTime) + }}</span> + <br /> + <b-switch + size="is-small" + v-model="showLocalTimezone" + v-if="differentFromUserTimezone" + > + {{ singleTimeZone }} + </b-switch> + </p> + <p v-else-if="isSameDay() && showStartTime && showEndTime"> + <span>{{ $t("On {date} from {startTime} to {endTime}", { date: formatDate(beginsOn), - startTime: formatTime(beginsOn), - endTime: formatTime(endsOn), + startTime: formatTime(beginsOn, timezoneToShow), + endTime: formatTime(endsOn, timezoneToShow), }) - }} - </span> - <span v-else-if="isSameDay() && !showStartTime && showEndTime"> - {{ - $t("On {date} ending at {endTime}", { - date: formatDate(beginsOn), - endTime: formatTime(endsOn), - }) - }} - </span> - <span v-else-if="isSameDay() && showStartTime && !showEndTime"> + }}</span> + <br /> + <b-switch + size="is-small" + v-model="showLocalTimezone" + v-if="differentFromUserTimezone" + > + {{ singleTimeZone }} + </b-switch> + </p> + <p v-else-if="isSameDay() && showStartTime && !showEndTime"> {{ $t("On {date} starting at {startTime}", { date: formatDate(beginsOn), startTime: formatTime(beginsOn), }) }} - </span> - <span v-else-if="isSameDay()">{{ - $t("On {date}", { date: formatDate(beginsOn) }) - }}</span> - <span v-else-if="endsOn && showStartTime && showEndTime"> - {{ - $t("From the {startDate} at {startTime} to the {endDate} at {endTime}", { - startDate: formatDate(beginsOn), - startTime: formatTime(beginsOn), - endDate: formatDate(endsOn), - endTime: formatTime(endsOn), - }) - }} - </span> - <span v-else-if="endsOn && showStartTime"> - {{ - $t("From the {startDate} at {startTime} to the {endDate}", { - startDate: formatDate(beginsOn), - startTime: formatTime(beginsOn), - endDate: formatDate(endsOn), - }) - }} - </span> - <span v-else-if="endsOn"> + </p> + <p v-else-if="isSameDay()"> + {{ $t("On {date}", { date: formatDate(beginsOn) }) }} + </p> + <p v-else-if="endsOn && showStartTime && showEndTime"> + <span> + {{ + $t( + "From the {startDate} at {startTime} to the {endDate} at {endTime}", + { + startDate: formatDate(beginsOn), + startTime: formatTime(beginsOn, timezoneToShow), + endDate: formatDate(endsOn), + endTime: formatTime(endsOn, timezoneToShow), + } + ) + }} + </span> + <br /> + <b-switch + size="is-small" + v-model="showLocalTimezone" + v-if="differentFromUserTimezone" + > + {{ multipleTimeZones }} + </b-switch> + </p> + <p v-else-if="endsOn && showStartTime"> + <span> + {{ + $t("From the {startDate} at {startTime} to the {endDate}", { + startDate: formatDate(beginsOn), + startTime: formatTime(beginsOn, timezoneToShow), + endDate: formatDate(endsOn), + }) + }} + </span> + <br /> + <b-switch + size="is-small" + v-model="showLocalTimezone" + v-if="differentFromUserTimezone" + > + {{ singleTimeZone }} + </b-switch> + </p> + <p v-else-if="endsOn"> {{ $t("From the {startDate} to the {endDate}", { startDate: formatDate(beginsOn), endDate: formatDate(endsOn), }) }} - </span> + </p> </template> <script lang="ts"> import { Component, Prop, Vue } from "vue-property-decorator"; @@ -90,14 +123,47 @@ export default class EventFullDate extends Vue { @Prop({ required: false, default: true }) showEndTime!: boolean; + @Prop({ required: false }) timezone!: string; + + @Prop({ required: false }) userTimezone!: string; + + showLocalTimezone = true; + + get timezoneToShow(): string { + if (this.showLocalTimezone) { + return this.timezone; + } + return this.userActualTimezone; + } + + get userActualTimezone(): string { + if (this.userTimezone) { + return this.userTimezone; + } + return Intl.DateTimeFormat().resolvedOptions().timeZone; + } + formatDate(value: Date): string | undefined { if (!this.$options.filters) return undefined; return this.$options.filters.formatDateString(value); } - formatTime(value: Date): string | undefined { + formatTime(value: Date, timezone: string): string | undefined { if (!this.$options.filters) return undefined; - return this.$options.filters.formatTimeString(value); + return this.$options.filters.formatTimeString(value, timezone || undefined); + } + + formatDateTimeString( + value: Date, + timezone: string, + showTime: boolean + ): string | undefined { + if (!this.$options.filters) return undefined; + return this.$options.filters.formatDateTimeString( + value, + timezone, + showTime + ); } isSameDay(): boolean { @@ -106,5 +172,35 @@ export default class EventFullDate extends Vue { new Date(this.endsOn).toDateString(); return this.endsOn !== undefined && sameDay; } + + get differentFromUserTimezone(): boolean { + return ( + !!this.timezone && + !!this.userActualTimezone && + this.timezone !== this.userActualTimezone + ); + } + + get singleTimeZone(): string { + if (this.showLocalTimezone) { + return this.$t("Local time ({timezone})", { + timezone: this.timezoneToShow, + }) as string; + } + return this.$t("Time in your timezone ({timezone})", { + timezone: this.timezoneToShow, + }) as string; + } + + get multipleTimeZones(): string { + if (this.showLocalTimezone) { + return this.$t("Local time ({timezone})", { + timezone: this.timezoneToShow, + }) as string; + } + return this.$t("Times in your timezone ({timezone})", { + timezone: this.timezoneToShow, + }) as string; + } } </script> diff --git a/js/src/components/Event/EventMap.vue b/js/src/components/Event/EventMap.vue new file mode 100644 index 000000000..7ed79b3f2 --- /dev/null +++ b/js/src/components/Event/EventMap.vue @@ -0,0 +1,175 @@ +<template> + <div class="modal-card"> + <header class="modal-card-head"> + <button type="button" class="delete" @click="$emit('close')" /> + </header> + <div class="modal-card-body"> + <section class="map"> + <map-leaflet + :coords="physicalAddress.geom" + :marker="{ + text: physicalAddress.fullName, + icon: physicalAddress.poiInfos.poiIcon.icon, + }" + /> + </section> + <section class="columns is-centered map-footer"> + <div class="column is-half has-text-centered"> + <p class="address"> + <i class="mdi mdi-map-marker"></i> + {{ physicalAddress.fullName }} + </p> + <p class="getting-there">{{ $t("Getting there") }}</p> + <div + class="buttons" + v-if=" + addressLinkToRouteByCar || + addressLinkToRouteByBike || + addressLinkToRouteByFeet + " + > + <a + class="button" + target="_blank" + v-if="addressLinkToRouteByFeet" + :href="addressLinkToRouteByFeet" + > + <i class="mdi mdi-walk"></i + ></a> + <a + class="button" + target="_blank" + v-if="addressLinkToRouteByBike" + :href="addressLinkToRouteByBike" + > + <i class="mdi mdi-bike"></i + ></a> + <a + class="button" + target="_blank" + v-if="addressLinkToRouteByTransit" + :href="addressLinkToRouteByTransit" + > + <i class="mdi mdi-bus"></i + ></a> + <a + class="button" + target="_blank" + v-if="addressLinkToRouteByCar" + :href="addressLinkToRouteByCar" + > + <i class="mdi mdi-car"></i> + </a> + </div> + </div> + </section> + </div> + </div> +</template> +<script lang="ts"> +import { Address, IAddress } from "@/types/address.model"; +import { RoutingTransportationType, RoutingType } from "@/types/enums"; +import { PropType } from "vue"; +import { Component, Vue, Prop } from "vue-property-decorator"; + +const RoutingParamType = { + [RoutingType.OPENSTREETMAP]: { + [RoutingTransportationType.FOOT]: "engine=fossgis_osrm_foot", + [RoutingTransportationType.BIKE]: "engine=fossgis_osrm_bike", + [RoutingTransportationType.TRANSIT]: null, + [RoutingTransportationType.CAR]: "engine=fossgis_osrm_car", + }, + [RoutingType.GOOGLE_MAPS]: { + [RoutingTransportationType.FOOT]: "dirflg=w", + [RoutingTransportationType.BIKE]: "dirflg=b", + [RoutingTransportationType.TRANSIT]: "dirflg=r", + [RoutingTransportationType.CAR]: "driving", + }, +}; + +@Component({ + components: { + "map-leaflet": () => + import(/* webpackChunkName: "map" */ "../../components/Map.vue"), + }, +}) +export default class EventMap extends Vue { + @Prop({ type: Object as PropType<IAddress> }) address!: IAddress; + @Prop({ type: String }) routingType!: RoutingType; + + get physicalAddress(): Address | null { + if (!this.address) return null; + + return new Address(this.address); + } + + makeNavigationPath( + transportationType: RoutingTransportationType + ): string | undefined { + const geometry = this.physicalAddress?.geom; + if (geometry) { + /** + * build urls to routing map + */ + if (!RoutingParamType[this.routingType][transportationType]) { + return; + } + + const urlGeometry = geometry.split(";").reverse().join(","); + + switch (this.routingType) { + case RoutingType.GOOGLE_MAPS: + return `https://maps.google.com/?saddr=Current+Location&daddr=${urlGeometry}&${ + RoutingParamType[this.routingType][transportationType] + }`; + case RoutingType.OPENSTREETMAP: + default: { + const bboxX = geometry.split(";").reverse()[0]; + const bboxY = geometry.split(";").reverse()[1]; + return `https://www.openstreetmap.org/directions?from=&to=${urlGeometry}&${ + RoutingParamType[this.routingType][transportationType] + }#map=14/${bboxX}/${bboxY}`; + } + } + } + } + + get addressLinkToRouteByCar(): undefined | string { + return this.makeNavigationPath(RoutingTransportationType.CAR); + } + + get addressLinkToRouteByBike(): undefined | string { + return this.makeNavigationPath(RoutingTransportationType.BIKE); + } + + get addressLinkToRouteByFeet(): undefined | string { + return this.makeNavigationPath(RoutingTransportationType.FOOT); + } + + get addressLinkToRouteByTransit(): undefined | string { + return this.makeNavigationPath(RoutingTransportationType.TRANSIT); + } +} +</script> +<style lang="scss" scoped> +.modal-card-head { + justify-content: flex-end; + button.delete { + margin-right: 1rem; + } +} + +section.map { + height: calc(100% - 8rem); + width: calc(100% - 20px); +} + +section.map-footer { + p.address { + margin: 1rem auto; + } + div.buttons { + justify-content: center; + } +} +</style> diff --git a/js/src/components/Event/EventMetadataSidebar.vue b/js/src/components/Event/EventMetadataSidebar.vue index 912038d6d..1f94d5d05 100644 --- a/js/src/components/Event/EventMetadataSidebar.vue +++ b/js/src/components/Event/EventMetadataSidebar.vue @@ -11,7 +11,7 @@ <b-button type="is-text" class="map-show-button" - @click="showMap = !showMap" + @click="$emit('showMapModal', true)" v-if="physicalAddress.geom" > {{ $t("Show map") }} @@ -24,6 +24,8 @@ :beginsOn="event.beginsOn" :show-start-time="event.options.showStartTime" :show-end-time="event.options.showEndTime" + :timezone="event.options.timezone" + :userTimezone="userTimezone" :endsOn="event.endsOn" /> </event-metadata-block> @@ -130,91 +132,12 @@ > <span v-else>{{ extra.value }}</span> </event-metadata-block> - <b-modal - class="map-modal" - v-if="physicalAddress && physicalAddress.geom" - :active.sync="showMap" - has-modal-card - full-screen - > - <div class="modal-card"> - <header class="modal-card-head"> - <button type="button" class="delete" @click="showMap = false" /> - </header> - <div class="modal-card-body"> - <section class="map"> - <map-leaflet - :coords="physicalAddress.geom" - :marker="{ - text: physicalAddress.fullName, - icon: physicalAddress.poiInfos.poiIcon.icon, - }" - /> - </section> - <section class="columns is-centered map-footer"> - <div class="column is-half has-text-centered"> - <p class="address"> - <i class="mdi mdi-map-marker"></i> - {{ physicalAddress.fullName }} - </p> - <p class="getting-there">{{ $t("Getting there") }}</p> - <div - class="buttons" - v-if=" - addressLinkToRouteByCar || - addressLinkToRouteByBike || - addressLinkToRouteByFeet - " - > - <a - class="button" - target="_blank" - v-if="addressLinkToRouteByFeet" - :href="addressLinkToRouteByFeet" - > - <i class="mdi mdi-walk"></i - ></a> - <a - class="button" - target="_blank" - v-if="addressLinkToRouteByBike" - :href="addressLinkToRouteByBike" - > - <i class="mdi mdi-bike"></i - ></a> - <a - class="button" - target="_blank" - v-if="addressLinkToRouteByTransit" - :href="addressLinkToRouteByTransit" - > - <i class="mdi mdi-bus"></i - ></a> - <a - class="button" - target="_blank" - v-if="addressLinkToRouteByCar" - :href="addressLinkToRouteByCar" - > - <i class="mdi mdi-car"></i> - </a> - </div> - </div> - </section> - </div> - </div> - </b-modal> </div> </template> <script lang="ts"> import { Address } from "@/types/address.model"; import { IConfig } from "@/types/config.model"; -import { - EventMetadataKeyType, - EventMetadataType, - RoutingTransportationType, - RoutingType, -} from "@/types/enums"; +import { EventMetadataKeyType, EventMetadataType } from "@/types/enums"; import { IEvent } from "@/types/event.model"; import { PropType } from "vue"; import { Component, Prop, Vue } from "vue-property-decorator"; @@ -224,11 +147,13 @@ import EventMetadataBlock from "./EventMetadataBlock.vue"; import EventFullDate from "./EventFullDate.vue"; import PopoverActorCard from "../Account/PopoverActorCard.vue"; import ActorCard from "../../components/Account/ActorCard.vue"; +import AddressInfo from "../../components/Address/AddressInfo.vue"; import { IEventMetadata, IEventMetadataDescription, } from "@/types/event-metadata"; import { eventMetaDataList } from "../../services/EventMetadata"; +import { IUser } from "@/types/current-user.model"; @Component({ components: { @@ -236,15 +161,14 @@ import { eventMetaDataList } from "../../services/EventMetadata"; EventFullDate, PopoverActorCard, ActorCard, - "map-leaflet": () => - import(/* webpackChunkName: "map" */ "../../components/Map.vue"), + AddressInfo, }, }) export default class EventMetadataSidebar extends Vue { @Prop({ type: Object as PropType<IEvent>, required: true }) event!: IEvent; @Prop({ type: Object as PropType<IConfig>, required: true }) config!: IConfig; - - showMap = false; + @Prop({ required: true }) user!: IUser | undefined; + @Prop({ required: false, default: false }) showMap!: boolean; RouteName = RouteName; @@ -255,21 +179,6 @@ export default class EventMetadataSidebar extends Vue { EventMetadataType = EventMetadataType; EventMetadataKeyType = EventMetadataKeyType; - RoutingParamType = { - [RoutingType.OPENSTREETMAP]: { - [RoutingTransportationType.FOOT]: "engine=fossgis_osrm_foot", - [RoutingTransportationType.BIKE]: "engine=fossgis_osrm_bike", - [RoutingTransportationType.TRANSIT]: null, - [RoutingTransportationType.CAR]: "engine=fossgis_osrm_car", - }, - [RoutingType.GOOGLE_MAPS]: { - [RoutingTransportationType.FOOT]: "dirflg=w", - [RoutingTransportationType.BIKE]: "dirflg=b", - [RoutingTransportationType.TRANSIT]: "dirflg=r", - [RoutingTransportationType.CAR]: "driving", - }, - }; - get physicalAddress(): Address | null { if (!this.event.physicalAddress) return null; @@ -286,50 +195,6 @@ export default class EventMetadataSidebar extends Vue { }); } - makeNavigationPath( - transportationType: RoutingTransportationType - ): string | undefined { - const geometry = this.physicalAddress?.geom; - if (geometry) { - const routingType = this.config.maps.routing.type; - /** - * build urls to routing map - */ - if (!this.RoutingParamType[routingType][transportationType]) { - return; - } - - const urlGeometry = geometry.split(";").reverse().join(","); - - switch (routingType) { - case RoutingType.GOOGLE_MAPS: - return `https://maps.google.com/?saddr=Current+Location&daddr=${urlGeometry}&${this.RoutingParamType[routingType][transportationType]}`; - case RoutingType.OPENSTREETMAP: - default: { - const bboxX = geometry.split(";").reverse()[0]; - const bboxY = geometry.split(";").reverse()[1]; - return `https://www.openstreetmap.org/directions?from=&to=${urlGeometry}&${this.RoutingParamType[routingType][transportationType]}#map=14/${bboxX}/${bboxY}`; - } - } - } - } - - get addressLinkToRouteByCar(): undefined | string { - return this.makeNavigationPath(RoutingTransportationType.CAR); - } - - get addressLinkToRouteByBike(): undefined | string { - return this.makeNavigationPath(RoutingTransportationType.BIKE); - } - - get addressLinkToRouteByFeet(): undefined | string { - return this.makeNavigationPath(RoutingTransportationType.FOOT); - } - - get addressLinkToRouteByTransit(): undefined | string { - return this.makeNavigationPath(RoutingTransportationType.TRANSIT); - } - urlToHostname(url: string): string | null { try { return new URL(url).hostname; @@ -362,6 +227,10 @@ export default class EventMetadataSidebar extends Vue { } } } + + get userTimezone(): string | undefined { + return this.user?.settings?.timezone; + } } </script> <style lang="scss" scoped> @@ -391,50 +260,6 @@ div.address-wrapper { .map-show-button { cursor: pointer; } - - address { - font-style: normal; - flex-wrap: wrap; - display: flex; - justify-content: flex-start; - - span.addressDescription { - text-overflow: ellipsis; - white-space: nowrap; - flex: 1 0 auto; - min-width: 100%; - max-width: 4rem; - overflow: hidden; - } - - :not(.addressDescription) { - flex: 1; - min-width: 100%; - } - } - } -} - -.map-modal { - .modal-card-head { - justify-content: flex-end; - button.delete { - margin-right: 1rem; - } - } - - section.map { - height: calc(100% - 8rem); - width: calc(100% - 20px); - } - - section.map-footer { - p.address { - margin: 1rem auto; - } - div.buttons { - justify-content: center; - } } } </style> diff --git a/js/src/components/Event/FullAddressAutoComplete.vue b/js/src/components/Event/FullAddressAutoComplete.vue index b1af7d7a1..48f16eade 100644 --- a/js/src/components/Event/FullAddressAutoComplete.vue +++ b/js/src/components/Event/FullAddressAutoComplete.vue @@ -1,72 +1,89 @@ <template> - <div class="address-autocomplete"> - <b-field - :label-for="id" - expanded - :message="fieldErrors" - :type="{ 'is-danger': fieldErrors.length }" - > - <template slot="label"> - {{ actualLabel }} - <b-button - v-if="canShowLocateMeButton && !gettingLocation" - size="is-small" - icon-right="map-marker" - @click="locateMe" - :title="$t('Use my location')" - /> - <span - class="is-size-6 has-text-weight-normal" - v-else-if="gettingLocation" - >{{ $t("Getting location") }}</span - > - </template> - <b-autocomplete - :data="addressData" - v-model="queryText" - :placeholder="$t('e.g. 10 Rue Jangot')" - field="fullName" - :loading="isFetching" - @typing="fetchAsyncData" - icon="map-marker" + <div class="address-autocomplete columns is-desktop"> + <div class="column"> + <b-field + :label-for="id" expanded - @select="updateSelected" - v-bind="$attrs" - :id="id" + :message="fieldErrors" + :type="{ 'is-danger': fieldErrors.length }" > - <template #default="{ option }"> - <b-icon :icon="option.poiInfos.poiIcon.icon" /> - <b>{{ option.poiInfos.name }}</b - ><br /> - <small>{{ option.poiInfos.alternativeName }}</small> + <template slot="label"> + {{ actualLabel }} + <b-button + v-if="canShowLocateMeButton && !gettingLocation" + size="is-small" + icon-right="map-marker" + @click="locateMe" + :title="$t('Use my location')" + /> + <span + class="is-size-6 has-text-weight-normal" + v-else-if="gettingLocation" + >{{ $t("Getting location") }}</span + > </template> - <template slot="empty"> - <span v-if="isFetching">{{ $t("Searching…") }}</span> - <div v-else-if="queryText.length >= 3" class="is-enabled"> - <span>{{ $t('No results for "{queryText}"', { queryText }) }}</span> - <span>{{ - $t( - "You can try another search term or drag and drop the marker on the map", - { - queryText, - } - ) - }}</span> - <!-- <p class="control" @click="openNewAddressModal">--> - <!-- <button type="button" class="button is-primary">{{ $t('Add') }}</button>--> - <!-- </p>--> - </div> - </template> - </b-autocomplete> - <b-button - :disabled="!queryText" - @click="resetAddress" - class="reset-area" - icon-left="close" - :title="$t('Clear address field')" - /> - </b-field> - <div class="map" v-if="selected && selected.geom && selected.poiInfos"> + <b-autocomplete + :data="addressData" + v-model="queryText" + :placeholder="$t('e.g. 10 Rue Jangot')" + field="fullName" + :loading="isFetching" + @typing="fetchAsyncData" + icon="map-marker" + expanded + @select="updateSelected" + v-bind="$attrs" + :id="id" + > + <template #default="{ option }"> + <b-icon :icon="option.poiInfos.poiIcon.icon" /> + <b>{{ option.poiInfos.name }}</b + ><br /> + <small>{{ option.poiInfos.alternativeName }}</small> + </template> + <template slot="empty"> + <span v-if="isFetching">{{ $t("Searching…") }}</span> + <div v-else-if="queryText.length >= 3" class="is-enabled"> + <span>{{ + $t('No results for "{queryText}"', { queryText }) + }}</span> + <span>{{ + $t( + "You can try another search term or drag and drop the marker on the map", + { + queryText, + } + ) + }}</span> + <!-- <p class="control" @click="openNewAddressModal">--> + <!-- <button type="button" class="button is-primary">{{ $t('Add') }}</button>--> + <!-- </p>--> + </div> + </template> + </b-autocomplete> + <b-button + :disabled="!queryText" + @click="resetAddress" + class="reset-area" + icon-left="close" + :title="$t('Clear address field')" + /> + </b-field> + <div class="card" v-if="selected.originId || selected.url"> + <div class="card-content"> + <address-info + :address="selected" + :show-icon="true" + :show-timezone="true" + :user-timezone="userTimezone" + /> + </div> + </div> + </div> + <div + class="map column" + v-if="selected && selected.geom && selected.poiInfos" + > <map-leaflet :coords="selected.geom" :marker="{ @@ -126,14 +143,19 @@ import { Component, Prop, Watch, Mixins } from "vue-property-decorator"; import { LatLng } from "leaflet"; import { Address, IAddress } from "../../types/address.model"; import AddressAutoCompleteMixin from "../../mixins/AddressAutoCompleteMixin"; +import AddressInfo from "../../components/Address/AddressInfo.vue"; @Component({ inheritAttrs: false, + components: { + AddressInfo, + }, }) export default class FullAddressAutoComplete extends Mixins( AddressAutoCompleteMixin ) { @Prop({ required: false, default: "" }) label!: string; + @Prop({ required: false }) userTimezone!: string; addressModalActive = false; diff --git a/js/src/components/NavBar.vue b/js/src/components/NavBar.vue index 29aab31ec..b23f93d13 100644 --- a/js/src/components/NavBar.vue +++ b/js/src/components/NavBar.vue @@ -187,7 +187,7 @@ </template> <script lang="ts"> -import { Component, Vue, Watch } from "vue-property-decorator"; +import { Component, Ref, Vue, Watch } from "vue-property-decorator"; import Logo from "@/components/Logo.vue"; import { GraphQLError } from "graphql"; import { loadLanguageAsync } from "@/utils/i18n"; @@ -259,6 +259,13 @@ export default class NavBar extends Vue { displayName = displayName; + @Ref("user-dropdown") userDropDown!: any; + + toggleMenu(): void { + console.debug("called toggleMenu"); + this.userDropDown.showMenu(); + } + @Watch("currentActor") async initializeListOfIdentities(): Promise<void> { if (!this.currentUser.isLoggedIn) return; diff --git a/js/src/filters/datetime.ts b/js/src/filters/datetime.ts index 4211375f8..e5fdb2725 100644 --- a/js/src/filters/datetime.ts +++ b/js/src/filters/datetime.ts @@ -14,10 +14,11 @@ function formatDateString(value: string): string { }); } -function formatTimeString(value: string): string { +function formatTimeString(value: string, timeZone: string): string { return parseDateTime(value).toLocaleTimeString(locale(), { hour: "numeric", minute: "numeric", + timeZone, }); } @@ -55,6 +56,7 @@ const SHORT_TIME_FORMAT_OPTIONS: DateTimeFormatOptions = { function formatDateTimeString( value: string, + timeZone: string | undefined = undefined, showTime = true, dateFormat = "long" ): string { @@ -66,6 +68,7 @@ function formatDateTimeString( options = { ...options, ...(isLongFormat ? LONG_TIME_FORMAT_OPTIONS : SHORT_TIME_FORMAT_OPTIONS), + timeZone, }; } const format = new Intl.DateTimeFormat(locale(), options); diff --git a/js/src/graphql/address.ts b/js/src/graphql/address.ts index 4aefe98f9..163621e1d 100644 --- a/js/src/graphql/address.ts +++ b/js/src/graphql/address.ts @@ -13,6 +13,7 @@ export const ADDRESS_FRAGMENT = gql` type url originId + timezone } `; diff --git a/js/src/graphql/config.ts b/js/src/graphql/config.ts index a7b345698..0fb5fa2ce 100644 --- a/js/src/graphql/config.ts +++ b/js/src/graphql/config.ts @@ -96,6 +96,31 @@ export const CONFIG = gql` } `; +export const CONFIG_EDIT_EVENT = gql` + query EditEventConfig { + config { + timezones + features { + groups + } + anonymous { + participation { + allowed + validation { + email { + enabled + confirmationRequired + } + captcha { + enabled + } + } + } + } + } + } +`; + export const TERMS = gql` query Terms($locale: String) { config { diff --git a/js/src/graphql/event.ts b/js/src/graphql/event.ts index 0e6ebcb7d..4e9a8baba 100644 --- a/js/src/graphql/event.ts +++ b/js/src/graphql/event.ts @@ -46,6 +46,7 @@ const EVENT_OPTIONS_FRAGMENT = gql` anonymousParticipation showStartTime showEndTime + timezone offers { price priceCurrency diff --git a/js/src/graphql/user.ts b/js/src/graphql/user.ts index ad7ba463e..0f0e7e373 100644 --- a/js/src/graphql/user.ts +++ b/js/src/graphql/user.ts @@ -147,6 +147,17 @@ export const USER_SETTINGS = gql` ${USER_SETTINGS_FRAGMENT} `; +export const LOGGED_USER_TIMEZONE = gql` + query LoggedUserTimezone { + loggedUser { + id + settings { + timezone + } + } + } +`; + export const SET_USER_SETTINGS = gql` mutation SetUserSettings( $timezone: String diff --git a/js/src/i18n/en_US.json b/js/src/i18n/en_US.json index a5cc6f666..0c7843077 100644 --- a/js/src/i18n/en_US.json +++ b/js/src/i18n/en_US.json @@ -1158,5 +1158,47 @@ "Who can post a comment?": "Who can post a comment?", "Does the event needs to be confirmed later or is it cancelled?": "Does the event needs to be confirmed later or is it cancelled?", "When the post is private, you'll need to share the link around.": "When the post is private, you'll need to share the link around.", - "Reset": "Reset" -} + "Reset": "Reset", + "Local time ({timezone})": "Local time ({timezone})", + "Time in your timezone ({timezone})": "Time in your timezone ({timezone})", + "Export": "Export", + "Times in your timezone ({timezone})": "Times in your timezone ({timezone})", + "Skip to main": "Skip to main", + "Comment body": "Comment body", + "has loaded": "has loaded", + "Follows": "Follows", + "Event description body": "Event description body", + "Event timezone will default to the timezone of the event's address if there is one, or to your own timezone setting.": "Event timezone will default to the timezone of the event's address if there is one, or to your own timezone setting.", + "Clear timezone field": "Clear timezone field", + "Group description body": "Group description body", + "Moderation logs": "Moderation logs", + "Post body": "Post body", + "{group} posts": "{group} posts", + "{group}'s todolists": "{group}'s todolists", + "Validating email": "Validating email", + "Redirecting to Mobilizon": "Redirecting to Mobilizon", + "Reset password": "Reset password", + "First steps": "First steps", + "Validating account": "Validating account", + "Navigated to {pageTitle}": "Navigated to {pageTitle}", + "Confirm participation": "Confirm participation", + "Participation with account": "Participation with account", + "Participation without account": "Participation without account", + "Unlogged participation": "Unlogged participation", + "Discussions list": "Discussions list", + "Create discussion": "Create discussion", + "Tag search": "Tag search", + "Homepage": "Homepage", + "About instance": "About instance", + "Privacy": "Privacy", + "Interact": "Interact", + "Account settings": "Account settings", + "Admin dashboard": "Admin dashboard", + "Admin settings": "Admin settings", + "Group profiles": "Group profiles", + "Reports list": "Reports list", + "Create identity": "Create identity", + "Resent confirmation email": "Resent confirmation email", + "Send password reset": "Send password reset", + "Email validate": "Email validate" +} \ No newline at end of file diff --git a/js/src/i18n/fr_FR.json b/js/src/i18n/fr_FR.json index d50acb09d..ae8c35f21 100644 --- a/js/src/i18n/fr_FR.json +++ b/js/src/i18n/fr_FR.json @@ -1262,5 +1262,47 @@ "{profile} updated the member {member}.": "{profile} a mis à jour le ou la membre {member}.", "{title} ({count} todos)": "{title} ({count} todos)", "{username} was invited to {group}": "{username} a été invité à {group}", - "© The OpenStreetMap Contributors": "© Les Contributeur⋅ices OpenStreetMap" -} + "© The OpenStreetMap Contributors": "© Les Contributeur⋅ices OpenStreetMap", + "Local time ({timezone})": "Heure locale ({timezone})", + "Time in your timezone ({timezone})": "Heure dans votre fuseau horaire ({timezone})", + "Export": "Export", + "Times in your timezone ({timezone})": "Heures dans votre fuseau horaire ({timezone})", + "has loaded": "a chargé", + "Skip to main": "", + "Navigated to {pageTitle}": "Navigué vers {pageTitle}", + "Comment body": "Corps du commentaire", + "Confirm participation": "Confirmer la participation", + "Participation with account": "Participation avec compte", + "Participation without account": "Participation sans compte", + "Unlogged participation": "Participation non connecté⋅e", + "Discussions list": "Liste des discussions", + "Create discussion": "Créer une discussion", + "Tag search": "Recherche par tag", + "Homepage": "Page d'accueil", + "About instance": "À propos de l'instance", + "Privacy": "Vie privée", + "Interact": "Interagir", + "Redirecting to Mobilizon": "Redirection vers Mobilizon", + "First steps": "", + "Account settings": "", + "Admin dashboard": "", + "Admin settings": "", + "Group profiles": "", + "Reports list": "", + "Moderation logs": "", + "Create identity": "", + "Resent confirmation email": "", + "Send password reset": "", + "Email validate": "", + "Validating account": "", + "Follows": "", + "Event description body": "", + "Event timezone will default to the timezone of the event's address if there is one, or to your own timezone setting.": "Le fuseau horaire de l'événement sera mis par défaut au fuseau horaire de l'addresse de l'événement s'il y en a une, ou bien à votre propre paramètre de fuseau horaire.", + "Clear timezone field": "", + "Group description body": "", + "Post body": "Corps du billet", + "{group} posts": "Billets de {group}", + "{group}'s todolists": "Liste de tâches de {group}", + "Validating email": "", + "Reset password": "" +} \ No newline at end of file diff --git a/js/src/types/address.model.ts b/js/src/types/address.model.ts index c1cee4738..bfac5696e 100644 --- a/js/src/types/address.model.ts +++ b/js/src/types/address.model.ts @@ -13,6 +13,7 @@ export interface IAddress { geom?: string; url?: string; originId?: string; + timezone?: string; } export interface IPoiInfo { @@ -44,20 +45,23 @@ export class Address implements IAddress { geom?: string = ""; + timezone?: string = ""; + constructor(hash?: IAddress) { if (!hash) return; this.id = hash.id; - this.description = hash.description; - this.street = hash.street; - this.locality = hash.locality; - this.postalCode = hash.postalCode; - this.region = hash.region; - this.country = hash.country; + this.description = hash.description?.trim(); + this.street = hash.street?.trim(); + this.locality = hash.locality?.trim(); + this.postalCode = hash.postalCode?.trim(); + this.region = hash.region?.trim(); + this.country = hash.country?.trim(); this.type = hash.type; this.geom = hash.geom; this.url = hash.url; this.originId = hash.originId; + this.timezone = hash.timezone; } get poiInfos(): IPoiInfo { diff --git a/js/src/types/event-options.model.ts b/js/src/types/event-options.model.ts index f045d7f55..d33ab9459 100644 --- a/js/src/types/event-options.model.ts +++ b/js/src/types/event-options.model.ts @@ -26,6 +26,7 @@ export interface IEventOptions { showParticipationPrice: boolean; showStartTime: boolean; showEndTime: boolean; + timezone: string | null; } export class EventOptions implements IEventOptions { @@ -54,4 +55,6 @@ export class EventOptions implements IEventOptions { showStartTime = true; showEndTime = true; + + timezone = null; } diff --git a/js/src/types/event.model.ts b/js/src/types/event.model.ts index 7842b7be4..4574e2d3e 100644 --- a/js/src/types/event.model.ts +++ b/js/src/types/event.model.ts @@ -35,7 +35,7 @@ interface IEventEditJSON { id?: string; title: string; description: string; - beginsOn: string; + beginsOn: string | null; endsOn: string | null; status: EventStatus; visibility: EventVisibility; @@ -92,6 +92,9 @@ export interface IEvent { toEditJSON(): IEventEditJSON; } +export interface IEditableEvent extends Omit<IEvent, "beginsOn"> { + beginsOn: Date | null; +} export class EventModel implements IEvent { id?: string; @@ -158,7 +161,7 @@ export class EventModel implements IEvent { metadata: IEventMetadata[] = []; - constructor(hash?: IEvent) { + constructor(hash?: IEvent | IEditableEvent) { if (!hash) return; this.id = hash.id; @@ -170,8 +173,14 @@ export class EventModel implements IEvent { this.slug = hash.slug; this.description = hash.description || ""; - this.beginsOn = new Date(hash.beginsOn); - if (hash.endsOn) this.endsOn = new Date(hash.endsOn); + if (hash.beginsOn) { + this.beginsOn = new Date(hash.beginsOn); + } + if (hash.endsOn) { + this.endsOn = new Date(hash.endsOn); + } else { + this.endsOn = null; + } this.publishAt = new Date(hash.publishAt); @@ -217,12 +226,12 @@ export function removeTypeName(entity: any): any { return entity; } -export function toEditJSON(event: IEvent): IEventEditJSON { +export function toEditJSON(event: IEditableEvent): IEventEditJSON { return { id: event.id, title: event.title, description: event.description, - beginsOn: event.beginsOn.toISOString(), + beginsOn: event.beginsOn ? event.beginsOn.toISOString() : null, endsOn: event.endsOn ? event.endsOn.toISOString() : null, status: event.status, visibility: event.visibility, diff --git a/js/src/views/Event/Edit.vue b/js/src/views/Event/Edit.vue index 17646646d..1b6b78040 100644 --- a/js/src/views/Event/Edit.vue +++ b/js/src/views/Event/Edit.vue @@ -44,9 +44,10 @@ :placeholder="$t('Type or select a date…')" icon="calendar-today" :locale="$i18n.locale" - v-model="event.beginsOn" + v-model="beginsOn" horizontal-time-picker editable + :tz-offset="tzOffset(beginsOn)" :datepicker="{ id: 'begins-on-field', 'aria-next-label': $t('Next month'), @@ -62,9 +63,10 @@ :placeholder="$t('Type or select a date…')" icon="calendar-today" :locale="$i18n.locale" - v-model="event.endsOn" + v-model="endsOn" horizontal-time-picker - :min-datetime="event.beginsOn" + :min-datetime="beginsOn" + :tz-offset="tzOffset(endsOn)" editable :datepicker="{ id: 'ends-on-field', @@ -75,12 +77,14 @@ </b-datetimepicker> </b-field> - <!-- <b-switch v-model="endsOnNull">{{ $t('No end date') }}</b-switch>--> <b-button type="is-text" @click="dateSettingsIsOpen = true"> {{ $t("Date parameters") }} </b-button> - <full-address-auto-complete v-model="event.physicalAddress" /> + <full-address-auto-complete + v-model="eventPhysicalAddress" + :user-timezone="userActualTimezone" + /> <div class="field"> <label class="label">{{ $t("Description") }}</label> @@ -332,9 +336,45 @@ <form action> <div class="modal-card" style="width: auto"> <header class="modal-card-head"> - <p class="modal-card-title">{{ $t("Date and time settings") }}</p> + <h3 class="modal-card-title">{{ $t("Date and time settings") }}</h3> </header> <section class="modal-card-body"> + <p> + {{ + $t( + "Event timezone will default to the timezone of the event's address if there is one, or to your own timezone setting." + ) + }} + </p> + <b-field :label="$t('Timezone')" label-for="timezone" expanded> + <b-select + :placeholder="$t('Select a timezone')" + :loading="!config" + v-model="timezone" + id="timezone" + > + <optgroup + :label="group" + v-for="(groupTimezones, group) in timezones" + :key="group" + > + <option + v-for="timezone in groupTimezones" + :value="`${group}/${timezone}`" + :key="timezone" + > + {{ sanitizeTimezone(timezone) }} + </option> + </optgroup> + </b-select> + <b-button + :disabled="!timezone" + @click="timezone = null" + class="reset-area" + icon-left="close" + :title="$t('Clear timezone field')" + /> + </b-field> <b-field :label="$t('Event page settings')"> <b-switch v-model="eventOptions.showStartTime">{{ $t("Show the time when the event begins") @@ -514,6 +554,7 @@ section { <script lang="ts"> import { Component, Prop, Vue, Watch } from "vue-property-decorator"; +import { getTimezoneOffset } from "date-fns-tz"; import PictureUpload from "@/components/PictureUpload.vue"; import EditorComponent from "@/components/Editor.vue"; import TagInput from "@/components/Event/TagInput.vue"; @@ -541,6 +582,7 @@ import { } from "../../graphql/event"; import { EventModel, + IEditableEvent, IEvent, removeTypeName, toEditJSON, @@ -566,7 +608,7 @@ import { } from "../../utils/image"; import RouteName from "../../router/name"; import "intersection-observer"; -import { CONFIG } from "../../graphql/config"; +import { CONFIG_EDIT_EVENT } from "../../graphql/config"; import { IConfig } from "../../types/config.model"; import { ApolloCache, @@ -575,6 +617,9 @@ import { } from "@apollo/client/core"; import cloneDeep from "lodash/cloneDeep"; import { IEventOptions } from "@/types/event-options.model"; +import { USER_SETTINGS } from "@/graphql/user"; +import { IUser } from "@/types/current-user.model"; +import { IAddress } from "@/types/address.model"; const DEFAULT_LIMIT_NUMBER_OF_PLACES = 10; @@ -591,7 +636,8 @@ const DEFAULT_LIMIT_NUMBER_OF_PLACES = 10; }, apollo: { currentActor: CURRENT_ACTOR_CLIENT, - config: CONFIG, + loggedUser: USER_SETTINGS, + config: CONFIG_EDIT_EVENT, identities: IDENTITIES, event: { query: FETCH_EVENT, @@ -643,9 +689,11 @@ export default class EditEvent extends Vue { currentActor!: IActor; - event: IEvent = new EventModel(); + loggedUser!: IUser; - unmodifiedEvent: IEvent = new EventModel(); + event: IEditableEvent = new EventModel(); + + unmodifiedEvent: IEditableEvent = new EventModel(); identities: IActor[] = []; @@ -671,8 +719,6 @@ export default class EditEvent extends Vue { dateSettingsIsOpen = false; - endsOnNull = false; - saving = false; displayNameAndUsername = displayNameAndUsername; @@ -908,7 +954,7 @@ export default class EditEvent extends Vue { */ private postCreateOrUpdate(store: any, updateEvent: IEvent) { const resultEvent: IEvent = { ...updateEvent }; - console.log(resultEvent); + console.debug("resultEvent", resultEvent); if (!updateEvent.draft) { store.writeQuery({ query: EVENT_PERSON_PARTICIPATION, @@ -984,6 +1030,23 @@ export default class EditEvent extends Vue { ...toEditJSON(new EventModel(this.event)), options: this.eventOptions, }; + + console.debug(this.event.beginsOn?.toISOString()); + + // if (this.event.beginsOn && this.timezone) { + // console.debug( + // "begins on should be", + // zonedTimeToUtc(this.event.beginsOn, this.timezone).toISOString() + // ); + // } + + // if (this.event.beginsOn && this.timezone) { + // res.beginsOn = zonedTimeToUtc( + // this.event.beginsOn, + // this.timezone + // ).toISOString(); + // } + const organizerActor = this.event.organizerActor?.id ? this.event.organizerActor : this.organizerActor; @@ -995,10 +1058,6 @@ export default class EditEvent extends Vue { : null; res = { ...res, attributedToId }; - if (this.endsOnNull) { - res.endsOn = null; - } - if (this.pictureFile) { const pictureObj = buildFileVariable(this.pictureFile, "picture"); res = { ...res, ...pictureObj }; @@ -1119,13 +1178,16 @@ export default class EditEvent extends Vue { ); } - get beginsOn(): Date { + get beginsOn(): Date | null { + // if (this.timezone && this.event.beginsOn) { + // return utcToZonedTime(this.event.beginsOn, this.timezone); + // } return this.event.beginsOn; } - @Watch("beginsOn", { deep: true }) - onBeginsOnChanged(beginsOn: string): void { - if (!this.event.endsOn) return; + set beginsOn(beginsOn: Date | null) { + this.event.beginsOn = beginsOn; + if (!this.event.endsOn || !beginsOn) return; const dateBeginsOn = new Date(beginsOn); const dateEndsOn = new Date(this.event.endsOn); if (dateEndsOn < dateBeginsOn) { @@ -1137,13 +1199,94 @@ export default class EditEvent extends Vue { } } - /** - * In event endsOn datepicker, we lock starting with the day before the beginsOn date - */ - get minDateForEndsOn(): Date { - const minDate = new Date(this.event.beginsOn); - minDate.setDate(minDate.getDate() - 1); - return minDate; + get endsOn(): Date | null { + // if (this.event.endsOn && this.timezone) { + // return utcToZonedTime(this.event.endsOn, this.timezone); + // } + return this.event.endsOn; + } + + set endsOn(endsOn: Date | null) { + this.event.endsOn = endsOn; + } + + get timezones(): Record<string, string[]> { + if (!this.config || !this.config.timezones) return {}; + return this.config.timezones.reduce( + (acc: { [key: string]: Array<string> }, val: string) => { + const components = val.split("/"); + const [prefix, suffix] = [ + components.shift() as string, + components.join("/"), + ]; + const pushOrCreate = ( + acc2: { [key: string]: Array<string> }, + prefix2: string, + suffix2: string + ) => { + // eslint-disable-next-line no-param-reassign + (acc2[prefix2] = acc2[prefix2] || []).push(suffix2); + return acc2; + }; + if (suffix) { + return pushOrCreate(acc, prefix, suffix); + } + return pushOrCreate(acc, this.$t("Other") as string, prefix); + }, + {} + ); + } + + // eslint-disable-next-line class-methods-use-this + sanitizeTimezone(timezone: string): string { + return timezone + .split("_") + .join(" ") + .replace("St ", "St. ") + .split("/") + .join(" - "); + } + + get timezone(): string | null { + return this.event.options.timezone; + } + + set timezone(timezone: string | null) { + this.event.options = { + ...this.event.options, + timezone, + }; + } + + get userTimezone(): string | undefined { + return this.loggedUser?.settings?.timezone; + } + + get userActualTimezone(): string { + if (this.userTimezone) { + return this.userTimezone; + } + return Intl.DateTimeFormat().resolvedOptions().timeZone; + } + + tzOffset(date: Date): number { + if (this.timezone && date) { + const eventUTCOffset = getTimezoneOffset(this.timezone, date); + const localUTCOffset = getTimezoneOffset(this.userActualTimezone); + return (eventUTCOffset - localUTCOffset) / (60 * 1000); + } + return 0; + } + + get eventPhysicalAddress(): IAddress | null { + return this.event.physicalAddress; + } + + set eventPhysicalAddress(address: IAddress | null) { + if (address && address.timezone) { + this.timezone = address.timezone; + } + this.event.physicalAddress = address; } } </script> diff --git a/js/src/views/Event/Event.vue b/js/src/views/Event/Event.vue index bcf387f9d..b30adfeba 100755 --- a/js/src/views/Event/Event.vue +++ b/js/src/views/Event/Event.vue @@ -303,6 +303,8 @@ v-if="event && config" :event="event" :config="config" + :user="loggedUser" + @showMapModal="showMap = true" /> </div> </aside> @@ -458,6 +460,22 @@ </section> </div> </b-modal> + <b-modal + class="map-modal" + v-if="event.physicalAddress && event.physicalAddress.geom" + :active.sync="showMap" + has-modal-card + full-screen + :can-cancel="['escape', 'outside']" + > + <template #default="props"> + <event-map + :routingType="routingType" + :address="event.physicalAddress" + @close="props.close" + /> + </template> + </b-modal> </div> </div> </template> @@ -508,11 +526,14 @@ import Subtitle from "../../components/Utils/Subtitle.vue"; import Tag from "../../components/Tag.vue"; import EventMetadataSidebar from "../../components/Event/EventMetadataSidebar.vue"; import EventBanner from "../../components/Event/EventBanner.vue"; +import EventMap from "../../components/Event/EventMap.vue"; import PopoverActorCard from "../../components/Account/PopoverActorCard.vue"; import { IParticipant } from "../../types/participant.model"; import { ApolloCache, FetchResult } from "@apollo/client/core"; import { IEventMetadataDescription } from "@/types/event-metadata"; import { eventMetaDataList } from "../../services/EventMetadata"; +import { USER_SETTINGS } from "@/graphql/user"; +import { IUser } from "@/types/current-user.model"; // noinspection TypeScriptValidateTypes @Component({ @@ -529,6 +550,7 @@ import { eventMetaDataList } from "../../services/EventMetadata"; PopoverActorCard, EventBanner, EventMetadataSidebar, + EventMap, ShareEventModal: () => import( /* webpackChunkName: "shareEventModal" */ "../../components/Event/ShareEventModal.vue" @@ -567,9 +589,8 @@ import { eventMetaDataList } from "../../services/EventMetadata"; this.handleErrors(graphQLErrors); }, }, - currentActor: { - query: CURRENT_ACTOR_CLIENT, - }, + currentActor: CURRENT_ACTOR_CLIENT, + loggedUser: USER_SETTINGS, participations: { query: EVENT_PERSON_PARTICIPATION, fetchPolicy: "cache-and-network", @@ -646,6 +667,8 @@ export default class Event extends EventMixin { person!: IPerson; + loggedUser!: IUser; + participations: IParticipant[] = []; oldParticipationRole!: string; @@ -1130,6 +1153,12 @@ export default class Event extends EventMixin { return acc; }, {}); } + + showMap = false; + + get routingType(): string | undefined { + return this.config?.maps?.routing?.type; + } } </script> <style lang="scss" scoped> diff --git a/js/tests/unit/specs/components/Post/PostElementItem.spec.ts b/js/tests/unit/specs/components/Post/PostElementItem.spec.ts index 1fb4cfa5c..0ce89f5a9 100644 --- a/js/tests/unit/specs/components/Post/PostElementItem.spec.ts +++ b/js/tests/unit/specs/components/Post/PostElementItem.spec.ts @@ -59,7 +59,7 @@ describe("PostElementItem", () => { postData.title ); expect(wrapper.find(".metadata").text()).toContain( - formatDateTimeString(postData.insertedAt, false) + formatDateTimeString(postData.insertedAt, undefined, false) ); expect(wrapper.find(".metadata small").text()).not.toContain("Public"); diff --git a/js/tsconfig.json b/js/tsconfig.json index 5380762de..99369f905 100644 --- a/js/tsconfig.json +++ b/js/tsconfig.json @@ -18,7 +18,7 @@ "paths": { "@/*": ["src/*"] }, - "lib": ["esnext", "dom", "dom.iterable", "scripthost", "webworker"] + "lib": ["esnext", "dom", "es2017.intl", "dom.iterable", "scripthost", "webworker"] }, "include": [ "src/**/*.ts", diff --git a/js/yarn.lock b/js/yarn.lock index 40efd271a..169d5a784 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -4221,6 +4221,11 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +date-fns-tz@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/date-fns-tz/-/date-fns-tz-1.1.6.tgz#93cbf354e2aeb2cd312ffa32e462c1943cf20a8e" + integrity sha512-nyy+URfFI3KUY7udEJozcoftju+KduaqkVfwyTIE0traBiVye09QnyWKLZK7drRr5h9B7sPJITmQnS3U6YOdQg== + date-fns@^2.16.0: version "2.25.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.25.0.tgz#8c5c8f1d958be3809a9a03f4b742eba894fc5680" diff --git a/lib/federation/activity_pub/actor.ex b/lib/federation/activity_pub/actor.ex index 7509ee7fe..552a879fc 100644 --- a/lib/federation/activity_pub/actor.ex +++ b/lib/federation/activity_pub/actor.ex @@ -49,7 +49,7 @@ defmodule Mobilizon.Federation.ActivityPub.Actor do Create an actor locally by its URL (AP ID) """ @spec make_actor_from_url(url :: String.t(), preload :: boolean()) :: - {:ok, Actor.t()} | {:error, make_actor_errors} + {:ok, Actor.t()} | {:error, make_actor_errors | Ecto.Changeset.t()} def make_actor_from_url(url, preload \\ false) do if are_same_origin?(url, Endpoint.url()) do {:error, :actor_is_local} @@ -63,7 +63,7 @@ defmodule Mobilizon.Federation.ActivityPub.Actor do Logger.info("Actor #{url} was deleted") {:error, :actor_deleted} - {:error, err} when err in [:http_error, :json_decode_error] -> + {:error, err} -> {:error, err} end end diff --git a/lib/federation/activity_pub/permission.ex b/lib/federation/activity_pub/permission.ex index 9a14c1671..83b910f65 100644 --- a/lib/federation/activity_pub/permission.ex +++ b/lib/federation/activity_pub/permission.ex @@ -35,7 +35,7 @@ defmodule Mobilizon.Federation.ActivityPub.Permission do @doc """ Check that actor can create such an object """ - @spec can_create_group_object?(String.t() | integer(), String.t() | integer(), Entity.t()) :: + @spec can_create_group_object?(String.t() | integer(), String.t() | integer(), struct()) :: boolean() def can_create_group_object?( actor_id, diff --git a/lib/federation/activity_pub/types/events.ex b/lib/federation/activity_pub/types/events.ex index b2a222298..0fdd3f32d 100644 --- a/lib/federation/activity_pub/types/events.ex +++ b/lib/federation/activity_pub/types/events.ex @@ -156,7 +156,7 @@ defmodule Mobilizon.Federation.ActivityPub.Types.Events do role ) - {:error, %Ecto.Changeset{} = err} -> + {:error, _, %Ecto.Changeset{} = err, _} -> {:error, err} end else diff --git a/lib/graphql/api/events.ex b/lib/graphql/api/events.ex index 92d4b1116..80d412827 100644 --- a/lib/graphql/api/events.ex +++ b/lib/graphql/api/events.ex @@ -12,7 +12,8 @@ defmodule Mobilizon.GraphQL.API.Events do @doc """ Create an event """ - @spec create_event(map) :: {:ok, Activity.t(), Event.t()} | any + @spec create_event(map) :: + {:ok, Activity.t(), Event.t()} | {:error, atom() | Ecto.Changeset.t()} def create_event(args) do # For now we don't federate drafts but it will be needed if we want to edit them as groups Actions.Create.create(:event, prepare_args(args), should_federate(args)) @@ -21,7 +22,8 @@ defmodule Mobilizon.GraphQL.API.Events do @doc """ Update an event """ - @spec update_event(map, Event.t()) :: {:ok, Activity.t(), Event.t()} | any + @spec update_event(map, Event.t()) :: + {:ok, Activity.t(), Event.t()} | {:error, atom | Ecto.Changeset.t()} def update_event(args, %Event{} = event) do Actions.Update.update(event, prepare_args(args), should_federate(args)) end diff --git a/lib/graphql/middleware/current_actor_provider.ex b/lib/graphql/middleware/current_actor_provider.ex index d34eb2a9e..abf7384cc 100644 --- a/lib/graphql/middleware/current_actor_provider.ex +++ b/lib/graphql/middleware/current_actor_provider.ex @@ -16,7 +16,9 @@ defmodule Mobilizon.GraphQL.Middleware.CurrentActorProvider do _config ) do case Cachex.fetch(:default_actors, to_string(user_id), fn -> default(user) end) do - {status, %Actor{} = current_actor} when status in [:ok, :commit] -> + {status, %Actor{preferred_username: preferred_username} = current_actor} + when status in [:ok, :commit] -> + Sentry.Context.set_user_context(%{name: preferred_username}) context = Map.put(context, :current_actor, current_actor) %Absinthe.Resolution{resolution | context: context} diff --git a/lib/graphql/resolvers/address.ex b/lib/graphql/resolvers/address.ex index a2476a8dd..bb17ef956 100644 --- a/lib/graphql/resolvers/address.ex +++ b/lib/graphql/resolvers/address.ex @@ -11,7 +11,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Address do @doc """ Search an address """ - @spec search(map, map, map) :: {:ok, [Address.t()]} + @spec search(map, map, map) :: {:ok, [map()]} def search( _parent, %{query: query, locale: locale, page: _page, limit: _limit} = args, diff --git a/lib/graphql/resolvers/event.ex b/lib/graphql/resolvers/event.ex index 4db49fd1b..3ea71707c 100644 --- a/lib/graphql/resolvers/event.ex +++ b/lib/graphql/resolvers/event.ex @@ -13,9 +13,11 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do alias Mobilizon.Federation.ActivityPub.Activity alias Mobilizon.Federation.ActivityPub.Permission + alias Mobilizon.Service.TimezoneDetector import Mobilizon.Users.Guards, only: [is_moderator: 1] import Mobilizon.Web.Gettext import Mobilizon.GraphQL.Resolvers.Event.Utils + require Logger # We limit the max number of events that can be retrieved @event_max_limit 100 @@ -262,35 +264,47 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do def create_event( _parent, %{organizer_actor_id: organizer_actor_id} = args, - %{context: %{current_user: user}} = _resolution + %{context: %{current_user: %User{} = user}} = _resolution ) do - # See https://github.com/absinthe-graphql/absinthe/issues/490 if Config.only_groups_can_create_events?() and Map.get(args, :attributed_to_id) == nil do - {:error, "only groups can create events"} + {:error, + dgettext( + "errors", + "Only groups can create events" + )} else - with {:is_owned, %Actor{} = organizer_actor} <- User.owns_actor(user, organizer_actor_id), - args <- Map.put(args, :options, args[:options] || %{}), - {:group_check, true} <- {:group_check, is_organizer_group_member?(args)}, - args_with_organizer <- Map.put(args, :organizer_actor, organizer_actor), - {:ok, %Activity{data: %{"object" => %{"type" => "Event"}}}, %Event{} = event} <- - API.Events.create_event(args_with_organizer) do - {:ok, event} - else - {:group_check, false} -> - {:error, - dgettext( - "errors", - "Organizer profile doesn't have permission to create an event on behalf of this group" - )} + case User.owns_actor(user, organizer_actor_id) do + {:is_owned, %Actor{} = organizer_actor} -> + if is_organizer_group_member?(args) do + args_with_organizer = + args |> Map.put(:organizer_actor, organizer_actor) |> extract_timezone(user.id) + + case API.Events.create_event(args_with_organizer) do + {:ok, %Activity{data: %{"object" => %{"type" => "Event"}}}, %Event{} = event} -> + {:ok, event} + + {:error, %Ecto.Changeset{} = error} -> + {:error, error} + + {:error, err} -> + Logger.warning("Unknown error while creating event: #{inspect(err)}") + + {:error, + dgettext( + "errors", + "Unknown error while creating event" + )} + end + else + {:error, + dgettext( + "errors", + "Organizer profile doesn't have permission to create an event on behalf of this group" + )} + end {:is_owned, nil} -> {:error, dgettext("errors", "Organizer profile is not owned by the user")} - - {:error, _, %Ecto.Changeset{} = error, _} -> - {:error, error} - - {:error, %Ecto.Changeset{} = error} -> - {:error, error} end end end @@ -314,6 +328,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do with {:ok, %Event{} = event} <- Events.get_event_with_preload(event_id), {:ok, args} <- verify_profile_change(args, event, user, actor), + args <- extract_timezone(args, user.id), {:event_can_be_managed, true} <- {:event_can_be_managed, can_event_be_updated_by?(event, actor)}, {:ok, %Activity{data: %{"object" => %{"type" => "Event"}}}, %Event{} = event} <- @@ -442,4 +457,42 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do {:ok, args} end end + + @spec extract_timezone(map(), String.t() | integer()) :: map() + defp extract_timezone(args, user_id) do + event_options = Map.get(args, :options, %{}) + timezone = Map.get(event_options, :timezone) + physical_address = Map.get(args, :physical_address) + + fallback_tz = + case Mobilizon.Users.get_setting(user_id) do + nil -> nil + setting -> setting |> Map.from_struct() |> get_in([:timezone]) + end + + timezone = determine_timezone(timezone, physical_address, fallback_tz) + + event_options = Map.put(event_options, :timezone, timezone) + + Map.put(args, :options, event_options) + end + + @spec determine_timezone( + String.t() | nil, + any(), + String.t() | nil + ) :: String.t() | nil + defp determine_timezone(timezone, physical_address, fallback_tz) do + case physical_address do + physical_address when is_map(physical_address) -> + TimezoneDetector.detect( + timezone, + physical_address.geom, + fallback_tz + ) + + _ -> + timezone || fallback_tz + end + end end diff --git a/lib/graphql/schema/address.ex b/lib/graphql/schema/address.ex index bb1c1f622..bee6ac9c9 100644 --- a/lib/graphql/schema/address.ex +++ b/lib/graphql/schema/address.ex @@ -21,6 +21,7 @@ defmodule Mobilizon.GraphQL.Schema.AddressType do field(:url, :string, description: "The address's URL") field(:id, :id, description: "The address's ID") field(:origin_id, :string, description: "The address's original ID from the provider") + field(:timezone, :string, description: "The (estimated) timezone of the location") end @desc """ @@ -54,6 +55,7 @@ defmodule Mobilizon.GraphQL.Schema.AddressType do field(:url, :string, description: "The address's URL") field(:id, :id, description: "The address's ID") field(:origin_id, :string, description: "The address's original ID from the provider") + field(:timezone, :string, description: "The (estimated) timezone of the location") end @desc """ diff --git a/lib/graphql/schema/event.ex b/lib/graphql/schema/event.ex index 2bfe59932..ba5159067 100644 --- a/lib/graphql/schema/event.ex +++ b/lib/graphql/schema/event.ex @@ -237,6 +237,8 @@ defmodule Mobilizon.GraphQL.Schema.EventType do field(:show_start_time, :boolean, description: "Show event start time") field(:show_end_time, :boolean, description: "Show event end time") + field(:timezone, :string, description: "The event's timezone") + field(:hide_organizer_when_group_event, :boolean, description: "Whether to show or hide the person organizer when event is organized by a group" @@ -286,6 +288,8 @@ defmodule Mobilizon.GraphQL.Schema.EventType do field(:show_start_time, :boolean, description: "Show event start time") field(:show_end_time, :boolean, description: "Show event end time") + field(:timezone, :string, description: "The event's timezone") + field(:hide_organizer_when_group_event, :boolean, description: "Whether to show or hide the person organizer when event is organized by a group" @@ -393,7 +397,7 @@ defmodule Mobilizon.GraphQL.Schema.EventType do arg(:category, :string, default_value: "meeting", description: "The event's category") arg(:physical_address, :address_input, description: "The event's physical address") - arg(:options, :event_options_input, description: "The event options") + arg(:options, :event_options_input, default_value: %{}, description: "The event options") arg(:metadata, list_of(:event_metadata_input), description: "The event metadata") arg(:draft, :boolean, diff --git a/lib/mobilizon.ex b/lib/mobilizon.ex index 1b9816ccc..a6f9e640d 100644 --- a/lib/mobilizon.ex +++ b/lib/mobilizon.ex @@ -48,6 +48,7 @@ defmodule Mobilizon do Guardian.DB.Token.SweeperServer, ActivityPub.Federator, Mobilizon.PythonWorker, + TzWorld.Backend.DetsWithIndexCache, cachex_spec(:feed, 2500, 60, 60, &Feed.create_cache/1), cachex_spec(:ics, 2500, 60, 60, &ICalendar.create_cache/1), cachex_spec( diff --git a/lib/mobilizon/addresses/address.ex b/lib/mobilizon/addresses/address.ex index edd02ac81..89845102a 100644 --- a/lib/mobilizon/addresses/address.ex +++ b/lib/mobilizon/addresses/address.ex @@ -12,17 +12,18 @@ defmodule Mobilizon.Addresses.Address do alias Mobilizon.Web.Endpoint @type t :: %__MODULE__{ - country: String.t(), - locality: String.t(), - region: String.t(), - description: String.t(), - geom: Geo.PostGIS.Geometry.t(), - postal_code: String.t(), - street: String.t(), - type: String.t(), + country: String.t() | nil, + locality: String.t() | nil, + region: String.t() | nil, + description: String.t() | nil, + geom: Geo.PostGIS.Geometry.t() | nil, + postal_code: String.t() | nil, + street: String.t() | nil, + type: String.t() | nil, url: String.t(), - origin_id: String.t(), - events: [Event.t()] + origin_id: String.t() | nil, + events: [Event.t()], + timezone: String.t() | nil } @required_attrs [:url] @@ -35,7 +36,8 @@ defmodule Mobilizon.Addresses.Address do :postal_code, :street, :origin_id, - :type + :type, + :timezone ] @attrs @required_attrs ++ @optional_attrs @@ -50,6 +52,7 @@ defmodule Mobilizon.Addresses.Address do field(:type, :string) field(:url, :string) field(:origin_id, :string) + field(:timezone, :string) has_many(:events, Event, foreign_key: :physical_address_id) @@ -61,6 +64,7 @@ defmodule Mobilizon.Addresses.Address do def changeset(%__MODULE__{} = address, attrs) do address |> cast(attrs, @attrs) + |> maybe_set_timezone() |> set_url() |> validate_required(@required_attrs) |> unique_constraint(:url, name: :addresses_url_index) @@ -90,4 +94,29 @@ defmodule Mobilizon.Addresses.Address do "#{address.street} #{address.postal_code} #{address.locality} #{address.region} #{address.country}" ) end + + @spec maybe_set_timezone(Ecto.Changeset.t()) :: Ecto.Changeset.t() + defp maybe_set_timezone(%Ecto.Changeset{} = changeset) do + case get_change(changeset, :geom) do + nil -> + changeset + + geom -> + case get_field(changeset, :timezone) do + # Only update the timezone if the geom has change and we don't already have a set timezone + nil -> put_change(changeset, :timezone, timezone(geom)) + _ -> changeset + end + end + end + + @spec timezone(Geo.PostGIS.Geometry.t() | nil) :: String.t() | nil + defp timezone(nil), do: nil + + defp timezone(geom) do + case TzWorld.timezone_at(geom) do + {:ok, tz} -> tz + {:error, _err} -> nil + end + end end diff --git a/lib/mobilizon/events/event_options.ex b/lib/mobilizon/events/event_options.ex index 303369755..b641b2010 100644 --- a/lib/mobilizon/events/event_options.ex +++ b/lib/mobilizon/events/event_options.ex @@ -27,6 +27,7 @@ defmodule Mobilizon.Events.EventOptions do participation_condition: [EventParticipationCondition.t()], show_start_time: boolean, show_end_time: boolean, + timezone: String.t() | nil, hide_organizer_when_group_event: boolean } @@ -41,6 +42,7 @@ defmodule Mobilizon.Events.EventOptions do :show_participation_price, :show_start_time, :show_end_time, + :timezone, :hide_organizer_when_group_event ] @@ -57,6 +59,7 @@ defmodule Mobilizon.Events.EventOptions do field(:show_participation_price, :boolean) field(:show_start_time, :boolean, default: true) field(:show_end_time, :boolean, default: true) + field(:timezone, :string) field(:hide_organizer_when_group_event, :boolean, default: false) embeds_many(:offers, EventOffer) diff --git a/lib/mobilizon/events/events.ex b/lib/mobilizon/events/events.ex index a1f9aeef2..83001cb10 100644 --- a/lib/mobilizon/events/events.ex +++ b/lib/mobilizon/events/events.ex @@ -401,7 +401,8 @@ defmodule Mobilizon.Events do |> Page.build_page(page, limit) end - @spec list_organized_events_for_actor(Actor.t(), integer | nil, integer | nil) :: Page.t() + @spec list_organized_events_for_actor(Actor.t(), integer | nil, integer | nil) :: + Page.t(Event.t()) def list_organized_events_for_actor(%Actor{id: actor_id}, page \\ nil, limit \\ nil) do actor_id |> event_for_actor_query(desc: :begins_on) @@ -409,13 +410,15 @@ defmodule Mobilizon.Events do |> Page.build_page(page, limit) end + @spec list_simple_organized_events_for_group(Actor.t(), integer | nil, integer | nil) :: + Page.t(Event.t()) def list_simple_organized_events_for_group(%Actor{} = actor, page \\ nil, limit \\ nil) do list_organized_events_for_group(actor, :all, nil, nil, page, limit) end @spec list_organized_events_for_group( Actor.t(), - EventVisibility.t(), + EventVisibility.t() | :all, DateTime.t() | nil, DateTime.t() | nil, integer | nil, @@ -885,7 +888,9 @@ defmodule Mobilizon.Events do @doc """ Creates a participant. """ - @spec create_participant(map) :: {:ok, Participant.t()} | {:error, Changeset.t()} + @spec create_participant(map) :: + {:ok, Participant.t()} + | {:error, :participant | :update_event_participation_stats, Changeset.t(), map()} def create_participant(attrs \\ %{}, update_event_participation_stats \\ true) do with {:ok, %{participant: %Participant{} = participant}} <- Multi.new() @@ -912,7 +917,8 @@ defmodule Mobilizon.Events do Updates a participant. """ @spec update_participant(Participant.t(), map) :: - {:ok, Participant.t()} | {:error, Changeset.t()} + {:ok, Participant.t()} + | {:error, :participant | :update_event_participation_stats, Changeset.t(), map()} def update_participant(%Participant{role: old_role} = participant, attrs) do with {:ok, %{participant: %Participant{} = participant}} <- Multi.new() @@ -1625,11 +1631,12 @@ defmodule Mobilizon.Events do from(p in query, where: p.role == ^role) end + @spec event_filter_visibility(Ecto.Queryable.t(), :public | :all) :: + Ecto.Queryable.t() | Ecto.Query.t() defp event_filter_visibility(query, :all), do: query defp event_filter_visibility(query, :public) do - query - |> where(visibility: ^:public, draft: false) + where(query, visibility: ^:public, draft: false) end defp event_filter_begins_on(query, nil, nil), diff --git a/lib/service/geospatial/addok.ex b/lib/service/geospatial/addok.ex index d9c196dbf..faecdb20a 100644 --- a/lib/service/geospatial/addok.ex +++ b/lib/service/geospatial/addok.ex @@ -66,12 +66,15 @@ defmodule Mobilizon.Service.Geospatial.Addok do defp process_data(features) do features |> Enum.map(fn %{"geometry" => geometry, "properties" => properties} -> + coordinates = geometry |> Map.get("coordinates") |> Provider.coordinates() + %Address{ country: Map.get(properties, "country", default_country()), locality: Map.get(properties, "city"), region: Map.get(properties, "context"), description: Map.get(properties, "name") || street_address(properties), - geom: geometry |> Map.get("coordinates") |> Provider.coordinates(), + geom: coordinates, + timezone: Provider.timezone(coordinates), postal_code: Map.get(properties, "postcode"), street: properties |> street_address() } diff --git a/lib/service/geospatial/google_maps.ex b/lib/service/geospatial/google_maps.ex index 936e000f5..47dc91797 100644 --- a/lib/service/geospatial/google_maps.ex +++ b/lib/service/geospatial/google_maps.ex @@ -124,12 +124,15 @@ defmodule Mobilizon.Service.Geospatial.GoogleMaps do description end + coordinates = Provider.coordinates([lon, lat]) + %Address{ country: Map.get(components, "country"), locality: Map.get(components, "locality"), region: Map.get(components, "administrative_area_level_1"), description: description, - geom: [lon, lat] |> Provider.coordinates(), + geom: coordinates, + timezone: Provider.timezone(coordinates), postal_code: Map.get(components, "postal_code"), street: street_address(components), origin_id: "gm:" <> to_string(place_id) diff --git a/lib/service/geospatial/map_quest.ex b/lib/service/geospatial/map_quest.ex index 155a53dfc..4d27e57bd 100644 --- a/lib/service/geospatial/map_quest.ex +++ b/lib/service/geospatial/map_quest.ex @@ -98,12 +98,15 @@ defmodule Mobilizon.Service.Geospatial.MapQuest do end defp produce_address(address, lat, lng) do + coordinates = Provider.coordinates([lng, lat]) + %Address{ country: Map.get(address, "adminArea1"), locality: Map.get(address, "adminArea5"), region: Map.get(address, "adminArea3"), description: Map.get(address, "street"), - geom: [lng, lat] |> Provider.coordinates(), + geom: coordinates, + timezone: Provider.timezone(coordinates), postal_code: Map.get(address, "postalCode"), street: Map.get(address, "street") } diff --git a/lib/service/geospatial/mimirsbrunn.ex b/lib/service/geospatial/mimirsbrunn.ex index d718f9d9a..3dafed63d 100644 --- a/lib/service/geospatial/mimirsbrunn.ex +++ b/lib/service/geospatial/mimirsbrunn.ex @@ -75,7 +75,8 @@ defmodule Mobilizon.Service.Geospatial.Mimirsbrunn do "properties" => %{"geocoding" => geocoding} } -> address = process_address(geocoding) - %Address{address | geom: Provider.coordinates(coordinates)} + coordinates = Provider.coordinates(coordinates) + %Address{address | geom: coordinates, timezone: Provider.timezone(coordinates)} end) end diff --git a/lib/service/geospatial/nominatim.ex b/lib/service/geospatial/nominatim.ex index c32e7ebcd..85754df92 100644 --- a/lib/service/geospatial/nominatim.ex +++ b/lib/service/geospatial/nominatim.ex @@ -75,7 +75,8 @@ defmodule Mobilizon.Service.Geospatial.Nominatim do "properties" => %{"geocoding" => geocoding} } -> address = process_address(geocoding) - %Address{address | geom: Provider.coordinates(coordinates)} + coordinates = Provider.coordinates(coordinates) + %Address{address | geom: coordinates, timezone: Provider.timezone(coordinates)} end) end diff --git a/lib/service/geospatial/pelias.ex b/lib/service/geospatial/pelias.ex index 6622124be..72ed452a8 100644 --- a/lib/service/geospatial/pelias.ex +++ b/lib/service/geospatial/pelias.ex @@ -76,7 +76,8 @@ defmodule Mobilizon.Service.Geospatial.Pelias do "properties" => properties } -> address = process_address(properties) - %Address{address | geom: Provider.coordinates(coordinates)} + coordinates = Provider.coordinates(coordinates) + %Address{address | geom: coordinates, timezone: Provider.timezone(coordinates)} end) end diff --git a/lib/service/geospatial/photon.ex b/lib/service/geospatial/photon.ex index ef47bb7f5..838914502 100644 --- a/lib/service/geospatial/photon.ex +++ b/lib/service/geospatial/photon.ex @@ -69,12 +69,15 @@ defmodule Mobilizon.Service.Geospatial.Photon do defp process_data(features) do features |> Enum.map(fn %{"geometry" => geometry, "properties" => properties} -> + coordinates = geometry |> Map.get("coordinates") |> Provider.coordinates() + %Address{ country: Map.get(properties, "country"), locality: Map.get(properties, "city"), region: Map.get(properties, "state"), description: Map.get(properties, "name") || street_address(properties), - geom: geometry |> Map.get("coordinates") |> Provider.coordinates(), + geom: coordinates, + timezone: Provider.timezone(coordinates), postal_code: Map.get(properties, "postcode"), street: properties |> street_address() } diff --git a/lib/service/geospatial/provider.ex b/lib/service/geospatial/provider.ex index 8c20712c6..3f08bb162 100644 --- a/lib/service/geospatial/provider.ex +++ b/lib/service/geospatial/provider.ex @@ -79,6 +79,19 @@ defmodule Mobilizon.Service.Geospatial.Provider do def coordinates(_), do: nil + @doc """ + Returns the timezone for a Geo.Point + """ + @spec timezone(nil | Geo.Point.t()) :: nil | String.t() + def timezone(nil), do: nil + + def timezone(%Geo.Point{} = point) do + case TzWorld.timezone_at(point) do + {:ok, tz} -> tz + {:error, _err} -> nil + end + end + @spec endpoint(atom()) :: String.t() def endpoint(provider) do Application.get_env(:mobilizon, provider) |> get_in([:endpoint]) diff --git a/lib/service/metadata/event.ex b/lib/service/metadata/event.ex index e88c2bc99..cf47ea4f1 100644 --- a/lib/service/metadata/event.ex +++ b/lib/service/metadata/event.ex @@ -2,7 +2,7 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do alias Phoenix.HTML alias Phoenix.HTML.Tag alias Mobilizon.Addresses.Address - alias Mobilizon.Events.Event + alias Mobilizon.Events.{Event, EventOptions} alias Mobilizon.Web.JsonLD.ObjectView import Mobilizon.Service.Metadata.Utils, @@ -53,20 +53,52 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do %Event{ description: description, begins_on: begins_on, - physical_address: %Address{} = address + physical_address: address, + options: %EventOptions{timezone: timezone}, + language: language }, locale ) do - "#{datetime_to_string(begins_on, locale)} - #{render_address(address)} - #{process_description(description, locale)}" + language = build_language(language, locale) + begins_on = build_begins_on(begins_on, timezone, language) + + begins_on + |> datetime_to_string(language) + |> (&[&1]).() + |> add_timezone(begins_on) + |> maybe_build_address(address) + |> build_description(description, language) + |> Enum.join(" - ") end - defp description( - %Event{ - description: description, - begins_on: begins_on - }, - locale - ) do - "#{datetime_to_string(begins_on, locale)} - #{process_description(description, locale)}" + @spec build_language(String.t() | nil, String.t()) :: String.t() + defp build_language(language, locale), do: language || locale + + @spec build_begins_on(DateTime.t(), String.t() | nil, String.t()) :: DateTime.t() + defp build_begins_on(begins_on, timezone, language) do + if timezone do + case DateTime.shift_zone(begins_on, timezone) do + {:ok, begins_on} -> begins_on + {:error, _err} -> begins_on + end + else + begins_on + end + end + + defp add_timezone(elements, %DateTime{} = begins_on) do + elements ++ [Cldr.DateTime.Formatter.zone_gmt(begins_on)] + end + + @spec maybe_build_address(list(String.t()), Address.t() | nil) :: list(String.t()) + defp maybe_build_address(elements, %Address{} = address) do + elements ++ [render_address(address)] + end + + defp maybe_build_address(elements, _address), do: elements + + @spec build_description(list(String.t()), String.t(), String.t()) :: list(String.t()) + defp build_description(elements, description, language) do + elements ++ [process_description(description, language)] end end diff --git a/lib/service/timezone_detector.ex b/lib/service/timezone_detector.ex new file mode 100644 index 000000000..fe0ad35e4 --- /dev/null +++ b/lib/service/timezone_detector.ex @@ -0,0 +1,40 @@ +defmodule Mobilizon.Service.TimezoneDetector do + @moduledoc """ + Detect the timezone from a point + """ + + @type detectable :: Geo.Point.t() | Geo.PointZ.t() | {float() | float()} + + @doc """ + Detect the most appropriate timezone from a value, a geographic set of coordinates and a fallback + """ + @spec detect(String.t() | nil, detectable(), String.t()) :: String.t() + def detect(nil, geo, fallback) do + case TzWorld.timezone_at(geo) do + {:ok, timezone} -> + timezone + + {:error, :time_zone_not_found} -> + fallback + end + end + + def detect(timezone, geo, fallback) do + if Tzdata.zone_exists?(timezone) do + timezone + else + detect(nil, geo, fallback) + end + end + + @spec detect(String.t() | nil, String.t()) :: String.t() + def detect(nil, fallback), do: fallback + + def detect(timezone, fallback) do + if Tzdata.zone_exists?(timezone) do + timezone + else + fallback + end + end +end diff --git a/lib/web/auth/context.ex b/lib/web/auth/context.ex index dbf216c9f..4e3eaaae6 100644 --- a/lib/web/auth/context.ex +++ b/lib/web/auth/context.ex @@ -27,23 +27,30 @@ defmodule Mobilizon.Web.Auth.Context do user_agent = conn |> Plug.Conn.get_req_header("user-agent") |> List.first() + if SentryAdapter.enabled?() do + Sentry.Context.set_request_context(%{ + url: Plug.Conn.request_url(conn), + method: conn.method, + headers: %{ + "User-Agent": user_agent, + Referer: conn |> Plug.Conn.get_req_header("referer") |> List.first() + }, + query_string: conn.query_string, + env: %{ + REQUEST_ID: conn |> Plug.Conn.get_resp_header("x-request-id") |> List.first(), + SERVER_NAME: conn.host + } + }) + end + {conn, context} = case Guardian.Plug.current_resource(conn) do %User{id: user_id, email: user_email} = user -> if SentryAdapter.enabled?() do - Sentry.Context.set_user_context(%{id: user_id, name: user_email}) - - Sentry.Context.set_request_context(%{ - url: Plug.Conn.request_url(conn), - method: conn.method, - headers: %{ - "User-Agent": user_agent - }, - query_string: conn.query_string, - env: %{ - REQUEST_ID: conn |> Plug.Conn.get_resp_header("x-request-id") |> List.first(), - SERVER_NAME: conn.host - } + Sentry.Context.set_user_context(%{ + id: user_id, + email: user_email, + ip_address: context.ip }) end diff --git a/mix.exs b/mix.exs index 127b768d3..c1cb4d56f 100644 --- a/mix.exs +++ b/mix.exs @@ -206,6 +206,7 @@ defmodule Mobilizon.Mixfile do {:paasaa, "~> 0.5.0"}, {:nimble_csv, "~> 1.1"}, {:export, "~> 0.1.0"}, + {:tz_world, "~> 0.5.0"}, # Dev and test dependencies {:phoenix_live_reload, "~> 1.2", only: [:dev, :e2e]}, {:ex_machina, "~> 2.3", only: [:dev, :test]}, diff --git a/mix.lock b/mix.lock index e0792c07b..af28ed58b 100644 --- a/mix.lock +++ b/mix.lock @@ -131,6 +131,7 @@ "telemetry": {:hex, :telemetry, "1.0.0", "0f453a102cdf13d506b7c0ab158324c337c41f1cc7548f0bc0e130bbf0ae9452", [:rebar3], [], "hexpm", "73bc09fa59b4a0284efb4624335583c528e07ec9ae76aca96ea0673850aec57a"}, "tesla": {:hex, :tesla, "1.4.3", "f5a494e08fb1abe4fd9c28abb17f3d9b62b8f6fc492860baa91efb1aab61c8a0", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.3", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "e0755bb664bf4d664af72931f320c97adbf89da4586670f4864bf259b5750386"}, "timex": {:hex, :timex, "3.7.6", "502d2347ec550e77fdf419bc12d15bdccd31266bb7d925b30bf478268098282f", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "a296327f79cb1ec795b896698c56e662ed7210cc9eb31f0ab365eb3a62e2c589"}, + "tz_world": {:hex, :tz_world, "0.5.0", "fb93adb6ec9a32bbf1664d84083bb426b5273a31d4051a93654feaf9feb96b33", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: true]}, {:geo, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :geo, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "df236849eff87a36c436b557803fb72b57f10dbc3f5d44cd1c06324e0c8447bb"}, "tzdata": {:hex, :tzdata, "1.1.0", "72f5babaa9390d0f131465c8702fa76da0919e37ba32baa90d93c583301a8359", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "18f453739b48d3dc5bcf0e8906d2dc112bb40baafe2c707596d89f3c8dd14034"}, "ueberauth": {:hex, :ueberauth, "0.6.3", "d42ace28b870e8072cf30e32e385579c57b9cc96ec74fa1f30f30da9c14f3cc0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "afc293d8a1140d6591b53e3eaf415ca92842cb1d32fad3c450c6f045f7f91b60"}, "ueberauth_discord": {:hex, :ueberauth_discord, "0.6.0", "d6ec040e4195c4138b9a959c79024ab4c213ba1aed9fc08099ecff141a6486da", [:mix], [{:oauth2, "~> 1.0 or ~> 2.0", [hex: :oauth2, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.6.3", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "c5ea960191c1d6c3a974947cae4d57efa565a9a0796b8e82bee45fac7ae2fabc"}, diff --git a/priv/repo/migrations/20211008084901_add_timezone_to_addresses.exs b/priv/repo/migrations/20211008084901_add_timezone_to_addresses.exs new file mode 100644 index 000000000..b099b27d3 --- /dev/null +++ b/priv/repo/migrations/20211008084901_add_timezone_to_addresses.exs @@ -0,0 +1,9 @@ +defmodule Mobilizon.Storage.Repo.Migrations.AddTimezoneToAddresses do + use Ecto.Migration + + def change do + alter table(:addresses) do + add(:timezone, :string) + end + end +end From 62af1e72d6b24a2706e225e5073f161751de3f5f Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Mon, 11 Oct 2021 17:13:57 +0200 Subject: [PATCH 3/9] Some fixes Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- js/tsconfig.json | 9 ++++++++- lib/graphql/resolvers/event.ex | 33 +++++++++++++++++++++------------ lib/graphql/resolvers/group.ex | 29 ++++++++++++++++++++--------- lib/service/metadata/event.ex | 6 +++--- tsconfig.json | 4 ++-- 5 files changed, 54 insertions(+), 27 deletions(-) diff --git a/js/tsconfig.json b/js/tsconfig.json index 99369f905..cbc948bc9 100644 --- a/js/tsconfig.json +++ b/js/tsconfig.json @@ -18,7 +18,14 @@ "paths": { "@/*": ["src/*"] }, - "lib": ["esnext", "dom", "es2017.intl", "dom.iterable", "scripthost", "webworker"] + "lib": [ + "esnext", + "dom", + "es2017.intl", + "dom.iterable", + "scripthost", + "webworker" + ] }, "include": [ "src/**/*.ts", diff --git a/lib/graphql/resolvers/event.ex b/lib/graphql/resolvers/event.ex index 3ea71707c..86f56b564 100644 --- a/lib/graphql/resolvers/event.ex +++ b/lib/graphql/resolvers/event.ex @@ -266,15 +266,9 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do %{organizer_actor_id: organizer_actor_id} = args, %{context: %{current_user: %User{} = user}} = _resolution ) do - if Config.only_groups_can_create_events?() and Map.get(args, :attributed_to_id) == nil do - {:error, - dgettext( - "errors", - "Only groups can create events" - )} - else - case User.owns_actor(user, organizer_actor_id) do - {:is_owned, %Actor{} = organizer_actor} -> + case User.owns_actor(user, organizer_actor_id) do + {:is_owned, %Actor{} = organizer_actor} -> + if can_create_event?(args) do if is_organizer_group_member?(args) do args_with_organizer = args |> Map.put(:organizer_actor, organizer_actor) |> extract_timezone(user.id) @@ -302,10 +296,16 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do "Organizer profile doesn't have permission to create an event on behalf of this group" )} end + else + {:error, + dgettext( + "errors", + "Only groups can create events" + )} + end - {:is_owned, nil} -> - {:error, dgettext("errors", "Organizer profile is not owned by the user")} - end + {:is_owned, nil} -> + {:error, dgettext("errors", "Organizer profile is not owned by the user")} end end @@ -313,6 +313,15 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do {:error, dgettext("errors", "You need to be logged-in to create events")} end + @spec can_create_event?(map()) :: boolean() + defp can_create_event?(args) do + if Config.only_groups_can_create_events?() do + Map.get(args, :attributed_to_id) != nil + else + true + end + end + @doc """ Update an event """ diff --git a/lib/graphql/resolvers/group.ex b/lib/graphql/resolvers/group.ex index f003dae5e..5a4ea22e5 100644 --- a/lib/graphql/resolvers/group.ex +++ b/lib/graphql/resolvers/group.ex @@ -10,7 +10,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do alias Mobilizon.Federation.ActivityPub.Actions alias Mobilizon.Federation.ActivityPub.Actor, as: ActivityPubActor alias Mobilizon.GraphQL.API - alias Mobilizon.Users.User + alias Mobilizon.Users.{User, UserRole} alias Mobilizon.Web.Upload import Mobilizon.Web.Gettext @@ -143,14 +143,14 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do } } ) do - if Config.only_admin_can_create_groups?() and not is_admin(role) do - {:error, "only admins can create groups"} - else - with args when is_map(args) <- - Map.update(args, :preferred_username, "", &String.downcase/1), - args when is_map(args) <- Map.put(args, :creator_actor, creator_actor), - args when is_map(args) <- Map.put(args, :creator_actor_id, creator_actor_id), - {:picture, args} when is_map(args) <- {:picture, save_attached_pictures(args)}, + if can_create_group?(role) do + args = + args + |> Map.update(:preferred_username, "", &String.downcase/1) + |> Map.put(:creator_actor, creator_actor) + |> Map.put(:creator_actor_id, creator_actor_id) + + with {:picture, args} when is_map(args) <- {:picture, save_attached_pictures(args)}, {:ok, _activity, %Actor{type: :Group} = group} <- API.Groups.create_group(args) do {:ok, group} @@ -161,6 +161,8 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do {:error, err} when is_binary(err) -> {:error, err} end + else + {:error, dgettext("errors", "Only admins can create groups")} end end @@ -168,6 +170,15 @@ defmodule Mobilizon.GraphQL.Resolvers.Group do {:error, "You need to be logged-in to create a group"} end + @spec can_create_group?(UserRole.t()) :: boolean() + defp can_create_group?(role) do + if Config.only_admin_can_create_groups?() do + is_admin(role) + else + true + end + end + @doc """ Update a group. The creator is automatically added as admin """ diff --git a/lib/service/metadata/event.ex b/lib/service/metadata/event.ex index cf47ea4f1..6dede3f2a 100644 --- a/lib/service/metadata/event.ex +++ b/lib/service/metadata/event.ex @@ -60,7 +60,7 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do locale ) do language = build_language(language, locale) - begins_on = build_begins_on(begins_on, timezone, language) + begins_on = build_begins_on(begins_on, timezone) begins_on |> datetime_to_string(language) @@ -74,8 +74,8 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do @spec build_language(String.t() | nil, String.t()) :: String.t() defp build_language(language, locale), do: language || locale - @spec build_begins_on(DateTime.t(), String.t() | nil, String.t()) :: DateTime.t() - defp build_begins_on(begins_on, timezone, language) do + @spec build_begins_on(DateTime.t(), String.t() | nil) :: DateTime.t() + defp build_begins_on(begins_on, timezone) do if timezone do case DateTime.shift_zone(begins_on, timezone) do {:ok, begins_on} -> begins_on diff --git a/tsconfig.json b/tsconfig.json index ac08cb255..5a682fccc 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,3 +1,3 @@ { - "extends": "./js/tsconfig.json" -} \ No newline at end of file + "extends": "./js/tsconfig.json" +} From d4b6fb2b49f2413329df51ac798e25d33d03bb12 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Mon, 11 Oct 2021 17:41:02 +0200 Subject: [PATCH 4/9] Update translations Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- js/src/i18n/en_US.json | 10 +- js/src/i18n/fr_FR.json | 40 +- js/src/views/Admin/Follows.vue | 2 +- priv/gettext/ar/LC_MESSAGES/default.po | 18 +- priv/gettext/ar/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/be/LC_MESSAGES/default.po | 18 +- priv/gettext/be/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/ca/LC_MESSAGES/default.po | 18 +- priv/gettext/ca/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/cs/LC_MESSAGES/default.po | 18 +- priv/gettext/cs/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/de/LC_MESSAGES/default.po | 18 +- priv/gettext/de/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/default.pot | 18 +- priv/gettext/en/LC_MESSAGES/default.po | 18 +- priv/gettext/en/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/errors.pot | 150 +++--- priv/gettext/es/LC_MESSAGES/default.po | 528 +++++++++++----------- priv/gettext/es/LC_MESSAGES/errors.po | 370 ++++++++------- priv/gettext/fi/LC_MESSAGES/default.po | 18 +- priv/gettext/fi/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/fr/LC_MESSAGES/default.po | 18 +- priv/gettext/fr/LC_MESSAGES/errors.po | 142 +++--- priv/gettext/gl/LC_MESSAGES/default.po | 18 +- priv/gettext/gl/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/hu/LC_MESSAGES/default.po | 18 +- priv/gettext/hu/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/id/LC_MESSAGES/default.po | 18 +- priv/gettext/id/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/it/LC_MESSAGES/default.po | 18 +- priv/gettext/it/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/ja/LC_MESSAGES/default.po | 18 +- priv/gettext/ja/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/nl/LC_MESSAGES/default.po | 18 +- priv/gettext/nl/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/nn/LC_MESSAGES/default.po | 528 +++++++++++----------- priv/gettext/nn/LC_MESSAGES/errors.po | 370 ++++++++------- priv/gettext/oc/LC_MESSAGES/default.po | 18 +- priv/gettext/oc/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/pl/LC_MESSAGES/default.po | 18 +- priv/gettext/pl/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/pt/LC_MESSAGES/default.po | 18 +- priv/gettext/pt/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/pt_BR/LC_MESSAGES/default.po | 18 +- priv/gettext/pt_BR/LC_MESSAGES/errors.po | 150 +++--- priv/gettext/ru/LC_MESSAGES/default.po | 164 +++---- priv/gettext/ru/LC_MESSAGES/errors.po | 338 +++++++------- priv/gettext/sv/LC_MESSAGES/default.po | 18 +- priv/gettext/sv/LC_MESSAGES/errors.po | 150 +++--- 49 files changed, 3059 insertions(+), 2643 deletions(-) diff --git a/js/src/i18n/en_US.json b/js/src/i18n/en_US.json index 0c7843077..b8b631070 100644 --- a/js/src/i18n/en_US.json +++ b/js/src/i18n/en_US.json @@ -1163,10 +1163,7 @@ "Time in your timezone ({timezone})": "Time in your timezone ({timezone})", "Export": "Export", "Times in your timezone ({timezone})": "Times in your timezone ({timezone})", - "Skip to main": "Skip to main", "Comment body": "Comment body", - "has loaded": "has loaded", - "Follows": "Follows", "Event description body": "Event description body", "Event timezone will default to the timezone of the event's address if there is one, or to your own timezone setting.": "Event timezone will default to the timezone of the event's address if there is one, or to your own timezone setting.", "Clear timezone field": "Clear timezone field", @@ -1200,5 +1197,10 @@ "Create identity": "Create identity", "Resent confirmation email": "Resent confirmation email", "Send password reset": "Send password reset", - "Email validate": "Email validate" + "Email validate": "Email validate", + "Skip to main content": "Skip to main content", + "{timezoneLongName} ({timezoneShortName})": "{timezoneLongName} ({timezoneShortName})", + "Back to top": "Back to top", + "Powered by Mobilizon": "Powered by Mobilizon", + "Instance follows": "Instance follows" } \ No newline at end of file diff --git a/js/src/i18n/fr_FR.json b/js/src/i18n/fr_FR.json index ae8c35f21..100cc7706 100644 --- a/js/src/i18n/fr_FR.json +++ b/js/src/i18n/fr_FR.json @@ -1283,26 +1283,30 @@ "Privacy": "Vie privée", "Interact": "Interagir", "Redirecting to Mobilizon": "Redirection vers Mobilizon", - "First steps": "", - "Account settings": "", - "Admin dashboard": "", - "Admin settings": "", - "Group profiles": "", - "Reports list": "", - "Moderation logs": "", - "Create identity": "", - "Resent confirmation email": "", - "Send password reset": "", - "Email validate": "", - "Validating account": "", - "Follows": "", - "Event description body": "", + "First steps": "Premiers pas", + "Account settings": "Paramètres du compte", + "Admin dashboard": "Tableau de bord admin", + "Admin settings": "Paramètres admin", + "Group profiles": "Profils des groupes", + "Reports list": "Liste des signalements", + "Moderation logs": "Journaux de modération", + "Create identity": "Créer une identité", + "Resent confirmation email": "Réenvoi de l'email de confirmation", + "Send password reset": "Envoi de la réinitalisation du mot de passe", + "Email validate": "Validation de l'email", + "Validating account": "Validation du compte", + "Event description body": "Corps de la description de l'événement", "Event timezone will default to the timezone of the event's address if there is one, or to your own timezone setting.": "Le fuseau horaire de l'événement sera mis par défaut au fuseau horaire de l'addresse de l'événement s'il y en a une, ou bien à votre propre paramètre de fuseau horaire.", - "Clear timezone field": "", - "Group description body": "", + "Clear timezone field": "Vider le champ du fuseau horaire", + "Group description body": "Corps de la description du groupe", "Post body": "Corps du billet", "{group} posts": "Billets de {group}", "{group}'s todolists": "Liste de tâches de {group}", - "Validating email": "", - "Reset password": "" + "Validating email": "Validation de l'email", + "Reset password": "Réinitaliser le mot de passe", + "Skip to main content": "Passer au contenu principal", + "{timezoneLongName} ({timezoneShortName})": "{timezoneLongName} ({timezoneShortName})", + "Back to top": "Retour en haut", + "Powered by Mobilizon": "Propulsé par Mobilizon", + "Instance follows": "Abonnements de l'instance" } \ No newline at end of file diff --git a/js/src/views/Admin/Follows.vue b/js/src/views/Admin/Follows.vue index d23a53cbc..50ce67eba 100644 --- a/js/src/views/Admin/Follows.vue +++ b/js/src/views/Admin/Follows.vue @@ -89,7 +89,7 @@ import RouteName from "../../router/name"; }, metaInfo() { return { - title: this.$t("Follows") as string, + title: this.$t("Instance follows") as string, }; }, }) diff --git a/priv/gettext/ar/LC_MESSAGES/default.po b/priv/gettext/ar/LC_MESSAGES/default.po index 94f77285c..35d9f9573 100644 --- a/priv/gettext/ar/LC_MESSAGES/default.po +++ b/priv/gettext/ar/LC_MESSAGES/default.po @@ -313,12 +313,12 @@ msgid "What information do we collect?" msgstr "" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "" @@ -384,7 +384,7 @@ msgid "View the event on: %{link}" msgstr "" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "" @@ -1077,7 +1077,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1120,7 +1120,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1380,17 +1380,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1415,7 +1415,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/ar/LC_MESSAGES/errors.po b/priv/gettext/ar/LC_MESSAGES/errors.po index ad784a100..f75cda0f1 100644 --- a/priv/gettext/ar/LC_MESSAGES/errors.po +++ b/priv/gettext/ar/LC_MESSAGES/errors.po @@ -125,28 +125,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "" @@ -156,7 +156,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -193,12 +193,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -208,8 +208,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -234,37 +234,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -274,27 +274,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -370,7 +370,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -395,15 +395,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -471,8 +471,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -489,7 +489,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -499,7 +499,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -560,7 +560,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -586,12 +586,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -651,7 +651,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -666,12 +666,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -681,7 +681,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -696,7 +696,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -706,27 +706,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -796,17 +796,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -836,7 +836,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -846,7 +846,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -857,33 +857,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -893,7 +893,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -903,7 +903,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -918,17 +918,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -938,7 +938,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -953,17 +953,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -971,3 +971,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/default.po b/priv/gettext/be/LC_MESSAGES/default.po index 5e6ab8d0e..61d86aeea 100644 --- a/priv/gettext/be/LC_MESSAGES/default.po +++ b/priv/gettext/be/LC_MESSAGES/default.po @@ -310,12 +310,12 @@ msgid "What information do we collect?" msgstr "" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "" @@ -375,7 +375,7 @@ msgid "View the event on: %{link}" msgstr "" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "" @@ -1053,7 +1053,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1096,7 +1096,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1356,17 +1356,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1391,7 +1391,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/be/LC_MESSAGES/errors.po b/priv/gettext/be/LC_MESSAGES/errors.po index c5fbbfe51..2a4d64f3b 100644 --- a/priv/gettext/be/LC_MESSAGES/errors.po +++ b/priv/gettext/be/LC_MESSAGES/errors.po @@ -99,28 +99,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "" @@ -130,7 +130,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -167,12 +167,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -182,8 +182,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -208,37 +208,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -248,27 +248,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -344,7 +344,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -369,15 +369,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -445,8 +445,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -463,7 +463,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -473,7 +473,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -534,7 +534,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -560,12 +560,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -625,7 +625,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -640,12 +640,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -655,7 +655,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -670,7 +670,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -680,27 +680,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -770,17 +770,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -810,7 +810,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -820,7 +820,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -831,33 +831,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -867,7 +867,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -877,7 +877,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -892,17 +892,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -912,7 +912,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -927,17 +927,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -945,3 +945,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/default.po b/priv/gettext/ca/LC_MESSAGES/default.po index c1b45e1ce..24d359924 100644 --- a/priv/gettext/ca/LC_MESSAGES/default.po +++ b/priv/gettext/ca/LC_MESSAGES/default.po @@ -354,12 +354,12 @@ msgid "What information do we collect?" msgstr "Quina informació recollim?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon a %{instance}: confirma la teva adreça de correu" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon a %{instance}: s'ha canviat l'adreça de correu" @@ -417,7 +417,7 @@ msgid "View the event on: %{link}" msgstr "Vés a l'activitat actualitzada a %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{inviter} t'ha convidat al grup %{group}" @@ -1251,7 +1251,7 @@ msgid "So long, and thanks for the fish!" msgstr "Salut i canya al forçut!" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "T'han tret del grup %{group}" @@ -1305,7 +1305,7 @@ msgstr "" "%{group_name} (%{group_address}). Ja no formes part del grup." #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "El grup %{group} ha estat suspès a %{instance}" @@ -1608,17 +1608,17 @@ msgid "%{name}'s feed" msgstr "El flux de %{name}" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "El flux d'activitats privades de %{actor} a %{instance}" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "El flux d'activitats públiques de %{actor} a %{instance}" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "Flux de %{email} a %{instance}" @@ -1643,7 +1643,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Sembla ser que el servidor de Mobilizon està temporalment inaccessible." #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/errors.po b/priv/gettext/ca/LC_MESSAGES/errors.po index e70377c97..e8b0cec87 100644 --- a/priv/gettext/ca/LC_MESSAGES/errors.po +++ b/priv/gettext/ca/LC_MESSAGES/errors.po @@ -100,28 +100,28 @@ msgid "Cannot refresh the token" msgstr "No s'ha pogut actualitzar el codi d'accés" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "El perfil actual no pertany a aquest grup" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "El perfil actual no administra el grup seleccionat" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "No s'han pogut desar les preferències" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "No s'ha trobat el grup" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "No s'ha trobat el grup amb identificador %{id}" @@ -131,7 +131,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "No t'hem pogut autenticar. El teu correu o contrasenya són incorrectes." #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "No s'ha trobat el/la membre" @@ -168,12 +168,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -183,8 +183,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -209,37 +209,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -249,27 +249,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -345,7 +345,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -370,15 +370,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -446,8 +446,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -464,7 +464,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -474,7 +474,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -535,7 +535,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -561,12 +561,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -626,7 +626,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -641,12 +641,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -656,7 +656,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -671,7 +671,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -681,27 +681,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -771,17 +771,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -811,7 +811,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -821,7 +821,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -832,33 +832,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -868,7 +868,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -878,7 +878,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -893,17 +893,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -913,7 +913,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -928,17 +928,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -946,3 +946,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/default.po b/priv/gettext/cs/LC_MESSAGES/default.po index 58380bee7..1fc987561 100644 --- a/priv/gettext/cs/LC_MESSAGES/default.po +++ b/priv/gettext/cs/LC_MESSAGES/default.po @@ -310,12 +310,12 @@ msgid "What information do we collect?" msgstr "" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "" @@ -375,7 +375,7 @@ msgid "View the event on: %{link}" msgstr "" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "" @@ -1053,7 +1053,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1096,7 +1096,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1356,17 +1356,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1391,7 +1391,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/cs/LC_MESSAGES/errors.po b/priv/gettext/cs/LC_MESSAGES/errors.po index 7fd736d65..ed0138293 100644 --- a/priv/gettext/cs/LC_MESSAGES/errors.po +++ b/priv/gettext/cs/LC_MESSAGES/errors.po @@ -99,28 +99,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "" @@ -130,7 +130,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -167,12 +167,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -182,8 +182,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -208,37 +208,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -248,27 +248,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -344,7 +344,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -369,15 +369,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -445,8 +445,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -463,7 +463,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -473,7 +473,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -534,7 +534,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -560,12 +560,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -625,7 +625,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -640,12 +640,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -655,7 +655,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -670,7 +670,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -680,27 +680,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -770,17 +770,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -810,7 +810,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -820,7 +820,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -831,33 +831,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -867,7 +867,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -877,7 +877,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -892,17 +892,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -912,7 +912,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -927,17 +927,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -945,3 +945,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index aef3b59e2..4248898fb 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -360,12 +360,12 @@ msgid "What information do we collect?" msgstr "Welche Informationen sammeln wir ?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon auf %{instance}: Bestätige deine E-Mail Adresse" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon auf %{instance}: E-Mail geändert" @@ -423,7 +423,7 @@ msgid "View the event on: %{link}" msgstr "Zeige die aktualisierte Veranstaltung unter: %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "Du wurdest von %{inviter} eingeladen, der Gruppe %{group} beizutreten" @@ -1293,7 +1293,7 @@ msgid "So long, and thanks for the fish!" msgstr "Macht's gut und danke für den Fisch!" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Sie wurden aus der Gruppe %{group} entfernt" @@ -1349,7 +1349,7 @@ msgstr "" "dieser Gruppe." #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "Die Gruppe %{group} wurde auf %{instance} ausgesetzt" @@ -1712,17 +1712,17 @@ msgid "%{name}'s feed" msgstr "Feed von %{name}" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "Privater Veranstaltungsfeed von %{actor} auf %{instance}" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "Öffentlicher Veranstaltungsfeed von %{actor} auf %{instance}" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "Feed für %{email} auf %{instance}" @@ -1753,7 +1753,7 @@ msgstr "" "sein." #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/de/LC_MESSAGES/errors.po b/priv/gettext/de/LC_MESSAGES/errors.po index bcad969eb..de87da763 100644 --- a/priv/gettext/de/LC_MESSAGES/errors.po +++ b/priv/gettext/de/LC_MESSAGES/errors.po @@ -100,28 +100,28 @@ msgid "Cannot refresh the token" msgstr "Der Token konnte nicht aktualisiert werden" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "Aktuelles Profil ist nicht Mitglied dieser Gruppe" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "Aktuelles Profil ist kein Administrator der ausgewählten Gruppe" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Fehler beim Speichern von Benutzereinstellungen" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Gruppe nicht gefunden" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Gruppe mit der ID %{id} nicht gefunden" @@ -133,7 +133,7 @@ msgstr "" "Passwort sind ungültig." #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Mitglied wurde nicht gefunden" @@ -171,12 +171,12 @@ msgid "The current password is invalid" msgstr "Das aktuelle Passwort ist ungültig" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "Die neue E-Mail scheint nicht gültig zu sein" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "Die neue E-Mail muss anders lauten" @@ -186,8 +186,8 @@ msgid "The new password must be different" msgstr "Das neue Passwort muss anders lauten" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "Das angegebene Passwort ist ungültig" @@ -214,39 +214,39 @@ msgid "Unable to validate user" msgstr "Benutzer kann nicht validiert werden" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "Benutzer bereits deaktiviert" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "Angeforderter Benutzer ist nicht eingeloggt" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Sie sind bereits Mitglied in dieser Gruppe" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" "Sie können diese Gruppe nicht verlassen, da Sie der einzige Administrator " "sind" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "Sie können dieser Gruppe nicht beitreten" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "Sie dürfen keine Gruppen auflisten, es sei denn, Sie sind Moderator." #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "Sie müssen eingeloggt sein, um Ihre E-Mail zu ändern" @@ -256,27 +256,27 @@ msgid "You need to be logged-in to change your password" msgstr "Sie müssen eingeloggt sein, um Ihr Passwort zu ändern" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "Sie müssen eingeloggt sein, um eine Gruppe zu löschen" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "Sie müssen eingeloggt sein, um Ihr Konto zu löschen" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "Sie müssen eingeloggt sein, um einer Gruppe beizutreten" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "Sie müssen eingeloggt sein, um eine Gruppe zu verlassen" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "Sie müssen eingeloggt sein, um eine Gruppe zu aktualisieren" @@ -353,7 +353,7 @@ msgid "Cannot remove the last identity of a user" msgstr "Kann die letzte Identität eines Benutzers nicht entfernen" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "Kommentar ist bereits gelöscht" @@ -378,15 +378,15 @@ msgid "Event id not found" msgstr "Veranstaltungs-ID nicht gefunden" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Veranstaltung nicht gefunden" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "Veranstaltung mit dieser ID %{id} existiert nicht" @@ -456,8 +456,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -474,7 +474,7 @@ msgid "Report not found" msgstr "Meldung nicht gefunden" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "Ressource ist nicht vorhanden" @@ -484,7 +484,7 @@ msgid "The event has already reached its maximum capacity" msgstr "Die Veranstaltung hat bereits ihre maximale Kapazität erreicht" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "Dieses Token ist ungültig" @@ -545,7 +545,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "Sie dürfen kein Feed-Token erstellen, wenn Sie nicht verbunden sind" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "Sie dürfen einen Kommentar nicht löschen, wenn Sie nicht verbunden sind" @@ -576,12 +576,12 @@ msgstr "" "einstellen, da Sie der einzige Administrator sind" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "Sie können diesen Kommentar nicht löschen" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "Sie können diese Veranstaltung nicht löschen" @@ -651,7 +651,7 @@ msgid "You need to be logged-in to access resources" msgstr "Sie müssen eingeloggt sein, um auf Ressourcen zugreifen zu können" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "Sie müssen eingeloggt sein, um Ereignisse zu erstellen" @@ -666,12 +666,12 @@ msgid "You need to be logged-in to create reports" msgstr "Sie müssen eingeloggt sein, um Berichte zu erstellen" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "Sie müssen eingeloggt sein, um Ressourcen zu erstellen" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "Sie müssen eingeloggt sein, um ein Ereignis zu löschen" @@ -681,7 +681,7 @@ msgid "You need to be logged-in to delete posts" msgstr "Sie müssen eingeloggt sein, um Beiträge zu löschen" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "Sie müssen eingeloggt sein, um Ressourcen zu löschen" @@ -696,7 +696,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Sie müssen eingeloggt sein, um eine Veranstaltung zu verlassen" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "Sie müssen eingeloggt sein, um ein Ereignis zu aktualisieren" @@ -706,27 +706,27 @@ msgid "You need to be logged-in to update posts" msgstr "Sie müssen eingeloggt sein, um Beiträge zu aktualisieren" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "Sie müssen eingeloggt sein, um Ressourcen zu aktualisieren" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "Sie müssen eingeloggt sein, um eine Ressourcenvorschau zu sehen" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "Die übergeordnete Ressource gehört nicht zu dieser Gruppe" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "Das gewählte Passwort ist zu kurz." #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Das Registrierungs-Token ist bereits in Gebrauch, dies sieht nach einem " @@ -798,17 +798,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "Die Datei hat keinen zulässigen MIME-Typ." #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "Profil ist nicht Administrator für die Gruppe" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "Sie können dieses Ereignis nicht bearbeiten." #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "Sie können dieses Ereignis nicht diesem Profil zuordnen." @@ -840,7 +840,7 @@ msgstr "" "zuzugreifen" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "Organizer-Profil ist nicht im Besitz des Benutzers" @@ -850,7 +850,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "Die angegebene Profil-ID ist nicht die des anonymen Profils" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "Das Bild ist zu groß" @@ -861,33 +861,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "Fehler beim Speichern des Reports" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Dieses Moderatorenprofil hat keine Berechtigung für diese Veranstaltung" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -897,7 +897,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Veranstaltung nicht gefunden" @@ -907,7 +907,7 @@ msgid "Error while creating a discussion" msgstr "Fehler beim Speichern des Reports" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "Fehler beim Aktualisieren des Reports" @@ -922,17 +922,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "Benutzer kann nicht validiert werden" @@ -942,7 +942,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -957,17 +957,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -975,3 +975,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index ffc63ed85..78bdd8d4c 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -296,12 +296,12 @@ msgid "What information do we collect?" msgstr "" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "" @@ -359,7 +359,7 @@ msgid "View the event on: %{link}" msgstr "" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "" @@ -1032,7 +1032,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1075,7 +1075,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1335,17 +1335,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1370,7 +1370,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index abd9c4c60..41b18213c 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -349,12 +349,12 @@ msgid "What information do we collect?" msgstr "What information do we collect?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "" @@ -412,7 +412,7 @@ msgid "View the event on: %{link}" msgstr "View the updated event on: %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "" @@ -1085,7 +1085,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1128,7 +1128,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1388,17 +1388,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1423,7 +1423,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/errors.po b/priv/gettext/en/LC_MESSAGES/errors.po index d60c4c9f7..0ec638e90 100644 --- a/priv/gettext/en/LC_MESSAGES/errors.po +++ b/priv/gettext/en/LC_MESSAGES/errors.po @@ -103,28 +103,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "" @@ -134,7 +134,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -171,12 +171,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -186,8 +186,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -212,37 +212,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -252,27 +252,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -348,7 +348,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -373,15 +373,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -449,8 +449,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -467,7 +467,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -477,7 +477,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -538,7 +538,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -564,12 +564,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -629,7 +629,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -644,12 +644,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -659,7 +659,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -674,7 +674,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -684,27 +684,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -774,17 +774,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -814,7 +814,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -824,7 +824,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -835,33 +835,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -871,7 +871,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -881,7 +881,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -896,17 +896,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -916,7 +916,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -931,17 +931,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -949,3 +949,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/errors.pot b/priv/gettext/errors.pot index d97b84650..f58a08d6c 100644 --- a/priv/gettext/errors.pot +++ b/priv/gettext/errors.pot @@ -100,28 +100,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "" @@ -131,7 +131,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -168,12 +168,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -183,8 +183,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -209,37 +209,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -249,27 +249,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -345,7 +345,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -370,15 +370,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -446,8 +446,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -464,7 +464,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -474,7 +474,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -535,7 +535,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -561,12 +561,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -626,7 +626,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -641,12 +641,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -656,7 +656,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -671,7 +671,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -681,27 +681,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -771,17 +771,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -811,7 +811,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -821,7 +821,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -832,33 +832,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -868,7 +868,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -878,7 +878,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -893,17 +893,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -913,7 +913,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -928,17 +928,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -946,3 +946,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/es/LC_MESSAGES/default.po b/priv/gettext/es/LC_MESSAGES/default.po index bf7674dd6..a28382631 100644 --- a/priv/gettext/es/LC_MESSAGES/default.po +++ b/priv/gettext/es/LC_MESSAGES/default.po @@ -14,267 +14,267 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.6.2\n" -#: lib/web/templates/email/password_reset.html.heex:48 #, elixir-format +#: lib/web/templates/email/password_reset.html.heex:48 msgid "If you didn't request this, please ignore this email. Your password won't change until you access the link below and create a new one." msgstr "" "Si no solicitaste este correo, simplemente ignóralo. Su contraseña no " "cambiará al menos que use el siguiente enlace para crear una nueva." -#: lib/web/templates/email/report.html.heex:74 #, elixir-format +#: lib/web/templates/email/report.html.heex:74 msgid "%{title} by %{creator}" msgstr "%{title} por %{creator}" -#: lib/web/templates/email/registration_confirmation.html.heex:58 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.heex:58 msgid "Activate my account" msgstr "Activar mi cuenta" +#, elixir-format #: lib/web/templates/email/email.html.heex:118 #: lib/web/templates/email/email.text.eex:9 -#, elixir-format msgid "Ask the community on Framacolibri" msgstr "Preguntar a la comunidad en framacolibri" -#: lib/web/templates/email/report.text.eex:15 #, elixir-format +#: lib/web/templates/email/report.text.eex:15 msgid "Comments" msgstr "Comentarios" +#, elixir-format #: lib/web/templates/email/report.html.heex:72 #: lib/web/templates/email/report.text.eex:11 -#, elixir-format msgid "Event" msgstr "Evento" -#: lib/web/email/user.ex:48 #, elixir-format +#: lib/web/email/user.ex:48 msgid "Instructions to reset your password on %{instance}" msgstr "Instrucciones para restablecer su contraseña en %{instance}" -#: lib/web/templates/email/report.text.eex:21 #, elixir-format +#: lib/web/templates/email/report.text.eex:21 msgid "Reason" msgstr "Razón" -#: lib/web/templates/email/password_reset.html.heex:61 #, elixir-format +#: lib/web/templates/email/password_reset.html.heex:61 msgid "Reset Password" msgstr "Restablecer la contraseña" -#: lib/web/templates/email/password_reset.html.heex:41 #, elixir-format +#: lib/web/templates/email/password_reset.html.heex:41 msgid "Resetting your password is easy. Just press the button below and follow the instructions. We'll have you up and running in no time." msgstr "" "Restablecer tu contraseña es fácil. Simplemente presione el botón y siga las " "instrucciones. Te tendremos en funcionamiento en poco tiempo." -#: lib/web/email/user.ex:28 #, elixir-format +#: lib/web/email/user.ex:28 msgid "Instructions to confirm your Mobilizon account on %{instance}" msgstr "Instrucciones para confirmar su cuenta Mobilizon en %{instance}" -#: lib/web/email/admin.ex:24 #, elixir-format +#: lib/web/email/admin.ex:24 msgid "New report on Mobilizon instance %{instance}" msgstr "Nuevo informe sobre la instancia Mobilizon %{instance}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:51 #: lib/web/templates/email/before_event_notification.text.eex:4 -#, elixir-format msgid "Go to event page" msgstr "Ir a la página del evento" -#: lib/web/templates/email/report.text.eex:1 #, elixir-format +#: lib/web/templates/email/report.text.eex:1 msgid "New report from %{reporter} on %{instance}" msgstr "Nuevo informe de %{reporter} en %{instance}" -#: lib/web/templates/email/event_participation_approved.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_approved.text.eex:1 msgid "Participation approved" msgstr "Participación aprobada" +#, elixir-format #: lib/web/templates/email/password_reset.html.heex:13 #: lib/web/templates/email/password_reset.text.eex:1 -#, elixir-format msgid "Password reset" msgstr "Restablecer la contraseña" -#: lib/web/templates/email/password_reset.text.eex:7 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:7 msgid "Resetting your password is easy. Just click the link below and follow the instructions. We'll have you up and running in no time." msgstr "" "Restablecer tu contraseña es fácil. Simplemente haga clic en el enlace a " "continuación y siga las instrucciones. Estarás operacional en muy poco " "tiempo." -#: lib/web/templates/email/registration_confirmation.text.eex:5 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:5 msgid "You created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email." msgstr "" "Has creado una cuenta en %{host} con esta dirección de correo electrónico. " "Estás a un clic de activarlo. Si no eras tú, ignora este correo electrónico." -#: lib/web/email/participation.ex:108 #, elixir-format +#: lib/web/email/participation.ex:108 msgid "Your participation to event %{title} has been approved" msgstr "Su participación en el evento %{title} ha sido aprobada" -#: lib/web/email/participation.ex:68 #, elixir-format +#: lib/web/email/participation.ex:68 msgid "Your participation to event %{title} has been rejected" msgstr "Su participación en el evento %{title} ha sido rechazada" -#: lib/web/email/event.ex:36 #, elixir-format +#: lib/web/email/event.ex:36 msgid "Event %{title} has been updated" msgstr "El evento %{title} ha sido actualizado" -#: lib/web/templates/email/event_updated.text.eex:15 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:15 msgid "New title: %{title}" msgstr "Nuevo título: %{title}" -#: lib/web/templates/email/password_reset.text.eex:5 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:5 msgid "You requested a new password for your account on %{instance}." msgstr "Solicitó una nueva contraseña para su cuenta en %{instancia}." -#: lib/web/templates/email/email.html.heex:86 #, elixir-format +#: lib/web/templates/email/email.html.heex:86 msgid "Warning" msgstr "Advertencia" -#: lib/web/email/participation.ex:131 #, elixir-format +#: lib/web/email/participation.ex:131 msgid "Confirm your participation to event %{title}" msgstr "Confirme su participación en el evento %{title}" -#: lib/web/templates/api/privacy.html.heex:75 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:75 msgctxt "terms" msgid "An internal ID for your current selected identity" msgstr "Un ID interno para su identidad seleccionada actualmente" -#: lib/web/templates/api/privacy.html.heex:74 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:74 msgctxt "terms" msgid "An internal user ID" msgstr "Un ID de usuario interna" -#: lib/web/templates/api/privacy.html.heex:37 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:37 msgctxt "terms" msgid "Any of the information we collect from you may be used in the following ways:" msgstr "" "Cualquier información que recopilemos sobre usted puede usarse de las " "siguientes maneras:" -#: lib/web/templates/api/privacy.html.heex:9 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:9 msgctxt "terms" msgid "Basic account information" msgstr "Información básica de la cuenta" -#: lib/web/templates/api/privacy.html.heex:25 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:25 msgctxt "terms" msgid "Do not share any dangerous information over Mobilizon." msgstr "No comparta ninguna información peligrosa a través de Mobilizon." -#: lib/web/templates/api/privacy.html.heex:90 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:90 msgctxt "terms" msgid "Do we disclose any information to outside parties?" msgstr "¿Divulgamos alguna información a terceros?" -#: lib/web/templates/api/privacy.html.heex:68 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:68 msgctxt "terms" msgid "Do we use cookies?" msgstr "¿Usamos cookies?" -#: lib/web/templates/api/privacy.html.heex:51 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:51 msgctxt "terms" msgid "How do we protect your information?" msgstr "¿Cómo protegemos tu información?" -#: lib/web/templates/api/privacy.html.heex:29 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:29 msgctxt "terms" msgid "IPs and other metadata" msgstr "dirección IP y otros metadatos" -#: lib/web/templates/api/privacy.html.heex:17 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:17 msgctxt "terms" msgid "Published events and comments" msgstr "Eventos publicados y comentarios" -#: lib/web/templates/api/privacy.html.heex:64 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:64 msgctxt "terms" msgid "Retain the IP addresses associated with registered users no more than 12 months." msgstr "" "Conserva las direcciones IP asociadas con usuarios registrados no más de 12 " "meses." -#: lib/web/templates/api/privacy.html.heex:76 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:76 msgctxt "terms" msgid "Tokens to authenticate you" msgstr "Fichas para \"autenticarte\"" -#: lib/web/templates/api/privacy.html.heex:31 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:31 msgctxt "terms" msgid "We also may retain server logs which include the IP address of every request to our server." msgstr "" "También podemos conservar los registros del servidor que incluyen la " "dirección IP de cada solicitud a nuestro servidor." -#: lib/web/templates/api/privacy.html.heex:70 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:70 msgctxt "terms" msgid "We store the following information on your device when you connect:" msgstr "" "Almacenamos la siguiente información en tu dispositivo cuando te conectas:" -#: lib/web/templates/api/privacy.html.heex:58 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:58 msgctxt "terms" msgid "We will make a good faith effort to:" msgstr "Haremos un esfuerzo de buena fe para:" -#: lib/web/templates/api/privacy.html.heex:35 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:35 msgctxt "terms" msgid "What do we use your information for?" msgstr "¿Para qué utilizamos tu información?" -#: lib/web/templates/api/privacy.html.heex:57 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:57 msgctxt "terms" msgid "What is our data retention policy?" msgstr "¿Cuál es nuestra política de retención de datos?" -#: lib/web/templates/api/privacy.html.heex:67 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:67 msgctxt "terms" msgid "You may irreversibly delete your account at any time." msgstr "Puede eliminar irreversiblemente su cuenta en cualquier momento." -#: lib/web/templates/api/privacy.html.heex:115 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:115 msgctxt "terms" msgid "Changes to our Privacy Policy" msgstr "Cambios a nuestra política de privacidad" -#: lib/web/templates/api/privacy.html.heex:106 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:106 msgctxt "terms" msgid "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (<a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">General Data Protection Regulation</a>) do not use this site." msgstr "" @@ -284,8 +284,8 @@ msgstr "" "https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\"> " "Reglamento general de protección de datos </a>) no utilice este sitio ." -#: lib/web/templates/api/privacy.html.heex:109 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:109 msgctxt "terms" msgid "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (<a href=\"https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\">Children's Online Privacy Protection Act</a>) do not use this site." msgstr "" @@ -296,30 +296,30 @@ msgstr "" "Ley de protección de la privacidad en línea para niños </a>) no utilice este " "sitio." -#: lib/web/templates/api/privacy.html.heex:117 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:117 msgctxt "terms" msgid "If we decide to change our privacy policy, we will post those changes on this page." msgstr "" "Si decidimos cambiar nuestra política de privacidad, publicaremos esos " "cambios en esta página." -#: lib/web/templates/api/privacy.html.heex:112 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:112 msgctxt "terms" msgid "Law requirements can be different if this server is in another jurisdiction." msgstr "" "Los requisitos legales pueden ser diferentes si este servidor se encuentra " "en otra jurisdicción." -#: lib/web/templates/api/privacy.html.heex:103 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:103 msgctxt "terms" msgid "Site usage by children" msgstr "Uso del sitio por niños" -#: lib/web/templates/api/privacy.html.heex:47 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:47 msgctxt "terms" msgid "The email address you provide may be used to send you information, updates and notifications about other people\n interacting with your content or sending you messages and to respond to inquiries, and/or other requests or\n questions." msgstr "" @@ -330,8 +330,8 @@ msgstr "" "consultas y / u otras solicitudes o\n" " preguntas." -#: lib/web/templates/api/privacy.html.heex:45 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:45 msgctxt "terms" msgid "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban\n evasion or other violations." msgstr "" @@ -339,8 +339,8 @@ msgstr "" "dirección IP con otras conocidas para determinar la prohibición,\n" " evasión u otras violaciones." -#: lib/web/templates/api/privacy.html.heex:43 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:43 msgctxt "terms" msgid "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to\n interact with other people's content and post your own content if you are logged in." msgstr "" @@ -349,89 +349,89 @@ msgstr "" " interactuar con el contenido de otras personas y publicar tu propio " "contenido si ha iniciado sesión." -#: lib/web/templates/api/privacy.html.heex:6 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:6 msgctxt "terms" msgid "What information do we collect?" msgstr "¿Qué información recopilamos?" -#: lib/web/email/user.ex:177 #, elixir-format +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon en %{instance}: confirma tu dirección de correo electrónico" -#: lib/web/email/user.ex:154 #, elixir-format +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon en %{instance}: correo electrónico modificado" -#: lib/web/email/notification.ex:49 #, elixir-format +#: lib/web/email/notification.ex:49 msgid "One event planned today" msgid_plural "%{nb_events} events planned today" msgstr[0] "Un evento programado para hoy" msgstr[1] "%{nb_events} eventos planeados hoy" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.heex:38 #: lib/web/templates/email/on_day_notification.text.eex:4 -#, elixir-format msgid "You have one event today:" msgid_plural "You have %{total} events today:" msgstr[0] "Tienes un evento hoy:" msgstr[1] "Tienes %{total} eventos hoy:" -#: lib/web/templates/email/group_invite.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_invite.text.eex:3 msgid "%{inviter} just invited you to join their group %{group}" msgstr "%{inviter} te acaba de invitar a unirte a su grupo %{group}" +#, elixir-format #: lib/web/templates/email/group_invite.html.heex:13 #: lib/web/templates/email/group_invite.text.eex:1 -#, elixir-format msgid "Come along!" msgstr "¡ Únete a nosotros !" -#: lib/web/email/notification.ex:24 #, elixir-format +#: lib/web/email/notification.ex:24 msgid "Don't forget to go to %{title}" msgstr "No olvides ir a %{title}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:38 #: lib/web/templates/email/before_event_notification.text.eex:3 -#, elixir-format msgid "Get ready for %{title}" msgstr "Prepárate para %{title}" -#: lib/web/templates/email/group_invite.html.heex:59 #, elixir-format +#: lib/web/templates/email/group_invite.html.heex:59 msgid "See my groups" msgstr "Ver mis grupos" +#, elixir-format #: lib/web/templates/email/group_invite.html.heex:45 #: lib/web/templates/email/group_invite.text.eex:5 -#, elixir-format msgid "To accept this invitation, head over to your groups." msgstr "Para aceptar esta invitación, dirígete a tus grupos." -#: lib/web/templates/email/before_event_notification.text.eex:5 #, elixir-format +#: lib/web/templates/email/before_event_notification.text.eex:5 msgid "View the event on: %{link}" msgstr "Ver el evento actualizado en: %{link}" -#: lib/web/email/group.ex:33 #, elixir-format +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{Inviter} te ha invitado a unirte al grupo %{group}" -#: lib/web/email/notification.ex:75 #, elixir-format +#: lib/web/email/notification.ex:75 msgid "One event planned this week" msgid_plural "%{nb_events} events planned this week" msgstr[0] "Un evento programado para hoy" msgstr[1] "%{nb_events} eventos planeados hoy" -#: lib/web/email/notification.ex:98 #, elixir-format +#: lib/web/email/notification.ex:98 msgid "One participation request for event %{title} to process" msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" msgstr[0] "Una solicitud para participar en el evento %{title} a procesar" @@ -439,21 +439,21 @@ msgstr[1] "" "%{number_participation_requests} solicitudes para participar en el evento " "%{title} a procesar" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.heex:38 #: lib/web/templates/email/notification_each_week.text.eex:3 -#, elixir-format msgid "You have one event this week:" msgid_plural "You have %{total} events this week:" msgstr[0] "Tienes un evento hoy:" msgstr[1] "Tienes %{total} eventos hoy:" -#: lib/service/metadata/utils.ex:53 #, elixir-format +#: lib/service/metadata/utils.ex:53 msgid "The event organizer didn't add any description." msgstr "El organizador del evento no agregó ninguna descripción." -#: lib/web/templates/api/privacy.html.heex:54 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:54 msgctxt "terms" msgid "We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way algorithm." msgstr "" @@ -463,8 +463,8 @@ msgstr "" "el tráfico entre tus aplicaciones y la API, están protegidas con SSL /TLS, y " "su contraseña se codifica con un fuerte algoritmo unidireccional." -#: lib/web/templates/api/privacy.html.heex:94 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:94 msgctxt "terms" msgid "No. We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety." msgstr "" @@ -477,20 +477,20 @@ msgstr "" "de nuestro sitio o proteger los derechos, nuestros o de otros, propiedades o " "seguridad." -#: lib/web/templates/api/terms.html.heex:23 #, elixir-format +#: lib/web/templates/api/terms.html.heex:23 msgctxt "terms" msgid "Accepting these Terms" msgstr "Aceptar estos Términos" -#: lib/web/templates/api/terms.html.heex:27 #, elixir-format +#: lib/web/templates/api/terms.html.heex:27 msgctxt "terms" msgid "Changes to these Terms" msgstr "Cambios a estos Términos de uso" -#: lib/web/templates/api/terms.html.heex:85 #, elixir-format +#: lib/web/templates/api/terms.html.heex:85 msgctxt "terms" msgid "A lot of the content on the Service is from you and others, and we don't review, verify or authenticate it, and it may include inaccuracies or false information. We make no representations, warranties, or guarantees relating to the quality, suitability, truth, accuracy or completeness of any content contained in the Service. You acknowledge sole responsibility for and assume all risk arising from your use of or reliance on any content." msgstr "" @@ -502,16 +502,16 @@ msgstr "" "responsable y asume todos los riesgos derivados de su uso o su confianza en " "cualquier contenido." -#: lib/web/templates/api/terms.html.heex:60 #, elixir-format +#: lib/web/templates/api/terms.html.heex:60 msgctxt "terms" msgid "Also, you agree that you will not do any of the following in connection with the Service or other users:" msgstr "" "Además, acepta que no hará nada de lo siguiente en relación con el Servicio " "u otros usuarios:" -#: lib/web/templates/api/terms.html.heex:65 #, elixir-format +#: lib/web/templates/api/terms.html.heex:65 msgctxt "terms" msgid "Circumvent or attempt to circumvent any filtering, security measures, rate limits or other features designed to protect the Service, users of the Service, or third parties." msgstr "" @@ -519,23 +519,23 @@ msgstr "" "velocidad u otras características diseñadas para proteger el Servicio, los " "usuarios del Servicio o terceros." -#: lib/web/templates/api/terms.html.heex:64 #, elixir-format +#: lib/web/templates/api/terms.html.heex:64 msgctxt "terms" msgid "Collect any personal information about other users, or intimidate, threaten, stalk or otherwise harass other users of the Service;" msgstr "" "Recopilar información personal sobre otros usuarios, o intimidar, amenazar, " "acosar o acosar a otros usuarios del Servicio;" -#: lib/web/templates/api/terms.html.heex:55 #, elixir-format +#: lib/web/templates/api/terms.html.heex:55 msgctxt "terms" msgid "Content that is illegal or unlawful, that would otherwise create liability;" msgstr "" "Contenido que es ilegal o ilegal, que de otro modo crearía responsabilidad;" -#: lib/web/templates/api/terms.html.heex:56 #, elixir-format +#: lib/web/templates/api/terms.html.heex:56 msgctxt "terms" msgid "Content that may infringe or violate any patent, trademark, trade secret, copyright, right of privacy, right of publicity or other intellectual or other right of any party;" msgstr "" @@ -543,48 +543,48 @@ msgstr "" "secreto comercial, derecho de autor, derecho de privacidad, derecho de " "publicidad u otro derecho intelectual u otro derecho de cualquier parte;" -#: lib/web/templates/api/terms.html.heex:42 #, elixir-format +#: lib/web/templates/api/terms.html.heex:42 msgctxt "terms" msgid "Creating Accounts" msgstr "Crear cuentas" -#: lib/web/templates/api/terms.html.heex:89 #, elixir-format +#: lib/web/templates/api/terms.html.heex:89 msgctxt "terms" msgid "Entire Agreement" msgstr "Acuerdo completo" -#: lib/web/templates/api/terms.html.heex:92 #, elixir-format +#: lib/web/templates/api/terms.html.heex:92 msgctxt "terms" msgid "Feedback" msgstr "Comentarios" -#: lib/web/templates/api/terms.html.heex:83 #, elixir-format +#: lib/web/templates/api/terms.html.heex:83 msgctxt "terms" msgid "Hyperlinks and Third Party Content" msgstr "Hipervínculos y contenido de terceros" -#: lib/web/templates/api/terms.html.heex:88 #, elixir-format +#: lib/web/templates/api/terms.html.heex:88 msgctxt "terms" msgid "If you breach any of these Terms, we have the right to suspend or disable your access to or use of the Service." msgstr "" "Si incumple alguno de estos Términos, tenemos el derecho de suspender o " "deshabilitar su acceso o uso del Servicio." -#: lib/web/templates/api/terms.html.heex:63 #, elixir-format +#: lib/web/templates/api/terms.html.heex:63 msgctxt "terms" msgid "Impersonate or post on behalf of any person or entity or otherwise misrepresent your affiliation with a person or entity;" msgstr "" "Suplantar o publicar en nombre de cualquier persona o entidad o tergiversar " "su afiliación con una persona o entidad;" -#: lib/web/templates/api/terms.html.heex:48 #, elixir-format +#: lib/web/templates/api/terms.html.heex:48 msgctxt "terms" msgid "Our Service allows you and other users to post, link and otherwise make available content. You are responsible for the content that you make available to the Service, including its legality, reliability, and appropriateness." msgstr "" @@ -592,26 +592,26 @@ msgstr "" "poner a disposición contenido. Usted es responsable del contenido que pone a " "disposición del Servicio, incluida su legalidad, confiabilidad y adecuación." -#: lib/web/templates/api/terms.html.heex:39 #, elixir-format +#: lib/web/templates/api/terms.html.heex:39 msgctxt "terms" msgid "Privacy Policy" msgstr "Política de privacidad" -#: lib/web/templates/api/terms.html.heex:95 #, elixir-format +#: lib/web/templates/api/terms.html.heex:95 msgctxt "terms" msgid "Questions & Contact Information" msgstr "Preguntas e información de contacto" -#: lib/web/templates/api/terms.html.heex:87 #, elixir-format +#: lib/web/templates/api/terms.html.heex:87 msgctxt "terms" msgid "Termination" msgstr "Terminación" -#: lib/web/templates/api/terms.html.heex:62 #, elixir-format +#: lib/web/templates/api/terms.html.heex:62 msgctxt "terms" msgid "Use the Service in any manner that could interfere with, disrupt, negatively affect or inhibit other users from fully enjoying the Service or that could damage, disable, overburden or impair the functioning of the Service;" msgstr "" @@ -620,14 +620,14 @@ msgstr "" "Servicio o que pueda dañar, deshabilitar, sobrecargar o perjudicar el " "funcionamiento del Servicio;" -#: lib/web/templates/api/terms.html.heex:47 #, elixir-format +#: lib/web/templates/api/terms.html.heex:47 msgctxt "terms" msgid "Your Content & Conduct" msgstr "Su contenido y conducta" -#: lib/web/templates/api/terms.html.heex:84 #, elixir-format +#: lib/web/templates/api/terms.html.heex:84 msgctxt "terms" msgid "<b>%{instance_name}</b> makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. The inclusion of any link does not imply endorsement by <b>%{instance_name}</b> of the site. Use of any such linked website is at the user's own risk." msgstr "" @@ -639,8 +639,8 @@ msgstr "" "no implica la aprobación por <b>% {instance_name} </b> del sitio. El uso de " "cualquier sitio web vinculado es bajo el propio riesgo del usuario." -#: lib/web/templates/api/terms.html.heex:68 #, elixir-format +#: lib/web/templates/api/terms.html.heex:68 msgctxt "terms" msgid "Finally, your use of the Service is also subject to acceptance of <a href=\"/rules\">the instance's own specific rules</a> regarding the code of conduct and moderation rules. Breaking those rules may also result in your account being disabled or suspended." msgstr "" @@ -649,16 +649,16 @@ msgstr "" "código de conducta y las reglas de moderación. Romper esas reglas también " "puede resultar en que su cuenta sea deshabilitada o suspendida." -#: lib/web/templates/api/terms.html.heex:81 #, elixir-format +#: lib/web/templates/api/terms.html.heex:81 msgctxt "terms" msgid "For full details about the Mobilizon software <a href=\"https://joinmobilizon.org\">see here</a>." msgstr "" "Para obtener detalles completos sobre el software Mobilizon <a href=\"https" "://joinmobilizon.org\"> ver aquí </a>." -#: lib/web/templates/api/terms.html.heex:18 #, elixir-format +#: lib/web/templates/api/terms.html.heex:18 msgctxt "terms" msgid "Here are the important things you need to know about accessing and using the <b>%{instance_name}</b> (<a href=\"https://%{instance_url}\">%{instance_url}</a>) website and service (collectively, \"Service\"). These are our terms of service (\"Terms\"). Please read them carefully." msgstr "" @@ -668,8 +668,8 @@ msgstr "" "Estos son nuestros términos de servicio (\"Términos\"). Por favor, léalos " "atentamente." -#: lib/web/templates/api/terms.html.heex:33 #, elixir-format +#: lib/web/templates/api/terms.html.heex:33 msgctxt "terms" msgid "If we make major changes, we will notify our users in a clear and prominent manner. Minor changes may only be highlighted in the footer of our website. It is your responsibility to check the website regularly for changes to these Terms." msgstr "" @@ -678,8 +678,8 @@ msgstr "" "página de nuestro sitio web. Es su responsabilidad revisar el sitio web " "regularmente para ver los cambios a estos Términos." -#: lib/web/templates/api/terms.html.heex:53 #, elixir-format +#: lib/web/templates/api/terms.html.heex:53 msgctxt "terms" msgid "In order to make <b>%{instance_name}</b> a great place for all of us, please do not post, link and otherwise make available on or through the Service any of the following:" msgstr "" @@ -687,8 +687,8 @@ msgstr "" "publique, enlace ni ponga a disposición en el Servicio ni a través de él " "ninguno de los siguientes:" -#: lib/web/templates/api/terms.html.heex:57 #, elixir-format +#: lib/web/templates/api/terms.html.heex:57 msgctxt "terms" msgid "Private information of any third party (e.g., addresses, phone numbers, email addresses, Social Security numbers and credit card numbers); and" msgstr "" @@ -696,8 +696,8 @@ msgstr "" "de teléfono, direcciones de correo electrónico, números de Seguro Social y " "números de tarjetas de crédito); y" -#: lib/web/templates/api/terms.html.heex:52 #, elixir-format +#: lib/web/templates/api/terms.html.heex:52 msgctxt "terms" msgid "Since Mobilizon is a distributed network, it is possible, depending on the visibility rules set to your content, that your content has been distributed to other Mobilizon instances. When you delete your content, we will request those other instances to also delete the content. Our responsibility on the content being deleted from those other instances ends here. If for some reason, some other instance does not delete the content, we cannot be held responsible." msgstr "" @@ -709,8 +709,8 @@ msgstr "" "instancias termina aquí. Si por alguna razón, alguna otra instancia no " "elimina el contenido, no podemos ser responsables." -#: lib/web/templates/api/terms.html.heex:90 #, elixir-format +#: lib/web/templates/api/terms.html.heex:90 msgctxt "terms" msgid "These Terms constitute the entire agreement between you and <b>%{instance_name}</b> regarding the use of the Service, superseding any prior agreements between you and <b>%{instance_name}</b> relating to your use of the Service." msgstr "" @@ -719,8 +719,8 @@ msgstr "" "cualquier acuerdo previo entre usted y <b> %{instance_name} </b> relacionado " "con su uso de el servicio." -#: lib/web/templates/api/terms.html.heex:80 #, elixir-format +#: lib/web/templates/api/terms.html.heex:80 msgctxt "terms" msgid "This Service runs on a Mobilizon instance. This source code is licensed under an <a href=\"https://tldrlegal.com/license/gnu-affero-general-public-license-v3-(agpl-3.0)\">AGPLv3 license</a> which means you are allowed to and even encouraged to take the source code, modify it and use it." msgstr "" @@ -730,16 +730,16 @@ msgstr "" "significa que están autorizados e incluso alentados a tomar el código " "fuente, modificarlo y usarlo." -#: lib/web/templates/api/terms.html.heex:58 #, elixir-format +#: lib/web/templates/api/terms.html.heex:58 msgctxt "terms" msgid "Viruses, corrupted data or other harmful, disruptive or destructive files or code." msgstr "" "Virus, datos corruptos u otros archivos o códigos dañinos, perjudiciales o " "destructivos." -#: lib/web/templates/api/terms.html.heex:51 #, elixir-format +#: lib/web/templates/api/terms.html.heex:51 msgctxt "terms" msgid "You can remove the content that you posted by deleting it. Once you delete your content, it will not appear on the Service, but copies of your deleted content may remain in our system or backups for some period of time. Web server access logs might also be stored for some time in the system." msgstr "" @@ -749,29 +749,29 @@ msgstr "" "un período de tiempo. Los registros de acceso al servidor web también pueden " "almacenarse durante algún tiempo en el sistema." -#: lib/web/templates/api/terms.html.heex:96 #, elixir-format +#: lib/web/templates/api/terms.html.heex:96 msgctxt "terms" msgid "Questions or comments about the Service may be directed to us at %{contact}" msgstr "" "Las preguntas o comentarios sobre el Servicio pueden dirigirse a% {contact}" -#: lib/web/templates/api/terms.html.heex:79 #, elixir-format +#: lib/web/templates/api/terms.html.heex:79 msgctxt "terms" msgid "Source code" msgstr "Código fuente" -#: lib/web/templates/api/terms.html.heex:93 #, elixir-format +#: lib/web/templates/api/terms.html.heex:93 msgctxt "terms" msgid "We love feedback. Please let us know what you think of the Service, these Terms and, in general, <b>%{instance_name}</b>." msgstr "" "Nos encantan los comentarios. Háganos saber lo que piensa del Servicio, " "estos Términos y, en general, <b> %{instance_name} </b>." -#: lib/web/templates/api/terms.html.heex:74 #, elixir-format +#: lib/web/templates/api/terms.html.heex:74 msgctxt "terms" msgid "Instance administrators (and community moderators, given the relevant access) are responsible for monitoring and acting on flagged content and other user reports, and have the right and responsibility to remove or edit content that is not aligned to this Instance set of rules, or to suspend, block or ban (temporarily or permanently) any account, community, or instance for breaking these terms, or for other behaviours that they deem inappropriate, threatening, offensive, or harmful." msgstr "" @@ -784,16 +784,16 @@ msgstr "" "incumplir estos términos o por otros comportamientos que consideren " "inapropiados, amenazantes, ofensivos o dañinos." -#: lib/web/templates/api/terms.html.heex:6 #, elixir-format +#: lib/web/templates/api/terms.html.heex:6 msgctxt "terms" msgid "<b>%{instance_name}</b> will not use or transmit or resell your personal data" msgstr "" "<b> %{instance_name} </b> no usará ni transmitirá ni revenderá sus datos " "personales" -#: lib/web/templates/api/terms.html.heex:44 #, elixir-format +#: lib/web/templates/api/terms.html.heex:44 msgctxt "terms" msgid "If you discover or suspect any Service security breaches, please let us know as soon as possible. For security holes in the Mobilizon software itself, please contact <a href=\"https://framagit.org/framasoft/mobilizon/\">its contributors</a> directly." msgstr "" @@ -802,8 +802,8 @@ msgstr "" "de Mobilizon, comuníquese directamente con <a href=\"https://framagit.org/" "framasoft/mobilizon/\"> sus colaboradores </a>." -#: lib/web/templates/api/terms.html.heex:77 #, elixir-format +#: lib/web/templates/api/terms.html.heex:77 msgctxt "terms" msgid "Instance administrators should ensure that every community hosted on the instance is properly moderated according to the defined rules." msgstr "" @@ -811,8 +811,8 @@ msgstr "" "alojada en la instancia esté moderada adecuadamente de acuerdo con las " "reglas definidas." -#: lib/web/templates/api/terms.html.heex:98 #, elixir-format +#: lib/web/templates/api/terms.html.heex:98 msgctxt "terms" msgid "Originally adapted from the <a href=\"https://joindiaspora.com/terms\">Diaspora*</a> and <a href=\"https://github.com/appdotnet/terms-of-service\">App.net</a> privacy policies, also licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>." msgstr "" @@ -821,8 +821,8 @@ msgstr "" ">App.net</a> privacy policies, also licensed under <a href=\"https" "://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>." -#: lib/web/templates/api/privacy.html.heex:119 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:119 msgctxt "terms" msgid "Originally adapted from the <a href=\"https://mastodon.social/terms\">Mastodon</a> and <a href=\"https://github.com/discourse/discourse\">Discourse</a> privacy policies, also licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>." msgstr "" @@ -831,22 +831,22 @@ msgstr "" "</a>políticas de privacidad, también bajo licencia <a href=\"https" "://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>." -#: lib/web/templates/api/terms.html.heex:3 #, elixir-format +#: lib/web/templates/api/terms.html.heex:3 msgctxt "terms" msgid "Short version" msgstr "Version corta" -#: lib/web/templates/api/terms.html.heex:9 #, elixir-format +#: lib/web/templates/api/terms.html.heex:9 msgctxt "terms" msgid "The service is provided without warranties and these terms may change in the future" msgstr "" "El servicio se brinda sin garantías y estos términos pueden cambiar en el " "futuro" -#: lib/web/templates/api/privacy.html.heex:118 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:118 msgctxt "terms" msgid "This document is licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>. It was last updated June 18, 2020." msgstr "" @@ -854,8 +854,8 @@ msgstr "" "licenses/by-sa/4.0/\"> CC BY-SA </a>. Se actualizó por última vez el 18 de " "junio de 2020." -#: lib/web/templates/api/terms.html.heex:97 #, elixir-format +#: lib/web/templates/api/terms.html.heex:97 msgctxt "terms" msgid "This document is licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>. It was last updated June 22, 2020." msgstr "" @@ -863,85 +863,85 @@ msgstr "" "licenses/by-sa/4.0/\"> CC BY-SA </a>. Se actualizó por última vez el 22 de " "junio de 2020." -#: lib/web/templates/api/terms.html.heex:8 #, elixir-format +#: lib/web/templates/api/terms.html.heex:8 msgctxt "terms" msgid "You must respect other people and <b>%{instance_name}</b>'s rules when using the service" msgstr "" "Debe respetar las reglas de otras personas y <b>%{instance_name} </b> al " "usar el servicio" -#: lib/web/templates/api/terms.html.heex:7 #, elixir-format +#: lib/web/templates/api/terms.html.heex:7 msgctxt "terms" msgid "You must respect the law when using <b>%{instance_name}</b>" msgstr "Debe respetar la ley cuando use <b>%{instance_name} </b>" -#: lib/web/templates/api/terms.html.heex:5 #, elixir-format +#: lib/web/templates/api/terms.html.heex:5 msgctxt "terms" msgid "Your content is yours" msgstr "Tu contenido es tuyo" -#: lib/web/templates/email/anonymous_participation_confirmation.html.heex:51 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.heex:51 msgid "Confirm my e-mail address" msgstr "Confirmar mi dirección de correo electrónico" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.heex:13 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:1 -#, elixir-format msgid "Confirm your e-mail" msgstr "Confirme su email" -#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "¡Hola! Te acabas de registrar para unirte a este evento: «%{title}». " "Confirme la dirección de correo electrónico que proporcionó:" +#, elixir-format #: lib/web/templates/email/email.html.heex:115 #: lib/web/templates/email/email.text.eex:8 -#, elixir-format msgid "Need help? Is something not working as expected?" msgstr "¿Necesita ayuda? ¿Algo no está funcionando correctamente?" -#: lib/web/templates/email/registration_confirmation.html.heex:38 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.heex:38 msgid "You created an account on <b>%{host}</b> with this email address. You are one click away from activating it." msgstr "" "Creó una cuenta en <b>%{host} </b> con esta dirección de correo electrónico. " "Estás a un clic de activarlo." -#: lib/web/templates/email/report.html.heex:13 #, elixir-format +#: lib/web/templates/email/report.html.heex:13 msgid "New report on <b>%{instance}</b>" msgstr "Nuevo informe sobre <b>%{instance} </b>" -#: lib/web/templates/email/email_changed_old.html.heex:38 #, elixir-format +#: lib/web/templates/email/email_changed_old.html.heex:38 msgid "The email address for your account on <b>%{host}</b> is being changed to:" msgstr "" "La dirección de correo electrónico de su cuenta en <b>%{host} </b> se " "cambiará a:" -#: lib/web/templates/email/password_reset.html.heex:38 #, elixir-format +#: lib/web/templates/email/password_reset.html.heex:38 msgid "You requested a new password for your account on <b>%{instance}</b>." msgstr "Solicitó una nueva contraseña para su cuenta en <b>%{instance} </b>." -#: lib/web/templates/email/email.text.eex:5 #, elixir-format +#: lib/web/templates/email/email.text.eex:5 msgid "Please do not use it for real purposes." msgstr "Por favor no lo use de ninguna manera real." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.heex:63 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:6 lib/web/templates/email/event_updated.html.heex:133 #: lib/web/templates/email/event_updated.text.eex:24 lib/web/templates/email/notification_each_week.html.heex:70 #: lib/web/templates/email/notification_each_week.text.eex:11 lib/web/templates/email/on_day_notification.html.heex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 -#, elixir-format msgid "Would you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button." msgstr[0] "" @@ -951,9 +951,9 @@ msgstr[1] "" "Si desea cancelar su participación en uno o varios eventos, visite las " "páginas de los eventos a través de los enlaces de arriba y presiona el botón." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:38 #: lib/web/templates/email/pending_participation_notification.text.eex:4 -#, elixir-format msgid "You have one pending attendance request to process:" msgid_plural "You have %{number_participation_requests} attendance requests to process:" msgstr[0] "Tiene una solicitud de participación pendiente de procesar:" @@ -961,66 +961,66 @@ msgstr[1] "" "Tienes %{number_participation_requests} solicitudes de participación " "pendientes de procesar:" -#: lib/web/templates/email/email.text.eex:11 #, elixir-format +#: lib/web/templates/email/email.text.eex:11 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} es un servidor de Mobilizon." -#: lib/web/templates/email/email.html.heex:143 #, elixir-format +#: lib/web/templates/email/email.html.heex:143 msgid "<b>%{instance}</b> is powered by Mobilizon." msgstr "<b>%{instance} </b> es una instancia de Mobilizon." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:13 #: lib/web/templates/email/pending_participation_notification.text.eex:1 -#, elixir-format msgid "A request is pending!" msgstr "¡Hay una solicitud pendiente!" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:13 #: lib/web/templates/email/before_event_notification.text.eex:1 -#, elixir-format msgid "An event is upcoming!" msgstr "¡Se acerca un evento!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.heex:13 #: lib/web/templates/email/email_changed_new.text.eex:1 -#, elixir-format msgid "Confirm new email" msgstr "Confirme su email" -#: lib/web/templates/email/event_updated.html.heex:84 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:84 msgid "End" msgstr "Final" -#: lib/web/templates/email/event_updated.text.eex:21 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:21 msgid "End %{ends_on}" msgstr "Final %{ends_on}" +#, elixir-format #: lib/web/templates/email/event_updated.html.heex:13 #: lib/web/templates/email/event_updated.text.eex:1 -#, elixir-format msgid "Event update!" msgstr "¡Evento actualizado!" -#: lib/web/templates/email/report.html.heex:88 #, elixir-format +#: lib/web/templates/email/report.html.heex:88 msgid "Flagged comments" msgstr "Comentarios marcados" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.heex:45 #: lib/web/templates/email/event_participation_approved.text.eex:7 -#, elixir-format msgid "Good news: one of the event organizers just approved your request. Update your calendar, because you're on the guest list now!" msgstr "" "Buenas noticias: uno de los organizadores del evento acaba de aprobar su " "solicitud. Actualice su calendario, ¡porque ya está en la lista de invitados!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.heex:38 #: lib/web/templates/email/email_changed_new.text.eex:3 -#, elixir-format msgid "Hi there! It seems like you wanted to change the email address linked to your account on <b>%{instance}</b>. If you still wish to do so, please click the button below to confirm the change. You will then be able to log in to %{instance} with this new email address." msgstr "" "¡Hola! Parece que desea cambiar la dirección de correo electrónico vinculada " @@ -1028,16 +1028,16 @@ msgstr "" "botón de abajo para confirmar el cambio. Luego podrá iniciar sesión en% " "{instance} con esta nueva dirección de correo electrónico." -#: lib/web/templates/email/email_changed_old.text.eex:3 #, elixir-format +#: lib/web/templates/email/email_changed_old.text.eex:3 msgid "Hi there! Just a quick note to confirm that the email address linked to your account on %{host} has been changed from this one to:" msgstr "" "¡Hola! Solo una nota rápida para confirmar que la dirección de correo " "electrónico vinculada a su cuenta en %{host} se ha cambiado de esta a:" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.heex:62 #: lib/web/templates/email/email_changed_old.text.eex:5 -#, elixir-format msgid "If you did not trigger this change yourself, it is likely that someone has gained access to your %{host} account. Please log in and change your password immediately. If you cannot login, contact the admin on %{host}." msgstr "" "Si no activó este cambio usted mismo, es probable que alguien haya obtenido " @@ -1045,175 +1045,175 @@ msgstr "" "inmediatamente. Si no puede iniciar sesión, comuníquese con el administrador " "en %{host}." -#: lib/web/templates/email/password_reset.text.eex:12 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:12 msgid "If you didn't trigger the change yourself, please ignore this message. Your password won't be changed until you click the link above." msgstr "" "Si no activó el cambio usted mismo, ignore este mensaje. Su contraseña no se " "cambiará hasta que haga clic en el enlace de arriba." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.heex:70 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:4 lib/web/templates/email/registration_confirmation.html.heex:45 -#, elixir-format msgid "If you didn't trigger this email, you may safely ignore it." msgstr "Si no activó esta alerta, puede ignorarla con seguridad." +#, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:63 #: lib/web/templates/email/before_event_notification.text.eex:6 -#, elixir-format msgid "If you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgstr "" "Si necesitas cancelar su participación, sólo accede a la página del evento " "mediante el enlace debajo y presiona el botón." +#, elixir-format #: lib/web/templates/email/email.html.heex:144 #: lib/web/templates/email/email.text.eex:11 -#, elixir-format msgid "Learn more about Mobilizon here!" msgstr "¡Aprenda más sobre Mobilizon aquí!" +#, elixir-format #: lib/web/templates/email/event_updated.html.heex:94 #: lib/web/templates/export/event_participants.html.heex:129 -#, elixir-format msgid "Location" msgstr "Ubicación" -#: lib/web/templates/email/event_updated.html.heex:104 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:104 msgid "Location address was removed" msgstr "Dirección física fue eliminada" +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:51 #: lib/web/templates/email/pending_participation_notification.text.eex:6 -#, elixir-format msgid "Manage pending requests" msgstr "Gestionar solicitudes de participación pendientes" +#, elixir-format #: lib/web/templates/email/registration_confirmation.html.heex:13 #: lib/web/templates/email/registration_confirmation.text.eex:1 -#, elixir-format msgid "Nearly there!" msgstr "¡Ya casi estas!" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.heex:13 #: lib/web/templates/email/email_changed_old.text.eex:1 -#, elixir-format msgid "New email confirmation" msgstr "Nueva confirmación de correo electrónico" -#: lib/web/templates/email/report.html.heex:106 #, elixir-format +#: lib/web/templates/email/report.html.heex:106 msgid "Reasons for report" msgstr "Razones para informar" -#: lib/web/templates/email/report.html.heex:39 #, elixir-format +#: lib/web/templates/email/report.html.heex:39 msgid "Someone on <b>%{instance}</b> reported the following content for you to analyze:" msgstr "Alguien en <b>%{instance}</b> informó el siguiente contenido:" +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.heex:13 #: lib/web/templates/email/event_participation_rejected.text.eex:1 -#, elixir-format msgid "Sorry! You're not going." msgstr "¡Lo siento! No vas." -#: lib/web/templates/email/event_updated.html.heex:74 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:74 msgid "Start" msgstr "Inicio" -#: lib/web/templates/email/event_updated.text.eex:18 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:18 msgid "Start %{begins_on}" msgstr "Inicio %{begins_on}" -#: lib/web/templates/email/event_updated.text.eex:3 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:3 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "Ha habido cambios para %{title}, así que pensamos en avisarle." +#, elixir-format #: lib/web/templates/email/event_updated.html.heex:55 #: lib/web/templates/email/event_updated.text.eex:11 -#, elixir-format msgid "This event has been cancelled by its organizers. Sorry!" msgstr "Este evento ha sido cancelado por sus organizadores. ¡Lo siento!" +#, elixir-format #: lib/web/templates/email/event_updated.html.heex:51 #: lib/web/templates/email/event_updated.text.eex:7 -#, elixir-format msgid "This event has been confirmed" msgstr "El evento ha sido confirmado" +#, elixir-format #: lib/web/templates/email/event_updated.html.heex:53 #: lib/web/templates/email/event_updated.text.eex:9 -#, elixir-format msgid "This event has yet to be confirmed: organizers will let you know if they do confirm it." msgstr "" "Este evento aún no se ha confirmado: los organizadores te avisarán si lo " "confirman." +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.heex:45 #: lib/web/templates/email/event_participation_rejected.text.eex:7 -#, elixir-format msgid "Unfortunately, the organizers rejected your request." msgstr "" "Lamentablemente, los organizadores rechazaron tu solicitud de participación." -#: lib/web/templates/email/email_changed_new.html.heex:51 #, elixir-format +#: lib/web/templates/email/email_changed_new.html.heex:51 msgid "Verify your email address" msgstr "Verifica tu dirección de correo electrónico" -#: lib/web/templates/email/report.html.heex:126 #, elixir-format +#: lib/web/templates/email/report.html.heex:126 msgid "View report" msgstr "Ver el informe" -#: lib/web/templates/email/report.text.eex:24 #, elixir-format +#: lib/web/templates/email/report.text.eex:24 msgid "View report:" msgstr "Ver el informe:" +#, elixir-format #: lib/web/templates/email/email_anonymous_activity.html.heex:67 #: lib/web/templates/email/event_participation_approved.html.heex:58 lib/web/templates/email/event_participation_confirmed.html.heex:58 -#, elixir-format msgid "Visit event page" msgstr "Visita la página del evento" -#: lib/web/templates/email/event_updated.html.heex:121 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:121 msgid "Visit the updated event page" msgstr "Visita la página del evento actualizada" -#: lib/web/templates/email/event_updated.text.eex:23 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:23 msgid "Visit the updated event page: %{link}" msgstr "Ver el evento actualizado en: %{link}" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.heex:13 #: lib/web/templates/email/notification_each_week.text.eex:1 -#, elixir-format msgid "What's up this week?" msgstr "¿Qué pasa esta semana?" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.heex:13 #: lib/web/templates/email/on_day_notification.text.eex:1 -#, elixir-format msgid "What's up today?" msgstr "Qué pasa hoy?" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.heex:70 #: lib/web/templates/email/event_participation_approved.text.eex:11 lib/web/templates/email/event_participation_confirmed.html.heex:70 #: lib/web/templates/email/event_participation_confirmed.text.eex:6 -#, elixir-format msgid "Would you wish to update or cancel your attendance, simply access the event page through the link above and click on the Attending button." msgstr "" "Si desea actualizar o cancelar su asistencia, simplemente acceda a la página " "del evento a través del enlace de arriba y haga clic en el botón Asistir." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:64 #: lib/web/templates/email/pending_participation_notification.text.eex:8 -#, elixir-format msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »." msgstr "" "Recibió este correo electrónico porque eligió recibir notificaciones de " @@ -1221,110 +1221,110 @@ msgstr "" "cambiar la configuración de notificaciones en la configuración de su cuenta " "de usuario en «Notificaciones»." -#: lib/web/templates/email/event_participation_rejected.text.eex:5 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.text.eex:5 msgid "You issued a request to attend %{title}." msgstr "Envió una solicitud para asistir a %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.text.eex:5 #: lib/web/templates/email/event_participation_confirmed.text.eex:3 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Solicitaste participar en el evento %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.heex:13 #: lib/web/templates/email/event_participation_confirmed.html.heex:13 lib/web/templates/email/event_participation_confirmed.text.eex:1 -#, elixir-format msgid "You're going!" msgstr "¡Vas!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.heex:64 #: lib/web/templates/email/email_changed_new.text.eex:5 -#, elixir-format msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "Si no activó el cambio usted mismo, ignore este mensaje." -#: lib/web/templates/email/email.html.heex:90 #, elixir-format +#: lib/web/templates/email/email.html.heex:90 msgid "<b>Please do not use it for real purposes.</b>" msgstr "<b>Por favor no lo use de ninguna manera real.</b>" +#, elixir-format #: lib/web/templates/email/group_member_removal.html.heex:45 #: lib/web/templates/email/group_member_removal.text.eex:5 -#, elixir-format msgid "If you feel this is an error, you may contact the group's administrators so that they can add you back." msgstr "" "Si cree que esto es un error, puede comunicarse con los administradores del " "grupo para que lo puedan integrar de nuevo." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.heex:13 #: lib/web/templates/email/group_member_removal.text.eex:1 -#, elixir-format msgid "So long, and thanks for the fish!" msgstr "¡Hasta luego y gracias por el pescado!" -#: lib/web/email/group.ex:63 #, elixir-format +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Ha sido eliminado del grupo %{group}" -#: lib/web/templates/email/group_member_removal.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_member_removal.text.eex:3 msgid "You have been removed from group %{group}. You will not be able to access this group's private content anymore." msgstr "" "Se le ha eliminado del grupo %{group}. Ya no podrá acceder al contenido " "privado de este grupo." -#: lib/web/templates/email/group_invite.html.heex:38 #, elixir-format +#: lib/web/templates/email/group_invite.html.heex:38 msgid "<b>%{inviter}</b> just invited you to join their group %{link_start}<b>%{group}</b>%{link_end}" msgstr "" "<b>%{inviter} </b> le acaba de invitar a unirse a su grupo% {link_start} " "<b>%{group </b>%{link_end}" -#: lib/web/templates/email/group_member_removal.html.heex:38 #, elixir-format +#: lib/web/templates/email/group_member_removal.html.heex:38 msgid "You have been removed from group %{link_start}<b>%{group}</b>%{link_end}. You will not be able to access this group's private content anymore." msgstr "" "Ha sido eliminado del grupo% {link_start} <b>%{group} </b>% {link_end}. Ya " "no podrá acceder al contenido privado de este grupo." +#, elixir-format #: lib/web/templates/email/group_suspension.html.heex:54 #: lib/web/templates/email/group_suspension.text.eex:7 -#, elixir-format msgid "As this group was located on another instance, it will continue to work for other instances than this one." msgstr "" "Como este grupo estaba ubicado en otra instancia, seguirá funcionando para " "otras instancias además de esta." +#, elixir-format #: lib/web/templates/email/group_suspension.html.heex:46 #: lib/web/templates/email/group_suspension.text.eex:5 -#, elixir-format msgid "As this group was located on this instance, all of it's data has been irretrievably deleted." msgstr "" "Como este grupo estaba ubicado en esta instancia, todos sus datos se han " "eliminado de forma irremediable." +#, elixir-format #: lib/web/templates/email/group_suspension.html.heex:13 #: lib/web/templates/email/group_suspension.text.eex:1 -#, elixir-format msgid "The group %{group} has been suspended on %{instance}!" msgstr "¡El grupo %{group} ha sido suspendido en %{instance}!" -#: lib/web/templates/email/group_suspension.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_suspension.text.eex:3 msgid "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group." msgstr "" "El equipo de moderación de su instancia ha decidido suspender a %{group_name}" " (%{group_address}). Ya no eres miembro de este grupo." -#: lib/web/email/group.ex:97 #, elixir-format +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "El grupo %{group} ha sido suspendido en %{instance}" -#: lib/web/templates/api/terms.html.heex:24 #, elixir-format +#: lib/web/templates/api/terms.html.heex:24 msgctxt "terms" msgid "By accessing or using the Service, this means you agree to be bound by all the terms below. If these terms are in any way unclear, please let us know by contacting %{contact}." msgstr "" @@ -1332,8 +1332,8 @@ msgstr "" "todos los términos a continuación. Si estos términos no son claros de alguna " "manera, háganoslo saber poniéndose en contacto con %{contact}." -#: lib/web/templates/api/terms.html.heex:40 #, elixir-format +#: lib/web/templates/api/terms.html.heex:40 msgctxt "terms" msgid "For information about how we collect and use information about users of the Service, please check our <a href=\"/privacy\">privacy policy</a>." msgstr "" @@ -1341,22 +1341,22 @@ msgstr "" "sobre los usuarios del Servicio, consulte nuestra <a href=\"/privacy\"> " "política de privacidad </a>." -#: lib/web/templates/api/terms.html.heex:36 #, elixir-format +#: lib/web/templates/api/terms.html.heex:36 msgctxt "terms" msgid "If you continue to use the Service after the revised Terms go into effect, you accept the revised Terms." msgstr "" "Si continúa utilizando el Servicio después de que los Términos revisados " "entren en vigencia, entonces ha aceptado los Términos revisados." -#: lib/web/templates/api/privacy.html.heex:78 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:78 msgctxt "terms" msgid "If you delete this information, you need to login again." msgstr "Si eliminas esta información, deberás iniciar sesión nuevamente." -#: lib/web/templates/api/privacy.html.heex:80 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:80 msgctxt "terms" msgid "If you're not connected, we don't store any information on your device, unless you participate in an event anonymously. In this specific case we store the hash of an unique identifier for the event and participation status in your browser so that we may display participation status. Deleting this information will only stop displaying participation status in your browser." msgstr "" @@ -1367,22 +1367,22 @@ msgstr "" "información solo dejará de mostrar el estado de participación en tu " "navegador." -#: lib/web/templates/api/privacy.html.heex:87 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:87 msgctxt "terms" msgid "Note: This information is stored in your localStorage and not your cookies." msgstr "" "Nota: Estas informaciones se almacenan en tu almacenamiento local y no en " "tus cookies." -#: lib/web/templates/api/terms.html.heex:71 #, elixir-format +#: lib/web/templates/api/terms.html.heex:71 msgctxt "terms" msgid "Our responsibility" msgstr "Nuestra responsabilidad" -#: lib/web/templates/api/privacy.html.heex:61 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:61 msgctxt "terms" msgid "Retain server logs containing the IP address of all requests to this server, insofar as such logs are kept, no more than 90 days." msgstr "" @@ -1390,9 +1390,9 @@ msgstr "" "las solicitudes a este servidor, en la medida en que dichos registros se " "mantengan, no más de 90 días." +#, elixir-format #: lib/web/templates/api/privacy.html.heex:3 #: lib/web/templates/api/terms.html.heex:15 -#, elixir-format msgctxt "terms" msgid "Some terms, technical or otherwise, used in the text below may cover concepts that are difficult to grasp. We have provided <a href=\"/glossary\">a glossary</a> to help you understand them better." msgstr "" @@ -1401,8 +1401,8 @@ msgstr "" "Proporcionamos <a href=\"/glossary\"> un glosario </a> para ayudarlo a " "comprenderlos mejor." -#: lib/web/templates/api/terms.html.heex:45 #, elixir-format +#: lib/web/templates/api/terms.html.heex:45 msgctxt "terms" msgid "We are not liable for any loss you may incur as a result of someone else using your email or password, either with or without your knowledge." msgstr "" @@ -1410,8 +1410,8 @@ msgstr "" "resultado de que otra persona use su correo electrónico o contraseña, ya sea " "con o sin su conocimiento." -#: lib/web/templates/api/terms.html.heex:50 #, elixir-format +#: lib/web/templates/api/terms.html.heex:50 msgctxt "terms" msgid "We cannot be held responsible should a programming or administrative error make your content visible to a larger audience than intended. Aside from our limited right to your content, you retain all of your rights to the content you post, link and otherwise make available on or through the Service." msgstr "" @@ -1421,8 +1421,8 @@ msgstr "" "todos sus derechos sobre el contenido que publica, vincula y de lo contrario " "pone a disposición en oa través del Servicio." -#: lib/web/templates/api/privacy.html.heex:10 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:10 msgctxt "terms" msgid "We collect information from you when you register on this instance and gather data when you participate in the platform by reading, writing, and interacting with content shared here. If you register on this instance, you will be asked to enter <b>an email address, a password</b> (hashed) and at least <b>an username</b>. Your email address will be verified by an email containing a unique link. Once the link is activated, we know you control that email address. You may also enter additional profile information such as <b>a display name and biography, and upload a profile picture and header image</b>. The username, display name, biography, profile picture and header image <b>are always listed publicly</b>. <b>You may however visit this instance without registering</b>." msgstr "" @@ -1440,8 +1440,8 @@ msgstr "" "imagen del encabezado <b>siempre se listan públicamente</b>. <b> Sin " "embargo, también puedes visitar este servidor sin registrarse</b>." -#: lib/web/templates/api/terms.html.heex:30 #, elixir-format +#: lib/web/templates/api/terms.html.heex:30 msgctxt "terms" msgid "We reserve the right to modify these Terms at any time. For instance, we may need to change these Terms if we come out with a new feature." msgstr "" @@ -1449,8 +1449,8 @@ msgstr "" "Por ejemplo, es posible que necesitemos cambiar estos Términos si " "presentamos una nueva función o por alguna otra razón." -#: lib/web/templates/api/terms.html.heex:20 #, elixir-format +#: lib/web/templates/api/terms.html.heex:20 msgctxt "terms" msgid "When we say “we”, “our”, or “us” in this document, we are referring to the owners, operators and administrators of this Mobilizon instance. The Mobilizon software is provided by the team of Mobilizon contributors, supported by <a href=\"https://framasoft.org\">Framasoft</a>, a French not-for-profit organization advocating for Free/Libre Software. Unless explicitly stated, this Mobilizon instance is an independent service using Mobilizon's source code. You may find more information about this instance on the <a href=\"/about/instance\">\"About this instance\"</a> page." msgstr "" @@ -1465,8 +1465,8 @@ msgstr "" "información sobre esta instancia en la página <a href=\"/about/instance\"> " "\"Acerca de esta instancia\" </a>." -#: lib/web/templates/api/terms.html.heex:43 #, elixir-format +#: lib/web/templates/api/terms.html.heex:43 msgctxt "terms" msgid "When you create an account you agree to maintain the security and confidentiality of your password and accept all risks of unauthorized access to your account data and any other information you provide to <b>%{instance_name}</b>." msgstr "" @@ -1475,8 +1475,8 @@ msgstr "" "autorizado a los datos de su cuenta y cualquier otra información que " "proporcione a <b>%{instance_name}</b>." -#: lib/web/templates/api/terms.html.heex:49 #, elixir-format +#: lib/web/templates/api/terms.html.heex:49 msgctxt "terms" msgid "When you post, link or otherwise make available content to the Service, you grant us the right and license to display and distribute your content on or through the Service (including via applications). We may format your content for display throughout the Service, but we will not edit or revise the substance of your content itself. The displaying and distribution of your content happens only according to the visibility rules you have set for the content. We will not modify the visibility of the content you have set." msgstr "" @@ -1489,8 +1489,8 @@ msgstr "" "visibilidad que ha establecido para el contenido. No modificaremos la " "visibilidad del contenido que ha establecido." -#: lib/web/templates/api/privacy.html.heex:19 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:19 msgctxt "terms" msgid "Your <b>events</b> and <b>comments</b> are delivered to other instances that follow your own, meaning they are delivered to different instances and copies are stored there. When you delete events or comments, this is likewise delivered to these other instances. All interactions related to event features - such as joining an event - or group features - such as managing resources - are federated as well. Please keep in mind that the operators of the instance and any receiving instances may view such messages and information, and that recipients may screenshot, copy or otherwise re-share them." msgstr "" @@ -1502,8 +1502,8 @@ msgstr "" "servidor y cualquier servidor receptor puede ver dichos mensajes, y los " "destinatarios pueden capturar, copiar o de incluso volver a compartirlos." -#: lib/web/templates/api/privacy.html.heex:99 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:99 msgctxt "terms" msgid "Your content may be downloaded by other instances in the network. Your public events and comments are delivered to the instances following your own instance. Content created through a group is forwarded to all the instances of all the members of the group, insofar as these members reside on a different instance than this one." msgstr "" @@ -1512,328 +1512,328 @@ msgstr "" "mensajes directos se entregan a los servidores de los destinatarios, en la " "medida en que estos destinatarios residen en un servidor diferente a este." -#: lib/web/templates/email/event_participation_confirmed.text.eex:4 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.text.eex:4 msgid "You have confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Ha confirmado su participación. Actualice su calendario, ¡porque ya está en " "la lista de invitados!" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.heex:38 #: lib/web/templates/email/event_participation_confirmed.html.heex:38 -#, elixir-format msgid "You recently requested to attend <b>%{title}</b>." msgstr "Solicitaste participar en el evento<b>%{title}</b>." -#: lib/web/email/participation.ex:88 #, elixir-format +#: lib/web/email/participation.ex:88 msgid "Your participation to event %{title} has been confirmed" msgstr "Su participación en el evento %{title} ha sido aprobada" -#: lib/web/templates/email/report.html.heex:41 #, elixir-format +#: lib/web/templates/email/report.html.heex:41 msgid "<b>%{reporter}</b> reported the following content." msgstr "<b>%{reporter} </b> informó el siguiente contenido." -#: lib/web/templates/email/report.text.eex:5 #, elixir-format +#: lib/web/templates/email/report.text.eex:5 msgid "Group %{group} was reported" msgstr "Se informó el grupo %{group}" -#: lib/web/templates/email/report.html.heex:51 #, elixir-format +#: lib/web/templates/email/report.html.heex:51 msgid "Group reported" msgstr "Grupo informado" -#: lib/web/templates/email/report.text.eex:7 #, elixir-format +#: lib/web/templates/email/report.text.eex:7 msgid "Profile %{profile} was reported" msgstr "Se informó el perfil %{profile}" -#: lib/web/templates/email/report.html.heex:56 #, elixir-format +#: lib/web/templates/email/report.html.heex:56 msgid "Profile reported" msgstr "Perfil informado" -#: lib/web/templates/email/event_participation_confirmed.html.heex:45 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.html.heex:45 msgid "You have now confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Ahora ha confirmado su participación. Actualice su calendario, ¡porque ya " "está en la lista de invitados!" -#: lib/mobilizon/posts/post.ex:99 #, elixir-format +#: lib/mobilizon/posts/post.ex:99 msgid "A text is required for the post" msgstr "Se requiere un texto para la publicación" -#: lib/mobilizon/posts/post.ex:98 #, elixir-format +#: lib/mobilizon/posts/post.ex:98 msgid "A title is required for the post" msgstr "Se requiere un título para la publicación" -#: lib/web/templates/email/instance_follow.text.eex:3 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:3 msgid "%{name} (%{domain}) just requested to follow your instance." msgstr "%{name} (%{domain}) sólo solicitó seguir su instancia." -#: lib/web/email/follow.ex:54 #, elixir-format +#: lib/web/email/follow.ex:54 msgid "%{name} requests to follow your instance" msgstr "%{name} solicita seguir tu instancia" -#: lib/web/templates/email/instance_follow.html.heex:38 #, elixir-format +#: lib/web/templates/email/instance_follow.html.heex:38 msgid "<b>%{name} (%{domain})</b> just requested to follow your instance. If you accept, this instance will receive all of your instance's public events." msgstr "" "<b>%{name} (%{domain})</b> solo pedí seguir tu instancia. Si acepta, su " "instancia recibirá todos los eventos públicos para su instancia." -#: lib/web/templates/email/instance_follow.text.eex:4 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:4 msgid "If you accept, this instance will receive all of your public events." msgstr "Si acepta, esta instancia recibirá todos sus eventos públicos." -#: lib/web/email/follow.ex:48 #, elixir-format +#: lib/web/email/follow.ex:48 msgid "Instance %{name} (%{domain}) requests to follow your instance" msgstr "La instancia %{name} (%{domain}) solicita seguir tu instancia" -#: lib/web/templates/email/instance_follow.html.heex:66 #, elixir-format +#: lib/web/templates/email/instance_follow.html.heex:66 msgid "See the federation settings" msgstr "Ver la configuración de la federación" +#, elixir-format #: lib/web/templates/email/instance_follow.html.heex:52 #: lib/web/templates/email/instance_follow.text.eex:6 -#, elixir-format msgid "To accept this invitation, head over to the instance's admin settings." msgstr "Para aceptar esta invitación, dirígete a tus grupos." +#, elixir-format #: lib/web/templates/email/instance_follow.html.heex:13 #: lib/web/templates/email/instance_follow.text.eex:1 -#, elixir-format msgid "Want to connect?" msgstr "¿Quieres conectarte?" +#, elixir-format #: lib/web/templates/email/instance_follow.html.heex:45 #: lib/web/templates/email/instance_follow.text.eex:5 -#, elixir-format msgid "Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too." msgstr "" "Nota: el hecho que %{name} (%{domain} te siga, no implica necesariamente que " "sigas esta instancia, pero puedes solicitar seguirla también." -#: lib/web/templates/email/anonymous_participation_confirmation.html.heex:38 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.heex:38 msgid "Hi there! You just registered to join this event: « <b>%{title}</b> ». Please confirm the e-mail address you provided:" msgstr "" "¡Hola! Te acabas de registrar para unirte a este evento: «<b>%{title}</b>». " "Confirme la dirección de correo electrónico que proporcionó:" -#: lib/web/templates/email/event_participation_rejected.html.heex:38 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.html.heex:38 msgid "You issued a request to attend <b>%{title}</b>." msgstr "Envió una solicitud para asistir a <b>%{title}</b>." -#: lib/web/templates/email/event_updated.html.heex:64 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:64 msgid "Event title" msgstr "Título del evento" -#: lib/web/templates/email/event_updated.html.heex:38 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "Ha habido cambios para<b>%{title}</b>, así que pensamos en avisarle." -#: lib/web/templates/error/500_page.html.heex:7 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:7 msgid "This page is not correct" msgstr "Esta página no es correcta" -#: lib/web/templates/error/500_page.html.heex:50 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:50 msgid "We're sorry, but something went wrong on our end." msgstr "Lo sentimos, pero algo salió mal por nuestra parte." +#, elixir-format #: lib/web/templates/email/email.html.heex:89 #: lib/web/templates/email/email.text.eex:4 -#, elixir-format msgid "This is a demonstration site to test Mobilizon." msgstr "Este es un sitio de demostración para probar Mobilizon." +#, elixir-format #: lib/service/metadata/actor.ex:67 lib/service/metadata/actor.ex:75 #: lib/service/metadata/instance.ex:54 lib/service/metadata/instance.ex:60 -#, elixir-format msgid "%{name}'s feed" msgstr "Flujo de %{name}" -#: lib/service/export/feed.ex:122 #, elixir-format +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "Flujo de eventos privados de %{actor} a %{instance}" -#: lib/service/export/feed.ex:117 #, elixir-format +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "Flujo público de eventos de %{actor} a %{instance}" -#: lib/service/export/feed.ex:225 #, elixir-format +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "Flujo para %{email} en %{instance}" -#: lib/web/templates/error/500_page.html.heex:57 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:57 msgid "If the issue persists, you may contact the server administrator at %{contact}." msgstr "" "Si el problema persiste, puede comunicarse con el administrador del servidor " "en %{contact}." -#: lib/web/templates/error/500_page.html.heex:55 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:55 msgid "If the issue persists, you may try to contact the server administrator." msgstr "" "Si el problema persiste, puede intentar comunicarse con el administrador del " "servidor." -#: lib/web/templates/error/500_page.html.heex:68 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:68 msgid "Technical details" msgstr "Detalles técnicos" -#: lib/web/templates/error/500_page.html.heex:52 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:52 msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" "El servidor de Mobilizon %{instance} parece estar temporalmente inactivo." -#: lib/service/export/feed.ex:75 #, elixir-format +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "Flujo público para %{instance}" -#: lib/graphql/resolvers/user.ex:298 #, elixir-format +#: lib/graphql/resolvers/user.ex:298 msgid "The password you have choosen is too short. Please make sure your password contains at least 6 charaters." msgstr "" "La contraseña que ha elegido es demasiado corta. Asegúrese de que su " "contraseña contenga al menos 6 caracteres." -#: lib/graphql/resolvers/user.ex:304 #, elixir-format +#: lib/graphql/resolvers/user.ex:304 msgid "The token you provided is invalid. Make sure that the URL is exactly the one provided inside the email you got." msgstr "" "El token que proporcionaste no es válido. Asegúrese de que la URL sea " "exactamente la que se proporciona dentro del correo electrónico que recibió." -#: lib/web/email/actor.ex:44 #, elixir-format +#: lib/web/email/actor.ex:44 msgid "Your participation to %{event} has been cancelled!" msgstr "Su participación en el evento %{title} ¡ha sido cancelada!" +#, elixir-format #: lib/web/templates/email/actor_suspension_participants.html.heex:38 #: lib/web/templates/email/actor_suspension_participants.text.eex:3 -#, elixir-format msgid "Your instance's moderation team has decided to suspend %{actor_name} (%{actor_address}). All of their events have been removed and your participation to event %{event} cancelled." msgstr "" "El equipo de moderación de tu instancia ha decidido suspender a%{actor_name} " "(%{actor_address}). Se eliminaron todos sus eventos y se canceló su " "participación en el evento % {event}." -#: lib/web/templates/email/group_suspension.html.heex:38 #, elixir-format +#: lib/web/templates/email/group_suspension.html.heex:38 msgid "Your instance's moderation team has decided to suspend <b>%{group_name}</b> (%{group_address}). You are no longer a member of this group." msgstr "" "El equipo de moderación de su instancia ha decidido suspender a " "<b>%{group_name}</b>(%{group_address}). Ya no eres miembro de este grupo." +#, elixir-format #: lib/web/templates/email/actor_suspension_participants.html.heex:13 #: lib/web/templates/email/actor_suspension_participants.text.eex:1 -#, elixir-format msgid "Your participation to %{event} on %{instance} has been cancelled!" msgstr "¡Tu participación en %{event} en %{instance} ha sido cancelada!" #. File name template for exported list of participants. Should NOT contain spaces. Make sure the output is going to be something standardized that is acceptable as a file name on most systems. #. File name template for exported list of participants. Should NOT contain spaces. Make sure the output is going to be something standardized that is acceptable as a file name on most systems. #. File name template for exported list of participants. Should NOT contain spaces. Make sure the output is going to be something standardized that is acceptable as a file name on most systems. +#, elixir-format #: lib/service/export/participants/csv.ex:73 #: lib/service/export/participants/ods.ex:79 lib/service/export/participants/pdf.ex:93 -#, elixir-format msgid "%{event}_participants" msgstr "%{event}_participants" -#: lib/service/export/participants/common.ex:61 #, elixir-format +#: lib/service/export/participants/common.ex:61 msgid "Participant message" msgstr "Mensaje del participante" -#: lib/service/export/participants/common.ex:61 #, elixir-format +#: lib/service/export/participants/common.ex:61 msgid "Participant name" msgstr "Participación aprobada" -#: lib/service/export/participants/common.ex:61 #, elixir-format +#: lib/service/export/participants/common.ex:61 msgid "Participant status" msgstr "Estado de participante" -#: lib/service/export/participants/common.ex:52 #, elixir-format +#: lib/service/export/participants/common.ex:52 msgid "Administrator" msgstr "Administrador-a" -#: lib/service/export/participants/common.ex:55 #, elixir-format +#: lib/service/export/participants/common.ex:55 msgid "Creator" msgstr "Creador-a" -#: lib/service/export/participants/common.ex:49 #, elixir-format +#: lib/service/export/participants/common.ex:49 msgid "Moderator" msgstr "Moderador-a" -#: lib/service/export/participants/common.ex:37 #, elixir-format +#: lib/service/export/participants/common.ex:37 msgid "Not approved" msgstr "No aprovado-a" -#: lib/service/export/participants/common.ex:40 #, elixir-format +#: lib/service/export/participants/common.ex:40 msgid "Not confirmed" msgstr "No confirmado-a" -#: lib/service/export/participants/common.ex:46 #, elixir-format +#: lib/service/export/participants/common.ex:46 msgid "Participant" msgstr "Participante" -#: lib/service/export/participants/common.ex:43 #, elixir-format +#: lib/service/export/participants/common.ex:43 msgid "Rejected" msgstr "Rechazado-a" -#: lib/web/templates/export/event_participants.html.heex:122 #, elixir-format +#: lib/web/templates/export/event_participants.html.heex:122 msgid "Begins on" msgstr "Comienza en" -#: lib/web/templates/export/event_participants.html.heex:125 #, elixir-format +#: lib/web/templates/export/event_participants.html.heex:125 msgid "Ends on" msgstr "Final" -#: lib/web/templates/export/event_participants.html.heex:132 #, elixir-format +#: lib/web/templates/export/event_participants.html.heex:132 msgid "Number of participants" msgstr "Número de participantes" -#: lib/web/templates/export/event_participants.html.heex:120 #, elixir-format +#: lib/web/templates/export/event_participants.html.heex:120 msgid "Participants for %{event}" msgstr "Participación aprobada" -#: lib/service/export/participants/common.ex:88 #, elixir-format +#: lib/service/export/participants/common.ex:88 msgid "Anonymous participant" msgstr "Participante anónimo" diff --git a/priv/gettext/es/LC_MESSAGES/errors.po b/priv/gettext/es/LC_MESSAGES/errors.po index 4589de1cd..9cd213325 100644 --- a/priv/gettext/es/LC_MESSAGES/errors.po +++ b/priv/gettext/es/LC_MESSAGES/errors.po @@ -94,882 +94,902 @@ msgstr "debe ser mayor o igual que% {number}" msgid "must be equal to %{number}" msgstr "debe ser igual a% {number}" -#: lib/graphql/resolvers/user.ex:107 #, elixir-format +#: lib/graphql/resolvers/user.ex:107 msgid "Cannot refresh the token" msgstr "No se puede actualizar el token" -#: lib/graphql/resolvers/group.ex:227 #, elixir-format +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "El perfil actual no es miembro de este grupo" -#: lib/graphql/resolvers/group.ex:231 #, elixir-format +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "El perfil actual no es un administrador del grupo seleccionado" -#: lib/graphql/resolvers/user.ex:588 #, elixir-format +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Error al guardar los parámetros del usuario" -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 #, elixir-format +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Grupo no encontrado" -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 #, elixir-format +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "No se encontró el grupo con ID% {id}" -#: lib/graphql/resolvers/user.ex:85 #, elixir-format +#: lib/graphql/resolvers/user.ex:85 msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" "Imposible autenticarse, su correo electrónico o contraseña no son válidos." -#: lib/graphql/resolvers/group.ex:290 #, elixir-format +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Miembro no encontrado" -#: lib/graphql/resolvers/actor.ex:94 #, elixir-format +#: lib/graphql/resolvers/actor.ex:94 msgid "No profile found for the moderator user" msgstr "No se encontró el perfil del usuario moderador" -#: lib/graphql/resolvers/user.ex:253 #, elixir-format +#: lib/graphql/resolvers/user.ex:253 msgid "No user to validate with this email was found" msgstr "No se encontró ningún usuario para validar con este correo electrónico" -#: lib/graphql/resolvers/person.ex:314 lib/graphql/resolvers/user.ex:278 #, elixir-format +#: lib/graphql/resolvers/person.ex:314 lib/graphql/resolvers/user.ex:278 msgid "No user with this email was found" msgstr "No se encontró ningún usuario con este correo electrónico" +#, elixir-format #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:32 lib/graphql/resolvers/participant.ex:210 lib/graphql/resolvers/person.ex:236 #: lib/graphql/resolvers/person.ex:353 lib/graphql/resolvers/person.ex:380 lib/graphql/resolvers/person.ex:397 -#, elixir-format msgid "Profile is not owned by authenticated user" msgstr "El perfil no es propiedad del usuario autenticado" -#: lib/graphql/resolvers/user.ex:156 #, elixir-format +#: lib/graphql/resolvers/user.ex:156 msgid "Registrations are not open" msgstr "Las inscripciones no están abiertas" -#: lib/graphql/resolvers/user.ex:407 #, elixir-format +#: lib/graphql/resolvers/user.ex:407 msgid "The current password is invalid" msgstr "La contraseña actual no es válida" -#: lib/graphql/resolvers/user.ex:452 #, elixir-format +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "El nuevo correo electrónico no parece ser válido" -#: lib/graphql/resolvers/user.ex:449 #, elixir-format +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "El nuevo correo electrónico debe ser diferente" -#: lib/graphql/resolvers/user.ex:410 #, elixir-format +#: lib/graphql/resolvers/user.ex:410 msgid "The new password must be different" msgstr "La nueva contraseña debe ser diferente" -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 #, elixir-format +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "La contraseña proporcionada no es válida" -#: lib/graphql/resolvers/user.ex:414 #, elixir-format +#: lib/graphql/resolvers/user.ex:414 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "La contraseña que ha elegido es demasiado corta. Asegúrese de que su " "contraseña contenga al menos 6 caracteres." -#: lib/graphql/resolvers/user.ex:274 #, elixir-format +#: lib/graphql/resolvers/user.ex:274 msgid "This user can't reset their password" msgstr "Este usuario no puede restablecer su contraseña" -#: lib/graphql/resolvers/user.ex:81 #, elixir-format +#: lib/graphql/resolvers/user.ex:81 msgid "This user has been disabled" msgstr "Este usuario ha sido inhabilitado" -#: lib/graphql/resolvers/user.ex:232 lib/graphql/resolvers/user.ex:237 #, elixir-format +#: lib/graphql/resolvers/user.ex:232 lib/graphql/resolvers/user.ex:237 msgid "Unable to validate user" msgstr "No se puede validar al usuario" -#: lib/graphql/resolvers/user.ex:496 #, elixir-format +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "El usuario ya está inhabilitado" -#: lib/graphql/resolvers/user.ex:563 #, elixir-format +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "El usuario solicitado no ha iniciado sesión" -#: lib/graphql/resolvers/group.ex:262 #, elixir-format +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Ya eres miembro de este grupo" -#: lib/graphql/resolvers/group.ex:297 #, elixir-format +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "No puedes dejar este grupo porque eres el único administrador" -#: lib/graphql/resolvers/group.ex:259 #, elixir-format +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "No puedes unirte a este grupo" -#: lib/graphql/resolvers/group.ex:111 #, elixir-format +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "No puedes enumerar grupos a menos que seas moderador." -#: lib/graphql/resolvers/user.ex:461 #, elixir-format +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "Debes iniciar sesión para cambiar tu correo electrónico" -#: lib/graphql/resolvers/user.ex:422 #, elixir-format +#: lib/graphql/resolvers/user.ex:422 msgid "You need to be logged-in to change your password" msgstr "Debes iniciar sesión para cambiar tu contraseña" -#: lib/graphql/resolvers/group.ex:236 #, elixir-format +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "Debes iniciar sesión para eliminar un grupo" -#: lib/graphql/resolvers/user.ex:523 #, elixir-format +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "Debes iniciar sesión para eliminar su cuenta" -#: lib/graphql/resolvers/group.ex:267 #, elixir-format +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "Debes iniciar sesión para eliminar su cuenta" -#: lib/graphql/resolvers/group.ex:302 #, elixir-format +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "Debes iniciar sesión para dejar un grupo" -#: lib/graphql/resolvers/group.ex:200 #, elixir-format +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "Debes iniciar sesión para actualizar un grupo" -#: lib/graphql/resolvers/user.ex:112 #, elixir-format +#: lib/graphql/resolvers/user.ex:112 msgid "You need to have an existing token to get a refresh token" msgstr "Debes tener un token existente para obtener un token de actualización" -#: lib/graphql/resolvers/user.ex:256 lib/graphql/resolvers/user.ex:281 #, elixir-format +#: lib/graphql/resolvers/user.ex:256 lib/graphql/resolvers/user.ex:281 msgid "You requested again a confirmation email too soon" msgstr "" "Solicitó de nuevo un correo electrónico de confirmación demasiado pronto" -#: lib/graphql/resolvers/user.ex:159 #, elixir-format +#: lib/graphql/resolvers/user.ex:159 msgid "Your email is not on the allowlist" msgstr "Tu correo electrónico no está en la lista de permitidos" -#: lib/graphql/resolvers/actor.ex:100 #, elixir-format +#: lib/graphql/resolvers/actor.ex:100 msgid "Error while performing background task" msgstr "Error al realizar la tarea en segundo plano" -#: lib/graphql/resolvers/actor.ex:32 #, elixir-format +#: lib/graphql/resolvers/actor.ex:32 msgid "No profile found with this ID" msgstr "No se encontró ningún perfil con este ID" -#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:97 #, elixir-format +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:97 msgid "No remote profile found with this ID" msgstr "No se encontró ningún perfil remoto con este ID" -#: lib/graphql/resolvers/actor.ex:72 #, elixir-format +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Solo los moderadores y administradores pueden suspender un perfil" -#: lib/graphql/resolvers/actor.ex:105 #, elixir-format +#: lib/graphql/resolvers/actor.ex:105 msgid "Only moderators and administrators can unsuspend a profile" msgstr "" "Solo los moderadores y administradores pueden anular la suspensión de un " "perfil" -#: lib/graphql/resolvers/actor.ex:29 #, elixir-format +#: lib/graphql/resolvers/actor.ex:29 msgid "Only remote profiles may be refreshed" msgstr "Solo se pueden actualizar los perfiles remotos" -#: lib/graphql/resolvers/actor.ex:64 #, elixir-format +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Perfil ya suspendido" -#: lib/graphql/resolvers/participant.ex:96 #, elixir-format +#: lib/graphql/resolvers/participant.ex:96 msgid "A valid email is required by your instance" msgstr "Su instancia requiere un correo electrónico válido" +#, elixir-format #: lib/graphql/resolvers/participant.ex:90 #: lib/graphql/resolvers/participant.ex:143 -#, elixir-format msgid "Anonymous participation is not enabled" msgstr "La participación anónima no está habilitada" -#: lib/graphql/resolvers/person.ex:210 #, elixir-format +#: lib/graphql/resolvers/person.ex:210 msgid "Cannot remove the last administrator of a group" msgstr "No se puede eliminar al último administrador de un grupo" -#: lib/graphql/resolvers/person.ex:207 #, elixir-format +#: lib/graphql/resolvers/person.ex:207 msgid "Cannot remove the last identity of a user" msgstr "No se puede eliminar la última identidad de un usuario" -#: lib/graphql/resolvers/comment.ex:125 #, elixir-format +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "El comentario ya está eliminado" -#: lib/graphql/error.ex:101 lib/graphql/resolvers/discussion.ex:75 #, elixir-format +#: lib/graphql/error.ex:101 lib/graphql/resolvers/discussion.ex:75 msgid "Discussion not found" msgstr "Discusión no encontrada" -#: lib/graphql/resolvers/report.ex:63 lib/graphql/resolvers/report.ex:82 #, elixir-format +#: lib/graphql/resolvers/report.ex:63 lib/graphql/resolvers/report.ex:82 msgid "Error while saving report" msgstr "Error al guardar el informe" -#: lib/graphql/resolvers/report.ex:102 #, elixir-format +#: lib/graphql/resolvers/report.ex:102 msgid "Error while updating report" msgstr "Error al actualizar el informe" -#: lib/graphql/resolvers/participant.ex:131 #, elixir-format +#: lib/graphql/resolvers/participant.ex:131 msgid "Event id not found" msgstr "ID de evento no encontrado" -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 #, elixir-format +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Evento no encontrado" +#, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 -#, elixir-format +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "El evento con este ID%{id} no existe" -#: lib/graphql/resolvers/participant.ex:103 #, elixir-format +#: lib/graphql/resolvers/participant.ex:103 msgid "Internal Error" msgstr "Error interno" -#: lib/graphql/resolvers/discussion.ex:225 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:225 msgid "No discussion with ID %{id}" msgstr "Sin discusión con ID%{id}" +#, elixir-format #: lib/graphql/resolvers/todos.ex:80 lib/graphql/resolvers/todos.ex:107 #: lib/graphql/resolvers/todos.ex:179 lib/graphql/resolvers/todos.ex:208 lib/graphql/resolvers/todos.ex:237 -#, elixir-format msgid "No profile found for user" msgstr "No se encontró perfil para el usuario" -#: lib/graphql/resolvers/feed_token.ex:64 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:64 msgid "No such feed token" msgstr "No existe tal token de alimentación" -#: lib/graphql/resolvers/participant.ex:259 #, elixir-format +#: lib/graphql/resolvers/participant.ex:259 msgid "Participant already has role %{role}" msgstr "El participante ya tiene el rol%{role}" +#, elixir-format #: lib/graphql/resolvers/participant.ex:187 #: lib/graphql/resolvers/participant.ex:220 lib/graphql/resolvers/participant.ex:263 -#, elixir-format msgid "Participant not found" msgstr "Participante no encontrado" -#: lib/graphql/resolvers/person.ex:32 #, elixir-format +#: lib/graphql/resolvers/person.ex:32 msgid "Person with ID %{id} not found" msgstr "Persona con ID%{id} no encontrada" -#: lib/graphql/resolvers/person.ex:56 #, elixir-format +#: lib/graphql/resolvers/person.ex:56 msgid "Person with username %{username} not found" msgstr "Persona con nombre de usuario %{username} no encontrada" -#: lib/graphql/resolvers/post.ex:169 lib/graphql/resolvers/post.ex:203 #, elixir-format +#: lib/graphql/resolvers/post.ex:169 lib/graphql/resolvers/post.ex:203 msgid "Post ID is not a valid ID" msgstr "La ID de publicación no es válida" -#: lib/graphql/resolvers/post.ex:172 lib/graphql/resolvers/post.ex:206 #, elixir-format +#: lib/graphql/resolvers/post.ex:172 lib/graphql/resolvers/post.ex:206 msgid "Post doesn't exist" msgstr "La publicación no existe" -#: lib/graphql/resolvers/member.ex:82 #, elixir-format +#: lib/graphql/resolvers/member.ex:82 msgid "Profile invited doesn't exist" msgstr "El perfil invitado no existe" -#: lib/graphql/resolvers/member.ex:91 lib/graphql/resolvers/member.ex:95 #, elixir-format +#: lib/graphql/resolvers/member.ex:91 lib/graphql/resolvers/member.ex:95 msgid "Profile is already a member of this group" msgstr "Perfil ya es miembro de este grupo" +#, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 -#, elixir-format msgid "Profile is not member of group" msgstr "El perfil no es miembro del grupo" -#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/person.ex:233 #, elixir-format +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/person.ex:233 msgid "Profile not found" msgstr "Perfil no encontrado" -#: lib/graphql/resolvers/report.ex:40 #, elixir-format +#: lib/graphql/resolvers/report.ex:40 msgid "Report not found" msgstr "Informe no encontrado" -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 #, elixir-format +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "El recurso no existe" -#: lib/graphql/resolvers/participant.ex:124 #, elixir-format +#: lib/graphql/resolvers/participant.ex:124 msgid "The event has already reached its maximum capacity" msgstr "El evento ya alcanzó su capacidad máxima" -#: lib/graphql/resolvers/participant.ex:283 #, elixir-format +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "Este token no es válido" -#: lib/graphql/resolvers/todos.ex:176 lib/graphql/resolvers/todos.ex:243 #, elixir-format +#: lib/graphql/resolvers/todos.ex:176 lib/graphql/resolvers/todos.ex:243 msgid "Todo doesn't exist" msgstr "Todo no existe" +#, elixir-format #: lib/graphql/resolvers/todos.ex:77 lib/graphql/resolvers/todos.ex:211 #: lib/graphql/resolvers/todos.ex:240 -#, elixir-format msgid "Todo list doesn't exist" msgstr "La lista de tareas pendientes no existe" -#: lib/graphql/resolvers/feed_token.ex:73 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:73 msgid "Token does not exist" msgstr "El token no existe" -#: lib/graphql/resolvers/feed_token.ex:67 lib/graphql/resolvers/feed_token.ex:70 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:67 lib/graphql/resolvers/feed_token.ex:70 msgid "Token is not a valid UUID" msgstr "El token no es un UUID válido" -#: lib/graphql/error.ex:96 lib/graphql/resolvers/person.ex:415 #, elixir-format +#: lib/graphql/error.ex:96 lib/graphql/resolvers/person.ex:415 msgid "User not found" msgstr "Usuario no encontrado" -#: lib/graphql/resolvers/person.ex:310 #, elixir-format +#: lib/graphql/resolvers/person.ex:310 msgid "You already have a profile for this user" msgstr "Ya tienes un perfil para este usuario" -#: lib/graphql/resolvers/participant.ex:134 #, elixir-format +#: lib/graphql/resolvers/participant.ex:134 msgid "You are already a participant of this event" msgstr "Ya eres participante de este evento" -#: lib/graphql/resolvers/member.ex:85 #, elixir-format +#: lib/graphql/resolvers/member.ex:85 msgid "You are not a member of this group" msgstr "no eres un miembro de este grupo" -#: lib/graphql/resolvers/member.ex:155 #, elixir-format +#: lib/graphql/resolvers/member.ex:155 msgid "You are not a moderator or admin for this group" msgstr "No eres moderador ni administrador de este grupo" -#: lib/graphql/resolvers/comment.ex:59 #, elixir-format +#: lib/graphql/resolvers/comment.ex:59 msgid "You are not allowed to create a comment if not connected" msgstr "No está permitido crear un comentario si no está conectado" -#: lib/graphql/resolvers/feed_token.ex:41 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:41 msgid "You are not allowed to create a feed token if not connected" msgstr "No puede crear un token de feed si no está conectado" -#: lib/graphql/resolvers/comment.ex:133 #, elixir-format +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "No puede eliminar un comentario si no está conectado" -#: lib/graphql/resolvers/feed_token.ex:82 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:82 msgid "You are not allowed to delete a feed token if not connected" msgstr "No puede eliminar un token de feed si no está conectado" -#: lib/graphql/resolvers/comment.ex:93 #, elixir-format +#: lib/graphql/resolvers/comment.ex:93 msgid "You are not allowed to update a comment if not connected" msgstr "No se le permite actualizar un comentario si no está conectado" +#, elixir-format #: lib/graphql/resolvers/participant.ex:181 #: lib/graphql/resolvers/participant.ex:214 -#, elixir-format msgid "You can't leave event because you're the only event creator participant" msgstr "" "No puedes abandonar el evento porque eres el único participante creador del " "evento" -#: lib/graphql/resolvers/member.ex:159 #, elixir-format +#: lib/graphql/resolvers/member.ex:159 msgid "You can't set yourself to a lower member role for this group because you are the only administrator" msgstr "" "No puede establecerse en un rol de miembro inferior para este grupo porque " "es el único administrador" -#: lib/graphql/resolvers/comment.ex:121 #, elixir-format +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "No puedes borrar este comentario" -#: lib/graphql/resolvers/event.ex:375 #, elixir-format +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "No puedes borrar este evento" -#: lib/graphql/resolvers/member.ex:88 #, elixir-format +#: lib/graphql/resolvers/member.ex:88 msgid "You cannot invite to this group" msgstr "No puedes invitar a este grupo" -#: lib/graphql/resolvers/feed_token.ex:76 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:76 msgid "You don't have permission to delete this token" msgstr "No tienes permiso para eliminar este token" -#: lib/graphql/resolvers/admin.ex:54 #, elixir-format +#: lib/graphql/resolvers/admin.ex:54 msgid "You need to be logged-in and a moderator to list action logs" msgstr "" "Debe iniciar sesión y un moderador para enumerar los registros de acción" -#: lib/graphql/resolvers/report.ex:28 #, elixir-format +#: lib/graphql/resolvers/report.ex:28 msgid "You need to be logged-in and a moderator to list reports" msgstr "Debe iniciar sesión y un moderador para enumerar los informes" -#: lib/graphql/resolvers/report.ex:107 #, elixir-format +#: lib/graphql/resolvers/report.ex:107 msgid "You need to be logged-in and a moderator to update a report" msgstr "Debe iniciar sesión y ser un moderador para actualizar un informe" -#: lib/graphql/resolvers/report.ex:45 #, elixir-format +#: lib/graphql/resolvers/report.ex:45 msgid "You need to be logged-in and a moderator to view a report" msgstr "Debe iniciar sesión y ser un moderador para actualizar un informe" -#: lib/graphql/resolvers/admin.ex:246 #, elixir-format +#: lib/graphql/resolvers/admin.ex:246 msgid "You need to be logged-in and an administrator to access admin settings" msgstr "" "Debe iniciar sesión y ser administrador para acceder a la configuración de " "administrador" -#: lib/graphql/resolvers/admin.ex:230 #, elixir-format +#: lib/graphql/resolvers/admin.ex:230 msgid "You need to be logged-in and an administrator to access dashboard statistics" msgstr "" "Debe iniciar sesión y ser administrador para acceder a las estadísticas del " "panel" -#: lib/graphql/resolvers/admin.ex:272 #, elixir-format +#: lib/graphql/resolvers/admin.ex:272 msgid "You need to be logged-in and an administrator to save admin settings" msgstr "" "Debe iniciar sesión y ser administrador para acceder a las estadísticas del " "panel" -#: lib/graphql/resolvers/discussion.ex:90 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:90 msgid "You need to be logged-in to access discussions" msgstr "Debe iniciar sesión para acceder a las discusiones" -#: lib/graphql/resolvers/resource.ex:96 #, elixir-format +#: lib/graphql/resolvers/resource.ex:96 msgid "You need to be logged-in to access resources" msgstr "Debes iniciar sesión para acceder a los recursos" -#: lib/graphql/resolvers/event.ex:295 #, elixir-format +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "Debes iniciar sesión para crear eventos" -#: lib/graphql/resolvers/post.ex:141 #, elixir-format +#: lib/graphql/resolvers/post.ex:141 msgid "You need to be logged-in to create posts" msgstr "Debes iniciar sesión para crear publicaciones" -#: lib/graphql/resolvers/report.ex:79 #, elixir-format +#: lib/graphql/resolvers/report.ex:79 msgid "You need to be logged-in to create reports" msgstr "Debe iniciar sesión para crear informes" -#: lib/graphql/resolvers/resource.ex:136 #, elixir-format +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "Debe iniciar sesión para crear recursos" -#: lib/graphql/resolvers/event.ex:384 #, elixir-format +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "Debe iniciar sesión para eliminar un evento" -#: lib/graphql/resolvers/post.ex:214 #, elixir-format +#: lib/graphql/resolvers/post.ex:214 msgid "You need to be logged-in to delete posts" msgstr "Debes iniciar sesión para eliminar publicaciones" -#: lib/graphql/resolvers/resource.ex:203 #, elixir-format +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "Debes iniciar sesión para eliminar recursos" -#: lib/graphql/resolvers/participant.ex:108 #, elixir-format +#: lib/graphql/resolvers/participant.ex:108 msgid "You need to be logged-in to join an event" msgstr "Debes iniciar sesión para eliminar recursos" -#: lib/graphql/resolvers/participant.ex:225 #, elixir-format +#: lib/graphql/resolvers/participant.ex:225 msgid "You need to be logged-in to leave an event" msgstr "Debes iniciar sesión para salir de un evento" -#: lib/graphql/resolvers/event.ex:341 #, elixir-format +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "Debe iniciar sesión para actualizar un evento" -#: lib/graphql/resolvers/post.ex:180 #, elixir-format +#: lib/graphql/resolvers/post.ex:180 msgid "You need to be logged-in to update posts" msgstr "Debes iniciar sesión para actualizar las publicaciones" -#: lib/graphql/resolvers/resource.ex:173 #, elixir-format +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "Debes iniciar sesión para actualizar los recursos" -#: lib/graphql/resolvers/resource.ex:232 #, elixir-format +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "Debe iniciar sesión para ver una vista previa del recurso" -#: lib/graphql/resolvers/resource.ex:128 #, elixir-format +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "El recurso principal no pertenece a este grupo" -#: lib/mobilizon/users/user.ex:113 #, elixir-format +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "La contraseña elegida es demasiado corta." -#: lib/mobilizon/users/user.ex:141 #, elixir-format +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "El token de registro ya está en uso, esto parece un problema de nuestra " "parte." -#: lib/mobilizon/users/user.ex:108 #, elixir-format +#: lib/mobilizon/users/user.ex:108 msgid "This email is already used." msgstr "Este correo electrónico ya está en uso." -#: lib/graphql/error.ex:97 #, elixir-format +#: lib/graphql/error.ex:97 msgid "Post not found" msgstr "Informe no encontrado" -#: lib/graphql/error.ex:84 #, elixir-format +#: lib/graphql/error.ex:84 msgid "Invalid arguments passed" msgstr "Se pasaron argumentos no válidos" -#: lib/graphql/error.ex:90 #, elixir-format +#: lib/graphql/error.ex:90 msgid "Invalid credentials" msgstr "Credenciales no válidas" -#: lib/graphql/error.ex:88 #, elixir-format +#: lib/graphql/error.ex:88 msgid "Reset your password to login" msgstr "Restablezca su contraseña para iniciar sesión" -#: lib/graphql/error.ex:95 lib/graphql/error.ex:100 #, elixir-format +#: lib/graphql/error.ex:95 lib/graphql/error.ex:100 msgid "Resource not found" msgstr "Recurso no encontrado" -#: lib/graphql/error.ex:102 #, elixir-format +#: lib/graphql/error.ex:102 msgid "Something went wrong" msgstr "Algo salió mal" -#: lib/graphql/error.ex:83 #, elixir-format +#: lib/graphql/error.ex:83 msgid "Unknown Resource" msgstr "Recurso desconocido" -#: lib/graphql/error.ex:93 #, elixir-format +#: lib/graphql/error.ex:93 msgid "You don't have permission to do this" msgstr "No tienes permiso para hacer esto" -#: lib/graphql/error.ex:85 #, elixir-format +#: lib/graphql/error.ex:85 msgid "You need to be logged in" msgstr "Debes iniciar sesión" -#: lib/graphql/resolvers/member.ex:116 #, elixir-format +#: lib/graphql/resolvers/member.ex:116 msgid "You can't accept this invitation with this profile." msgstr "No puedes aceptar esta invitación con este perfil." -#: lib/graphql/resolvers/member.ex:137 #, elixir-format +#: lib/graphql/resolvers/member.ex:137 msgid "You can't reject this invitation with this profile." msgstr "No puedes rechazar esta invitación con este perfil." -#: lib/graphql/resolvers/media.ex:71 #, elixir-format +#: lib/graphql/resolvers/media.ex:71 msgid "File doesn't have an allowed MIME type." msgstr "El archivo no tiene un tipo MIME permitido." -#: lib/graphql/resolvers/group.ex:195 #, elixir-format +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "El perfil no es miembro del grupo" -#: lib/graphql/resolvers/event.ex:330 #, elixir-format +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "No puedes borrar este evento." -#: lib/graphql/resolvers/event.ex:333 #, elixir-format +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "No puedes rechazar esta invitación con este perfil." -#: lib/graphql/resolvers/member.ex:140 #, elixir-format +#: lib/graphql/resolvers/member.ex:140 msgid "This invitation doesn't exist." msgstr "Esta invitación no existe." -#: lib/graphql/resolvers/member.ex:185 #, elixir-format +#: lib/graphql/resolvers/member.ex:185 msgid "This member already has been rejected." msgstr "Este miembro ya ha sido rechazado." -#: lib/graphql/resolvers/member.ex:192 #, elixir-format +#: lib/graphql/resolvers/member.ex:192 msgid "You don't have the right to remove this member." msgstr "No tiene derecho a eliminar este miembro." -#: lib/mobilizon/actors/actor.ex:349 #, elixir-format +#: lib/mobilizon/actors/actor.ex:349 msgid "This username is already taken." msgstr "Este nombre de usuario ya está en uso." -#: lib/graphql/resolvers/discussion.ex:87 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:87 msgid "You must provide either an ID or a slug to access a discussion" msgstr "" "Debe proporcionar una identificación o un slug para acceder a una discusión" -#: lib/graphql/resolvers/event.ex:284 #, elixir-format +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "El perfil del organizador no es propiedad del usuario" -#: lib/graphql/resolvers/participant.ex:93 #, elixir-format +#: lib/graphql/resolvers/participant.ex:93 msgid "Profile ID provided is not the anonymous profile one" msgstr "El ID de perfil proporcionado no es el del perfil anónimo" -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 -#: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 #, elixir-format +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 +#: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "La imagen proporcionada es demasiado pesada" -#: lib/web/views/utils.ex:34 #, elixir-format +#: lib/web/views/utils.ex:34 msgid "Index file not found. You need to recompile the front-end." msgstr "No se encontró el archivo de índice. Necesita recompilar el front-end." -#: lib/graphql/resolvers/resource.ex:125 #, elixir-format +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "Error al crear el recurso" -#: lib/graphql/resolvers/user.ex:479 #, elixir-format +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "Token de activación no válido" -#: lib/graphql/resolvers/resource.ex:222 #, elixir-format +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "No se pueden recuperar los detalles del recurso de esta URL." -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 #, elixir-format +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "El perfil de moderador proporcionado no tiene permiso para este evento" -#: lib/graphql/resolvers/event.ex:278 #, elixir-format +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" "El perfil del organizador no tiene permiso para crear un evento en nombre de " "este grupo" -#: lib/graphql/resolvers/event.ex:321 #, elixir-format +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" "Este perfil no tiene permiso para actualizar un evento en nombre de este " "grupo" -#: lib/graphql/resolvers/user.ex:163 #, elixir-format +#: lib/graphql/resolvers/user.ex:163 msgid "Your e-mail has been denied registration or uses a disallowed e-mail provider" msgstr "" "A su correo electrónico se le ha denegado el registro o utiliza un proveedor " "de correo electrónico no autorizado" -#: lib/graphql/resolvers/comment.ex:128 #, elixir-format +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Evento no encontrado" -#: lib/graphql/resolvers/discussion.ex:129 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:129 msgid "Error while creating a discussion" msgstr "Error al crear el recurso" -#: lib/graphql/resolvers/user.ex:602 #, elixir-format +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "Error al actualizar el informe" -#: lib/graphql/resolvers/person.ex:307 #, elixir-format +#: lib/graphql/resolvers/person.ex:307 msgid "Error while uploading pictures" msgstr "Error al actualizar el informe" -#: lib/graphql/resolvers/participant.ex:190 #, elixir-format +#: lib/graphql/resolvers/participant.ex:190 msgid "Failed to leave the event" msgstr "No se pudo salir del evento" -#: lib/graphql/resolvers/group.ex:191 #, elixir-format +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "No se pudo actualizar el grupo" -#: lib/graphql/resolvers/user.ex:456 #, elixir-format +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "No se pudo actualizar el correo electrónico del usuario" -#: lib/graphql/resolvers/user.ex:475 #, elixir-format +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "No se puede validar al usuario" -#: lib/graphql/resolvers/participant.ex:146 #, elixir-format +#: lib/graphql/resolvers/participant.ex:146 msgid "The anonymous actor ID is invalid" msgstr "El ID de actor anónimo no es válido" -#: lib/graphql/resolvers/resource.ex:161 #, elixir-format +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "Error desconocido al actualizar el recurso" -#: lib/graphql/resolvers/comment.ex:84 #, elixir-format +#: lib/graphql/resolvers/comment.ex:84 msgid "You are not the comment creator" msgstr "No eres el creador de comentarios" -#: lib/graphql/resolvers/user.ex:404 #, elixir-format +#: lib/graphql/resolvers/user.ex:404 msgid "You cannot change your password." msgstr "No puede cambiar su contraseña." -#: lib/graphql/resolvers/participant.ex:310 #, elixir-format +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "Formato incompatible" -#: lib/graphql/resolvers/participant.ex:322 #, elixir-format +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "Una dependencia necesaria para exportar a %{formato} no está instalada" -#: lib/graphql/resolvers/participant.ex:330 #, elixir-format +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "Ocurrió un error al guardar la exportación" -#: lib/web/controllers/export_controller.ex:30 #, elixir-format +#: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" "La exportación al formato %{format} no está habilitada en esta instancia" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "Error desconocido al actualizar el recurso" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/fi/LC_MESSAGES/default.po b/priv/gettext/fi/LC_MESSAGES/default.po index 6acc8bcda..de7d59f92 100644 --- a/priv/gettext/fi/LC_MESSAGES/default.po +++ b/priv/gettext/fi/LC_MESSAGES/default.po @@ -350,12 +350,12 @@ msgid "What information do we collect?" msgstr "Mitä tietoja kerätään?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon palvelimella %{instance}: vahvista sähköpostiosoitteesi" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon palvelimella %{instance}: sähköpostiosoite vaihdettu" @@ -413,7 +413,7 @@ msgid "View the event on: %{link}" msgstr "Katso päivitetty tapahtuma: %{linkki}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{inviter} kutsui sinut ryhmään %{group}" @@ -1244,7 +1244,7 @@ msgid "So long, and thanks for the fish!" msgstr "Näkemiin ja kiitos kaloista!" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Sinut on poistettu ryhmästä %{group}" @@ -1299,7 +1299,7 @@ msgstr "" "(%{group_address}). Et ole enää tämän ryhmän jäsen." #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "Ryhmä %{group} on estetty palvelimella %{instance}" @@ -1644,17 +1644,17 @@ msgid "%{name}'s feed" msgstr "%{name} – syöte" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "%{actor} – yksityistapahtumien syöte palvelimella %{instance}" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "%{actor} – julkisten tapahtumien syöte palvelimella %{instance}" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "%{email}-syöte palvelimella %{instance}" @@ -1681,7 +1681,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Mobilizon-palvelin näyttää olevan väliakaisesti alhaalla." #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "Palvelimen %{instance} julkinen syöte" diff --git a/priv/gettext/fi/LC_MESSAGES/errors.po b/priv/gettext/fi/LC_MESSAGES/errors.po index a09000d71..2c84196a3 100644 --- a/priv/gettext/fi/LC_MESSAGES/errors.po +++ b/priv/gettext/fi/LC_MESSAGES/errors.po @@ -100,28 +100,28 @@ msgid "Cannot refresh the token" msgstr "Merkkiä ei voi päivittää" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "Nykyinen profiili ei kuulu tähän ryhmään" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "Nykyinen profiili ei ole valitun ryhmän ylläpitäjä" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Käyttäjän asetusten tallennuksessa tapahtui virhe" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Ryhmää ei löydy" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Tunnuksella %{id} ei löydy ryhmää" @@ -132,7 +132,7 @@ msgstr "" "Kirjautuminen epäonnistui - joko sähköpostiosoitteesi tai salasana on väärin." #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Jäsentä ei löydy" @@ -169,12 +169,12 @@ msgid "The current password is invalid" msgstr "Nykyinen salasana ei kelpaa" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "Uusi sähköpostiosoite ei vaikuta kelvolliselta" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "Uuden sähköpostiosoitteen on poikettava vanhasta" @@ -184,8 +184,8 @@ msgid "The new password must be different" msgstr "Uuden salasanan on poikettava vanhasta" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "Annettu salasana on epäkelpo" @@ -212,37 +212,37 @@ msgid "Unable to validate user" msgstr "Käyttäjää ei voi vahvistaa" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "Käyttäjä on jo poistettu käytöstä" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "Pyydetty käyttäjä ei ole kirjautuneena sisään" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Olet jo tämän ryhmän jäsen" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "Et voi poistua ryhmästä, koska olet sen ainoa ylläpitäjä" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "Et voi liittyä tähän ryhmään" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "Voit nähdä ryhmäluettelon vain, jos olet moderaattori." #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "Sähköpostiosoitteen voi vaihtaa vain sisäänkirjautuneena" @@ -252,27 +252,27 @@ msgid "You need to be logged-in to change your password" msgstr "Salasanan voi vaihtaa vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "Ryhmän voi poistaa vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "Voit poistaa tilisi vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "Voit liittyä ryhmään vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "Voit poistua ryhmästä vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "Voit päivittää ryhmää vain sisäänkirjautuneena" @@ -348,7 +348,7 @@ msgid "Cannot remove the last identity of a user" msgstr "Käyttäjän viimeistä identiteettiä ei voi poistaa" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "Kommentti on jo poistettu" @@ -373,15 +373,15 @@ msgid "Event id not found" msgstr "Tapahtumatunnistetta ei löydy" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Tapahtumaa ei löydy" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "Tunnisteella %{id} ei ole tapahtumaa" @@ -449,8 +449,8 @@ msgstr "Profiili on jo ryhmän jäsen" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -467,7 +467,7 @@ msgid "Report not found" msgstr "Raporttia ei löydy" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "Resurssia ei ole" @@ -477,7 +477,7 @@ msgid "The event has already reached its maximum capacity" msgstr "Tapahtuma on jo täynnä" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "Epäkelpo merkki" @@ -538,7 +538,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "Ilman yhteyttä ei voi luoda syötemerkkiä" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "Ilman yhteyttä ei voi poistaa kommenttia" @@ -567,12 +567,12 @@ msgstr "" "ylläpitäjä" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "Et voi poistaa kommenttia" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "Et voi poistaa tapahtumaa" @@ -632,7 +632,7 @@ msgid "You need to be logged-in to access resources" msgstr "Pääsy resursseihin vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "Tapahtumien luonti vain sisäänkirjautuneena" @@ -647,12 +647,12 @@ msgid "You need to be logged-in to create reports" msgstr "Raporttien luonti vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "Resurssien luonti vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "Tapahtuman poisto vain sisäänkirjautuneena" @@ -662,7 +662,7 @@ msgid "You need to be logged-in to delete posts" msgstr "Julkaisujen poisto vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "Resurssien poisto vain sisäänkirjautuneena" @@ -677,7 +677,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Tapahtumasta poistuminen vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "Tapahtuman päivittäminen vain sisäänkirjautuneena" @@ -687,27 +687,27 @@ msgid "You need to be logged-in to update posts" msgstr "Julkaisujen päivittäminen vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "Resurssien päivittäminen vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "Resurssin esikatselu vain sisäänkirjautuneena" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "Ylätason resurssi ei kuulu tähän ryhmään" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "Valittu salasana on liian lyhyt." #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "Rekisteröintimerkki on jo käytössä. Vaikuttaa palvelinpään virheeltä." @@ -777,17 +777,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "Tiedostolla ei ole sallittua MIME-tyyppiä." #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "Profiili ei ole ryhmän ylläpitäjä" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "Et voi muokata tapahtumaa." #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "Et voi yhdistää tapahtumaa tähän profiiliin." @@ -817,7 +817,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "Keskusteluun pääsemiseen vaaditaan tunniste tai polkutunnus" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "Järjestäjän profiili ei ole käyttäjän hallussa" @@ -827,7 +827,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "Annettu profiilitunniste ei kuulu anonyymille profiilille" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "Toimitettu kuva on liian suuri" @@ -838,33 +838,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "Indeksitiedostoa ei löydy. Kokoa käyttöliittymä uudelleen." #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "Virhe raporttia tallennettaessa" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "Virheellinen aktivointimerkki" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "Resurssin tietoja ei voida hakea tästä URL-osoitteesta." #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Annetulla moderaattoriprofiililla ei ole oikeuksia tähän tapahtumaan" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -874,7 +874,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Tapahtumaa ei löydy" @@ -884,7 +884,7 @@ msgid "Error while creating a discussion" msgstr "Virhe raporttia tallennettaessa" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "Virhe raporttia päivitettäessä" @@ -899,17 +899,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "Käyttäjää ei voi vahvistaa" @@ -919,7 +919,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -934,17 +934,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -952,3 +952,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/fr/LC_MESSAGES/default.po b/priv/gettext/fr/LC_MESSAGES/default.po index 583e34177..9eaa7190e 100644 --- a/priv/gettext/fr/LC_MESSAGES/default.po +++ b/priv/gettext/fr/LC_MESSAGES/default.po @@ -325,12 +325,12 @@ msgid "What information do we collect?" msgstr "Quelles informations collectons-nous ?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon sur %{instance} : confirmez votre adresse email" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon sur %{instance} : adresse email modifiée" @@ -388,7 +388,7 @@ msgid "View the event on: %{link}" msgstr "Voir l'événement mis à jour sur : %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "Vous avez été invité par %{inviter} à rejoindre le groupe %{group}" @@ -1061,7 +1061,7 @@ msgid "So long, and thanks for the fish!" msgstr "Salut, et encore merci pour le poisson !" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Vous avez été enlevé du groupe %{group}" @@ -1104,7 +1104,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "L'équipe de modération de votre instance a décidé de suspendre %{group_name} (%{group_address}). Vous n'êtes désormais plus membre de ce groupe." #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "Le groupe %{group} a été suspendu sur %{instance}" @@ -1366,17 +1366,17 @@ msgid "%{name}'s feed" msgstr "Flux de %{name}" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "Flux privé des événements de %{actor} sur %{instance}" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "Flux public des événements de %{actor} sur %{instance}" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "Flux pour %{email} sur %{instance}" @@ -1401,7 +1401,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Le serveur Mobilizon %{instance} semble être temporairement hors-service." #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "Flux public pour %{instance}" diff --git a/priv/gettext/fr/LC_MESSAGES/errors.po b/priv/gettext/fr/LC_MESSAGES/errors.po index 80ea8f02c..af13885fb 100644 --- a/priv/gettext/fr/LC_MESSAGES/errors.po +++ b/priv/gettext/fr/LC_MESSAGES/errors.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-10-04 11:40+0200\n" +"PO-Revision-Date: 2021-10-11 17:40+0200\n" "Last-Translator: Vincent Finance <linuxmario@linuxmario.net>\n" "Language-Team: French <https://weblate.framasoft.org/projects/mobilizon/backend-errors/fr/>\n" "Language: fr\n" @@ -100,24 +100,24 @@ msgstr "doit être égal à %{number}" msgid "Cannot refresh the token" msgstr "Impossible de rafraîchir le jeton" -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "Le profil actuel n'est pas un membre de ce groupe" -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "Le profil actuel n'est pas un·e administrateur·ice du groupe sélectionné" -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Erreur lors de la sauvegarde des paramètres utilisateur" -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 lib/graphql/resolvers/group.ex:256 -#: lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 lib/graphql/resolvers/group.ex:274 +#: lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Groupe non trouvé" -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Groupe avec l'ID %{id} non trouvé" @@ -125,7 +125,7 @@ msgstr "Groupe avec l'ID %{id} non trouvé" msgid "Impossible to authenticate, either your email or password are invalid." msgstr "Impossible de s'authentifier, votre adresse e-mail ou bien votre mot de passe sont invalides." -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Membre non trouvé" @@ -155,11 +155,11 @@ msgstr "Les inscriptions ne sont pas ouvertes" msgid "The current password is invalid" msgstr "Le mot de passe actuel est invalid" -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "La nouvelle adresse e-mail ne semble pas être valide" -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "La nouvelle adresse e-mail doit être différente" @@ -167,7 +167,7 @@ msgstr "La nouvelle adresse e-mail doit être différente" msgid "The new password must be different" msgstr "Le nouveau mot de passe doit être différent" -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "Le mot de passe fourni est invalide" @@ -189,31 +189,31 @@ msgstr "Cet·te utilisateur·ice a été désactivé·e" msgid "Unable to validate user" msgstr "Impossible de valider l'utilisateur·ice" -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "L'utilisateur·ice est déjà désactivé·e" -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "L'utilisateur·ice demandé·e n'est pas connecté·e" -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Vous êtes déjà membre de ce groupe" -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "Vous ne pouvez pas quitter ce groupe car vous en êtes le ou la seul·e administrateur·ice" -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "Vous ne pouvez pas rejoindre ce groupe" -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "Vous ne pouvez pas lister les groupes sauf à être modérateur·ice." -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "Vous devez être connecté·e pour changer votre adresse e-mail" @@ -221,23 +221,23 @@ msgstr "Vous devez être connecté·e pour changer votre adresse e-mail" msgid "You need to be logged-in to change your password" msgstr "Vous devez être connecté·e pour changer votre mot de passe" -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "Vous devez être connecté·e pour supprimer un groupe" -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "Vous devez être connecté·e pour supprimer votre compte" -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "Vous devez être connecté·e pour rejoindre un groupe" -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "Vous devez être connecté·e pour quitter un groupe" -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "Vous devez être connecté·e pour mettre à jour un groupe" @@ -297,7 +297,7 @@ msgstr "Impossible de supprimer le ou la dernier·ère administrateur·ice d'un msgid "Cannot remove the last identity of a user" msgstr "Impossible de supprimer le dernier profil d'un·e utilisateur·ice" -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "Le commentaire est déjà supprimé" @@ -317,12 +317,12 @@ msgstr "Erreur lors de la mise à jour du signalement" msgid "Event id not found" msgstr "ID de l'événement non trouvé" -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Événement non trouvé" #: lib/graphql/resolvers/participant.ex:87 lib/graphql/resolvers/participant.ex:128 -#: lib/graphql/resolvers/participant.ex:155 lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:155 lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "L'événement avec cet ID %{id} n'existe pas" @@ -377,8 +377,8 @@ msgid "Profile is already a member of this group" msgstr "Ce profil est déjà membre de ce groupe" #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 lib/graphql/resolvers/post.ex:209 -#: lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 lib/graphql/resolvers/resource.ex:164 -#: lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 lib/graphql/resolvers/todos.ex:83 +#: lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 lib/graphql/resolvers/resource.ex:165 +#: lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 lib/graphql/resolvers/todos.ex:83 #: lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 lib/graphql/resolvers/todos.ex:214 #: lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -392,7 +392,7 @@ msgstr "Profile non trouvé" msgid "Report not found" msgstr "Groupe non trouvé" -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "La ressource n'existe pas" @@ -400,7 +400,7 @@ msgstr "La ressource n'existe pas" msgid "The event has already reached its maximum capacity" msgstr "L'événement a déjà atteint sa capacité maximale" -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "Ce jeton est invalide" @@ -448,7 +448,7 @@ msgstr "Vous n'êtes pas autorisé·e à créer un commentaire si non connecté msgid "You are not allowed to create a feed token if not connected" msgstr "Vous n'êtes pas autorisé·e à créer un jeton de flux si non connecté·e" -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "Vous n'êtes pas autorisé·e à supprimer un commentaire si non connecté·e" @@ -470,11 +470,11 @@ msgstr "" "Vous ne pouvez pas vous définir avec un rôle de membre inférieur pour ce groupe car vous en êtes le ou la seul·e " "administrateur·ice" -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "Vous ne pouvez pas supprimer ce commentaire" -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "Vous ne pouvez pas supprimer cet événement" @@ -522,7 +522,7 @@ msgstr "Vous devez être connecté·e pour accéder aux discussions" msgid "You need to be logged-in to access resources" msgstr "Vous devez être connecté·e pour supprimer un groupe" -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "Vous devez être connecté·e pour créer des événements" @@ -534,11 +534,11 @@ msgstr "Vous devez être connecté·e pour quitter un groupe" msgid "You need to be logged-in to create reports" msgstr "Vous devez être connecté·e pour quitter un groupe" -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "Vous devez être connecté·e pour quitter un groupe" -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "Vous devez être connecté·e pour supprimer un groupe" @@ -546,7 +546,7 @@ msgstr "Vous devez être connecté·e pour supprimer un groupe" msgid "You need to be logged-in to delete posts" msgstr "Vous devez être connecté·e pour supprimer un groupe" -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "Vous devez être connecté·e pour supprimer un groupe" @@ -558,7 +558,7 @@ msgstr "Vous devez être connecté·e pour rejoindre un événement" msgid "You need to be logged-in to leave an event" msgstr "Vous devez être connecté·e pour quitter un groupe" -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "Vous devez être connecté·e pour mettre à jour un groupe" @@ -566,23 +566,23 @@ msgstr "Vous devez être connecté·e pour mettre à jour un groupe" msgid "You need to be logged-in to update posts" msgstr "Vous devez être connecté·e pour mettre à jour un groupe" -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "Vous devez être connecté·e pour mettre à jour un groupe" -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "Vous devez être connecté·e pour supprimer un groupe" -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "La ressource parente n'appartient pas à ce groupe" -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "Le mot de passe choisi est trop court." -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "Le jeton d'inscription est déjà utilisé, cela ressemble à un problème de notre côté." @@ -638,15 +638,15 @@ msgstr "Vous ne pouvez pas rejeter cette invitation avec ce profil." msgid "File doesn't have an allowed MIME type." msgstr "Le fichier n'a pas un type MIME autorisé." -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "Le profil n'est pas administrateur·ice pour le groupe" -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "Vous ne pouvez pas éditer cet événement." -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "Vous ne pouvez pas attribuer cet événement à ce profil." @@ -670,7 +670,7 @@ msgstr "Cet identifiant est déjà pris." msgid "You must provide either an ID or a slug to access a discussion" msgstr "Vous devez fournir un ID ou bien un slug pour accéder à une discussion" -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "Le profil de l'organisateur·ice n'appartient pas à l'utilisateur·ice" @@ -678,7 +678,7 @@ msgstr "Le profil de l'organisateur·ice n'appartient pas à l'utilisateur·ice" msgid "Profile ID provided is not the anonymous profile one" msgstr "L'ID du profil fourni n'est pas celui du profil anonyme" -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 lib/graphql/resolvers/person.ex:148 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 lib/graphql/resolvers/person.ex:148 #: lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "L'image fournie est trop lourde" @@ -687,27 +687,27 @@ msgstr "L'image fournie est trop lourde" msgid "Index file not found. You need to recompile the front-end." msgstr "Fichier d'index non trouvé. Vous devez recompiler le front-end." -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "Erreur lors de la création de la resource" -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "Jeton d'activation invalide" -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "Impossible de récupérer les détails de la ressource depuis cette URL." -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Le profil modérateur fourni n'a pas de permissions sur cet événement" -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "Le profil de l'organisateur⋅ice n'a pas la permission de créer un événement au nom de ce groupe" -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "Ce profil n'a pas la permission de mettre à jour un événement au nom du groupe" @@ -715,7 +715,7 @@ msgstr "Ce profil n'a pas la permission de mettre à jour un événement au nom msgid "Your e-mail has been denied registration or uses a disallowed e-mail provider" msgstr "Votre adresse e-mail a été refusée à l'inscription ou bien utilise un fournisseur d'e-mail interdit" -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Commentaire non trouvé" @@ -723,7 +723,7 @@ msgstr "Commentaire non trouvé" msgid "Error while creating a discussion" msgstr "Erreur lors de la création de la discussion" -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "Erreur lors de la mise à jour des options linguistiques" @@ -735,15 +735,15 @@ msgstr "Erreur lors du téléversement des images" msgid "Failed to leave the event" msgstr "Impossible de quitter l'événement" -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "Impossible de mettre à jour le groupe" -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "Impossible de mettre à jour l'adresse e-mail de utilisateur" -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "Impossible de valider l'adresse e-mail de l'utilisateur·ice" @@ -751,7 +751,7 @@ msgstr "Impossible de valider l'adresse e-mail de l'utilisateur·ice" msgid "The anonymous actor ID is invalid" msgstr "L'ID de l'acteur anonyme est invalide" -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "Erreur inconnue lors de la mise à jour de la resource" @@ -763,18 +763,34 @@ msgstr "Vous n'êtes pas le ou la createur⋅ice du commentaire" msgid "You cannot change your password." msgstr "Vous ne pouvez pas changer votre mot de passe." -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "Format non supporté" -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "Une dépendance nécessaire pour exporter en %{format} n'est pas installée" -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "Une erreur est survenue lors de l'enregistrement de l'export" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "L'export au format %{format} n'est pas activé sur cette instance" + +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "Seul⋅es les administrateur⋅ices peuvent créer des groupes" + +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "Seuls les groupes peuvent créer des événements" + +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "Erreur inconnue lors de la création de l'événement" + +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "L'utilisateur ne peut changer son adresse e-mail" diff --git a/priv/gettext/gl/LC_MESSAGES/default.po b/priv/gettext/gl/LC_MESSAGES/default.po index 0de381d4d..30b68e112 100644 --- a/priv/gettext/gl/LC_MESSAGES/default.po +++ b/priv/gettext/gl/LC_MESSAGES/default.po @@ -352,12 +352,12 @@ msgid "What information do we collect?" msgstr "Que información recollemos?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon en %{instance}: confirma o enderezo de email" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon en %{instance}: email cambiado" @@ -415,7 +415,7 @@ msgid "View the event on: %{link}" msgstr "Ver o evento en: %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{inviter} convidoute a unirte ó grupo %{group}" @@ -1242,7 +1242,7 @@ msgid "So long, and thanks for the fish!" msgstr "Ata aquí, e grazas pola atención!" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Foches eliminada do grupo %{group}" @@ -1297,7 +1297,7 @@ msgstr "" "(%{group_address}). Xa non pertences a este grupo." #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "O grupo %{group} foi suspendido en %{instance}" @@ -1639,17 +1639,17 @@ msgid "%{name}'s feed" msgstr "fonte de %{name}" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "fonte dos eventos privados de %{actor} en %{instance}" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "fonte dos eventos públicos de %{actor} en %{instance}" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "Fonte para %{email} en %{instance}" @@ -1677,7 +1677,7 @@ msgstr "" "O servidor Mobilizon %{instance} semella estar temporalmente fóra de servizo." #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "Fonte pública de %{instance}" diff --git a/priv/gettext/gl/LC_MESSAGES/errors.po b/priv/gettext/gl/LC_MESSAGES/errors.po index 42bce0e10..b86ed9bfd 100644 --- a/priv/gettext/gl/LC_MESSAGES/errors.po +++ b/priv/gettext/gl/LC_MESSAGES/errors.po @@ -100,28 +100,28 @@ msgid "Cannot refresh the token" msgstr "Non puido actualizar o token" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "O perfil actual non é membro deste grupo" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "O perfil actual non é administrador do grupo seleccionado" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Erro ó gardar os axustes de usuaria" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Grupo non atopado" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Grupo con ID %{id} non atopado" @@ -132,7 +132,7 @@ msgstr "" "A autenticación non foi posible, o contrasinal ou o email non son correctos." #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Membro non atopado" @@ -169,12 +169,12 @@ msgid "The current password is invalid" msgstr "O contrasinal actual non é válido" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "O novo email non semella ser válido" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "O novo email ten que ser diferente" @@ -184,8 +184,8 @@ msgid "The new password must be different" msgstr "O novo contrasinal ten que ser diferente" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "O contrasinal escrito non é válido" @@ -212,37 +212,37 @@ msgid "Unable to validate user" msgstr "Non se puido validar a usuaria" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "A usuaria xa está desactivada" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "A usuaria solicitada non está conectada" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Xa es membro deste grupo" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "Non podes deixar este grupo porque es a única administradora" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "Non podes unirte a este grupo" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "Non podes facer listas de grupos porque non es moderadora." #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "Tes que estar conectada para poder cambiar o email" @@ -252,27 +252,27 @@ msgid "You need to be logged-in to change your password" msgstr "Tes que estar conectada para poder cambiar o contrasinal" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "Tes que estar conectada para poder eleminar un grupo" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "Tes que estar conectada para poder eliminar a conta" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "Tes que estar conectada para poder unirte a un grupo" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "Tes que estar conectada para poder deixar un grupo" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "Tes que estar conectada para poder actualizar un grupo" @@ -348,7 +348,7 @@ msgid "Cannot remove the last identity of a user" msgstr "Non se pode eliminar a última identidade dunha usuaria" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "O comentario xa foi eliminado" @@ -373,15 +373,15 @@ msgid "Event id not found" msgstr "Non se atopou o ID do evento" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Evento non atopado" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "Non existe un evento co ID %{id}" @@ -449,8 +449,8 @@ msgstr "O perfil xa é membro deste grupo" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -467,7 +467,7 @@ msgid "Report not found" msgstr "Denuncia non atopada" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "Non existe o recurso" @@ -477,7 +477,7 @@ msgid "The event has already reached its maximum capacity" msgstr "Este evento xa acadou a súa capacidade máxima" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "Este token non é válido" @@ -538,7 +538,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "Non tes permiso para crear un token da fonte se non estás conectada" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "Non tes permiso para eliminar un comentario se non estás conectada" @@ -567,12 +567,12 @@ msgstr "" "administradora" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "Non podes eliminar este comentario" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "Non podes eliminar este evento" @@ -640,7 +640,7 @@ msgid "You need to be logged-in to access resources" msgstr "Tes que estar conectada para acceder ós recursos" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "Tes que estar conectada para crear eventos" @@ -655,12 +655,12 @@ msgid "You need to be logged-in to create reports" msgstr "Tes que estar conectada para crear denuncias" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "Tes que estar conectada para crear recursos" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "Tes que estar conectada para eliminar un evento" @@ -670,7 +670,7 @@ msgid "You need to be logged-in to delete posts" msgstr "Tes que estar conectada para eliminar publicacións" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "Tes que estar conectada para eliminar recursos" @@ -685,7 +685,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Tes que estar conectada para saír dun evento" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "Tes que estar conectada para actualizar un evento" @@ -695,27 +695,27 @@ msgid "You need to be logged-in to update posts" msgstr "Tes que estar conectada para actualizar publicacións" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "Tes que estar conectada para actualizar recursos" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "Tes que estar conectada para ver vista previa dun recurso" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "O recurso relacionado non pertence a este grupo" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "O contrasinal elexido é demasiado curto." #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "O token de rexistro xa está a ser usado, semella un problema pola nosa parte." @@ -786,17 +786,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "O ficheiro non ten un tipo MIME permitido." #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "O perfil non é administrador do grupo" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "Non podes editar este evento." #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "Non podes atribuír este evento a este perfil." @@ -826,7 +826,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "Debes proporcionar ou ben un ID ou nome para acceder á conversa" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "O perfil da organización non pertence á usuaria" @@ -836,7 +836,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "O ID do perfil proporcionado non é o perfil anónimo" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "A imaxe proporcionada é demasiado grande (mb)" @@ -847,35 +847,35 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "Non se atopa o ficheiro Index. Tes que recompilar o front-end." #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "Erro ao crear o recurso" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "O token de activación non é válido" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "Non se puideron obter os detalles do recurso desde o URL." #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "O perfil da moderadora proporcionado non ten permisos neste evento" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" "O perfil do organizador non ten permiso para crear un evento en nome deste " "grupo" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" "Este perfil non ten permiso para actualizar un evento en nome deste grupo" @@ -888,7 +888,7 @@ msgstr "" "non permitido" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Evento non atopado" @@ -898,7 +898,7 @@ msgid "Error while creating a discussion" msgstr "Erro ao crear o recurso" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "Erro ó actualizar a denuncia" @@ -913,17 +913,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "Non se puido validar a usuaria" @@ -933,7 +933,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -948,17 +948,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -966,3 +966,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/hu/LC_MESSAGES/default.po b/priv/gettext/hu/LC_MESSAGES/default.po index 0b7d49b0b..5be9b17a9 100644 --- a/priv/gettext/hu/LC_MESSAGES/default.po +++ b/priv/gettext/hu/LC_MESSAGES/default.po @@ -358,12 +358,12 @@ msgid "What information do we collect?" msgstr "Milyen információkat gyűjtünk?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon itt: %{instance}: erősítse meg az e-mail-címét" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon itt: %{instance}: e-mail-cím megváltozott" @@ -421,7 +421,7 @@ msgid "View the event on: %{link}" msgstr "Esemény megtekintése itt: %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{inviter} meghívta, hogy csatlakozzon a(z) %{group} csoporthoz" @@ -1098,7 +1098,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1141,7 +1141,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1401,17 +1401,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1436,7 +1436,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/hu/LC_MESSAGES/errors.po b/priv/gettext/hu/LC_MESSAGES/errors.po index b51253122..2ee8fe089 100644 --- a/priv/gettext/hu/LC_MESSAGES/errors.po +++ b/priv/gettext/hu/LC_MESSAGES/errors.po @@ -116,28 +116,28 @@ msgid "Cannot refresh the token" msgstr "Nem lehet frissíteni a tokent" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "A jelenlegi profil nem tagja ennek a csoportnak" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "A jelenlegi profil nem adminisztrátora a kijelölt csoportnak" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Hiba a felhasználói beállítások mentésekor" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Nem található a csoport" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Nem található %{id} azonosítóval rendelkező csoport" @@ -147,7 +147,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "Lehetetlen hitelesíteni, vagy az e-mail, vagy a jelszó érvénytelen." #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Nem található a tag" @@ -184,12 +184,12 @@ msgid "The current password is invalid" msgstr "A jelenlegi jelszó érvénytelen" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "Az új e-mail-cím nem tűnik érvényesnek" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "Az új e-mail-címnek eltérőnek kell lennie" @@ -199,8 +199,8 @@ msgid "The new password must be different" msgstr "Az új jelszónak eltérőnek kell lennie" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "A megadott jelszó érvénytelen" @@ -227,37 +227,37 @@ msgid "Unable to validate user" msgstr "Nem lehet ellenőrizni a felhasználót" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "A felhasználó már le van tiltva" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "A kért felhasználó nincs bejelentkezve" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Már tagja ennek a csoportnak" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "Nem hagyhatja el ezt a csoportot, mert Ön az egyedüli adminisztrátor" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "Nem csatlakozhat ehhez a csoporthoz" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "Lehet, hogy nem sorolhatja fel a csoportokat, hacsak nem moderátor." #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "Bejelentkezve kell lennie az e-mail-címe megváltoztatásához" @@ -267,27 +267,27 @@ msgid "You need to be logged-in to change your password" msgstr "Bejelentkezve kell lennie a jelszava megváltoztatásához" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "Bejelentkezve kell lennie egy csoport törléséhez" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "Bejelentkezve kell lennie a fiókja törléséhez" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "Bejelentkezve kell lennie egy csoporthoz való csatlakozáshoz" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "Bejelentkezve kell lennie egy csoportból való kilépéshez" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "Bejelentkezve kell lennie egy csoport frissítéséhez" @@ -365,7 +365,7 @@ msgid "Cannot remove the last identity of a user" msgstr "Nem lehet eltávolítani egy felhasználó utolsó személyazonosságát" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "A hozzászólást már törölték" @@ -390,15 +390,15 @@ msgid "Event id not found" msgstr "Nem található az eseményazonosító" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Nem található az esemény" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "Ezzel a(z) %{id} azonosítóval rendelkező esemény nem létezik" @@ -466,8 +466,8 @@ msgstr "A profil már tagja ennek a csoportnak" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -484,7 +484,7 @@ msgid "Report not found" msgstr "Nem található a jelentés" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "Az erőforrás nem létezik" @@ -494,7 +494,7 @@ msgid "The event has already reached its maximum capacity" msgstr "Az esemény már elérte a legnagyobb kapacitását" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "Ez a token érvénytelen" @@ -555,7 +555,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "Nem hozhat létre hírforrástokent, ha nincs kapcsolódva" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "Nem törölhet hozzászólást, ha nincs kapcsolódva" @@ -584,12 +584,12 @@ msgstr "" "egyedüli adminisztrátor" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "Nem tudja törölni ezt a hozzászólást" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "Nem tudja törölni ezt az eseményt" @@ -663,7 +663,7 @@ msgid "You need to be logged-in to access resources" msgstr "Bejelentkezve kell lennie az erőforrásokhoz való hozzáféréshez" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "Bejelentkezve kell lennie az események létrehozásához" @@ -678,12 +678,12 @@ msgid "You need to be logged-in to create reports" msgstr "Bejelentkezve kell lennie a jelentések létrehozásához" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "Bejelentkezve kell lennie az erőforrások létrehozásához" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "Bejelentkezve kell lennie egy esemény törléséhez" @@ -693,7 +693,7 @@ msgid "You need to be logged-in to delete posts" msgstr "Bejelentkezve kell lennie a hozzászólások törléséhez" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "Bejelentkezve kell lennie az erőforrások törléséhez" @@ -708,7 +708,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Bejelentkezve kell lennie egy esemény elhagyásához" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "Bejelentkezve kell lennie egy esemény frissítéséhez" @@ -718,27 +718,27 @@ msgid "You need to be logged-in to update posts" msgstr "Bejelentkezve kell lennie a hozzászólások frissítéséhez" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "Bejelentkezve kell lennie az erőforrások frissítéséhez" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "Bejelentkezve kell lennie egy erőforrás előnézetének megtekintéséhez" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "A szülőerőforrás nem tartozik ehhez a csoporthoz" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "A választott jelszó túl rövid." #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "A regisztrációs token már használatban van. Ez hibának tűnik a mi oldalunkon." @@ -809,17 +809,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "A fájl nem rendelkezik engedélyezett MIME-típussal." #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "A profil nem adminisztrátor ennél a csoportnál" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "Nem tudja szerkeszteni ezt az eseményt." #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "Nem tudja ezt az eseményt ennek a profilnak tulajdonítani." @@ -851,7 +851,7 @@ msgstr "" "megbeszéléshez való hozzáféréshez" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "A szervező profilját nem a felhasználó birtokolja" @@ -861,7 +861,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "A megadott profilazonosító nem a névtelen profil" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "A megadott fénykép túl nehéz" @@ -872,33 +872,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "Indexfájl nem található. Újra kell fordítania az előtétprogramot." #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "Hiba az erőforrás létrehozáskor" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "Érvénytelen aktiválási token" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "Nem lehet lekérni az erőforrás részleteit erről az URL-ről." #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "A megadott moderátorprofilnak nincs jogosultsága ezen az eseményen" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -908,7 +908,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Nem található az esemény" @@ -918,7 +918,7 @@ msgid "Error while creating a discussion" msgstr "Hiba az erőforrás létrehozáskor" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "Hiba a jelentés frissítésekor" @@ -933,17 +933,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "Nem lehet ellenőrizni a felhasználót" @@ -953,7 +953,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -968,17 +968,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -986,3 +986,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/id/LC_MESSAGES/default.po b/priv/gettext/id/LC_MESSAGES/default.po index fdae767b3..03f6055f1 100644 --- a/priv/gettext/id/LC_MESSAGES/default.po +++ b/priv/gettext/id/LC_MESSAGES/default.po @@ -329,12 +329,12 @@ msgid "What information do we collect?" msgstr "Informasi apa yang kami kumpulkan?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon pada %{instance}: konfirmasi alamat surel Anda" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon pada %{instance}: surel diubah" @@ -390,7 +390,7 @@ msgid "View the event on: %{link}" msgstr "Lihat acara di: %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "" "Anda telah diundang oleh %{inviter} untuk bergabung ke kelompok %{group}" @@ -1081,7 +1081,7 @@ msgid "So long, and thanks for the fish!" msgstr "Sampai jumpa, dan terima kasih atas ikannya!" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Anda telah dikeluarkan dari kelompok %{group}" @@ -1124,7 +1124,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1384,17 +1384,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1419,7 +1419,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/id/LC_MESSAGES/errors.po b/priv/gettext/id/LC_MESSAGES/errors.po index fe6ff38a4..cbcf9c022 100644 --- a/priv/gettext/id/LC_MESSAGES/errors.po +++ b/priv/gettext/id/LC_MESSAGES/errors.po @@ -94,28 +94,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Kelompok tidak ditemukan" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Kelompok dengan ID %{id} tidak ditemukan" @@ -125,7 +125,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -162,12 +162,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -177,8 +177,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -203,37 +203,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -243,27 +243,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -339,7 +339,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -364,15 +364,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -440,8 +440,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -458,7 +458,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -468,7 +468,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -529,7 +529,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -555,12 +555,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -620,7 +620,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -635,12 +635,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -650,7 +650,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -665,7 +665,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -675,27 +675,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -765,17 +765,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -805,7 +805,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -815,7 +815,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -826,33 +826,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -862,7 +862,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -872,7 +872,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -887,17 +887,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -907,7 +907,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -922,17 +922,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -940,3 +940,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/it/LC_MESSAGES/default.po b/priv/gettext/it/LC_MESSAGES/default.po index efc381674..9524ae7de 100644 --- a/priv/gettext/it/LC_MESSAGES/default.po +++ b/priv/gettext/it/LC_MESSAGES/default.po @@ -353,12 +353,12 @@ msgid "What information do we collect?" msgstr "Quali informazioni raccogliamo?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon su %{instance}: conferma il tuo indirizzo email" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon su %{instance}: email modificata" @@ -416,7 +416,7 @@ msgid "View the event on: %{link}" msgstr "Visualizza l'evento su: %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "Sei stato invitato da %{inviter} per partecipare al gruppo %{group}" @@ -1273,7 +1273,7 @@ msgid "So long, and thanks for the fish!" msgstr "Addio, e grazie per il pesce!" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Sei stato rimosso dal gruppo %{group}" @@ -1328,7 +1328,7 @@ msgstr "" "%{group_name} (%{group_address}). Non sei più un membro di questo gruppo." #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "Il gruppo %{group} è stato sospeso su %{instance}" @@ -1684,17 +1684,17 @@ msgid "%{name}'s feed" msgstr "Flusso di %{name}" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "Flusso privato degli eventi di %{actor} su %{instance}" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "Flusso pubblico degli eventi di %{actor} su %{instance}" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "Flusso per %{email} su %{instance}" @@ -1722,7 +1722,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Il server Mobilizon sembra essere temporaneamente inattivo." #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "Feed pubblico per %{instance}" diff --git a/priv/gettext/it/LC_MESSAGES/errors.po b/priv/gettext/it/LC_MESSAGES/errors.po index 50c0bc86a..5bbdcf3b1 100644 --- a/priv/gettext/it/LC_MESSAGES/errors.po +++ b/priv/gettext/it/LC_MESSAGES/errors.po @@ -100,28 +100,28 @@ msgid "Cannot refresh the token" msgstr "Il token non può essere aggiornato" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "Il profilo corrente non è membro di questo gruppo" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "Il profilo corrente non è amministratore del gruppo selezionato" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Errore nel salvare le preferenze utente" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Gruppo non trovato" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Gruppo con ID %{id} non trovato" @@ -131,7 +131,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "Impossibile autenticarsi: email e/o password non validi." #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Membro non trovato" @@ -168,12 +168,12 @@ msgid "The current password is invalid" msgstr "la password corrente non è valida" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "La nuova email sembra non valida" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "La nuova email dev'essere diversa" @@ -183,8 +183,8 @@ msgid "The new password must be different" msgstr "La nuova password deve essere diversa" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "La password assegnata non è valida" @@ -209,37 +209,37 @@ msgid "Unable to validate user" msgstr "Impossibile convalidare l'utente" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "Utente già disabilitato" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "L'utente richiesto non è loggato" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Sei già un membro di questo gruppo" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "Non puoi lasciare questo gruppo perchè sei l'unico amministratore" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "Non puoi unirti a questo gruppo" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "Non è possibile elencare i gruppi a meno che non sia un moderatore." #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "È necessario effettuare il login per modificare la tua email" @@ -249,27 +249,27 @@ msgid "You need to be logged-in to change your password" msgstr "È necessario effettuare il login per modificare la tua password" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "È necessario effettuare il login per eliminare un gruppo" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "È necessario effettuare il login per eliminare il tuo account" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "È necessario effettuare il login per entrare a far parte di un gruppo" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "È necessario effettuare il login per lasciare un gruppo" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "È necessario effettuare il login per aggiornare un gruppo" @@ -347,7 +347,7 @@ msgid "Cannot remove the last identity of a user" msgstr "Impossibile rimuovere l'ultima identità di un utente" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "Commento già cancellato" @@ -372,15 +372,15 @@ msgid "Event id not found" msgstr "ID evento non trovato" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Evento non trovato" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "L'evento con questo ID %{id} non esiste" @@ -448,8 +448,8 @@ msgstr "Il profilo è già un membro diquesto gruppo" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -466,7 +466,7 @@ msgid "Report not found" msgstr "Segnalazione non trovata" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "La risorsa non esiste" @@ -476,7 +476,7 @@ msgid "The event has already reached its maximum capacity" msgstr "L'evento ha già raggiunto la sua massima capacità" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "Questo token non è valido" @@ -537,7 +537,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "Non puoi creare un token di rifornimento senza connessione" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "Non è consentito eliminare un commento se non si è collegati" @@ -566,12 +566,12 @@ msgstr "" "gruppo perché sei l'unico amministratore" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "Non puoi eliminare questo commento" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "Non puoi eliminare questo evento" @@ -637,7 +637,7 @@ msgid "You need to be logged-in to access resources" msgstr "Devi essere connesso per accedere alle risorse" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "Devi essere connesso per creare eventi" @@ -652,12 +652,12 @@ msgid "You need to be logged-in to create reports" msgstr "Devi essere connesso per creare rapporti" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "Devi essere connesso per creare risorse" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "Devi essere connesso per eliminare un evento" @@ -667,7 +667,7 @@ msgid "You need to be logged-in to delete posts" msgstr "Devi essere connesso per eliminare dei post" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "Devi essere connesso per eliminare risorse" @@ -682,7 +682,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Devi essere connesso per lasciare un evento" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "Devi essere connesso per aggiornare un evento" @@ -692,27 +692,27 @@ msgid "You need to be logged-in to update posts" msgstr "Devi essere connesso per aggiornare dei post" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "Devi essere connesso per aggiornare le risorse" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "Devi essere connesso per visualizzare l'anteprima di una risorsa" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "La risorsa principale non appartiene a questo gruppo" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "La password scelta è troppo corta." #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Il token di registrazione è già in uso, questo sembra un problema dalla " @@ -784,17 +784,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "Il file non ha un tipo MIME consentito." #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "Il profilo non è amministratore del gruppo" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "Non puoi modificare questo evento." #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "Non puo iattribuire questo evento a questo profilo." @@ -826,7 +826,7 @@ msgstr "" "per accedere ad una discussione" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "Il profilo dell'organizzatore non è di proprietà dell'utente" @@ -836,7 +836,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "L'ID profilo fornito non è quello del profilo anonimo" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "L'immagine inserita è troppo pesante" @@ -847,35 +847,35 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "Il file di indice non è stato trovato. Devi ricompilare il front-end." #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "Errore durante la creazione della risorsa" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "Token di attivazione non valido" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "Impossibile recuperare i dettagli della risorsa da questa URL." #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" "Il profilo del moderatore fornito non dispone dell'autorizzazione per questo " "evento" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -885,7 +885,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Evento non trovato" @@ -895,7 +895,7 @@ msgid "Error while creating a discussion" msgstr "Errore durante la creazione della risorsa" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "Errore durante l'aggiornamento del rapporto" @@ -910,17 +910,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "Impossibile convalidare l'utente" @@ -930,7 +930,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -945,17 +945,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -963,3 +963,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/ja/LC_MESSAGES/default.po b/priv/gettext/ja/LC_MESSAGES/default.po index f9e4a4a81..b4ebd5fd6 100644 --- a/priv/gettext/ja/LC_MESSAGES/default.po +++ b/priv/gettext/ja/LC_MESSAGES/default.po @@ -312,12 +312,12 @@ msgid "What information do we collect?" msgstr "" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "" @@ -373,7 +373,7 @@ msgid "View the event on: %{link}" msgstr "" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "" @@ -1041,7 +1041,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1084,7 +1084,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1344,17 +1344,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1379,7 +1379,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/ja/LC_MESSAGES/errors.po b/priv/gettext/ja/LC_MESSAGES/errors.po index 51fd9096c..b9cf02a37 100644 --- a/priv/gettext/ja/LC_MESSAGES/errors.po +++ b/priv/gettext/ja/LC_MESSAGES/errors.po @@ -87,28 +87,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "" @@ -118,7 +118,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -155,12 +155,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -170,8 +170,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -196,37 +196,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -236,27 +236,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -332,7 +332,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -357,15 +357,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -433,8 +433,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -451,7 +451,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -461,7 +461,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -522,7 +522,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -548,12 +548,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -613,7 +613,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -628,12 +628,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -643,7 +643,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -658,7 +658,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -668,27 +668,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -758,17 +758,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -798,7 +798,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -808,7 +808,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -819,33 +819,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -855,7 +855,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -865,7 +865,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -880,17 +880,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -900,7 +900,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -915,17 +915,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -933,3 +933,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/default.po b/priv/gettext/nl/LC_MESSAGES/default.po index 35951e47c..2990323e9 100644 --- a/priv/gettext/nl/LC_MESSAGES/default.po +++ b/priv/gettext/nl/LC_MESSAGES/default.po @@ -321,12 +321,12 @@ msgid "What information do we collect?" msgstr "" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "" @@ -384,7 +384,7 @@ msgid "View the event on: %{link}" msgstr "Bekijk het bijgewerkte evenement op: %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "" @@ -1065,7 +1065,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1108,7 +1108,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1369,17 +1369,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1404,7 +1404,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/nl/LC_MESSAGES/errors.po b/priv/gettext/nl/LC_MESSAGES/errors.po index 1c7158da4..1dbb070c8 100644 --- a/priv/gettext/nl/LC_MESSAGES/errors.po +++ b/priv/gettext/nl/LC_MESSAGES/errors.po @@ -93,28 +93,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "" @@ -124,7 +124,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -161,12 +161,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -176,8 +176,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -202,37 +202,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -242,27 +242,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -338,7 +338,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -363,15 +363,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -439,8 +439,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -457,7 +457,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -467,7 +467,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -528,7 +528,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -554,12 +554,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -619,7 +619,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -634,12 +634,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -649,7 +649,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -664,7 +664,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -674,27 +674,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -764,17 +764,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -804,7 +804,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -814,7 +814,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -825,33 +825,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -861,7 +861,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -871,7 +871,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -886,17 +886,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -906,7 +906,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -921,17 +921,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -939,3 +939,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/nn/LC_MESSAGES/default.po b/priv/gettext/nn/LC_MESSAGES/default.po index 190545c9c..f952f8e0c 100644 --- a/priv/gettext/nn/LC_MESSAGES/default.po +++ b/priv/gettext/nn/LC_MESSAGES/default.po @@ -14,262 +14,262 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.6.2\n" -#: lib/web/templates/email/password_reset.html.heex:48 #, elixir-format +#: lib/web/templates/email/password_reset.html.heex:48 msgid "If you didn't request this, please ignore this email. Your password won't change until you access the link below and create a new one." msgstr "" "Viss du ikkje ba om dette, kan du sjå bort frå denne eposten. Passordet blir " "ikkje endra før du klikkar på lenka under og lagar eit nytt." -#: lib/web/templates/email/report.html.heex:74 #, elixir-format +#: lib/web/templates/email/report.html.heex:74 msgid "%{title} by %{creator}" msgstr "%{title} av %{creator}" -#: lib/web/templates/email/registration_confirmation.html.heex:58 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.heex:58 msgid "Activate my account" msgstr "Ta i bruk kontoen min" +#, elixir-format #: lib/web/templates/email/email.html.heex:118 #: lib/web/templates/email/email.text.eex:9 -#, elixir-format msgid "Ask the community on Framacolibri" msgstr "Spør brukarsamfunnet på Framacolibri" -#: lib/web/templates/email/report.text.eex:15 #, elixir-format +#: lib/web/templates/email/report.text.eex:15 msgid "Comments" msgstr "Kommentarar" +#, elixir-format #: lib/web/templates/email/report.html.heex:72 #: lib/web/templates/email/report.text.eex:11 -#, elixir-format msgid "Event" msgstr "Hending" -#: lib/web/email/user.ex:48 #, elixir-format +#: lib/web/email/user.ex:48 msgid "Instructions to reset your password on %{instance}" msgstr "Framgangsmåte for å nullstilla passordet på %{instance}" -#: lib/web/templates/email/report.text.eex:21 #, elixir-format +#: lib/web/templates/email/report.text.eex:21 msgid "Reason" msgstr "Grunn" -#: lib/web/templates/email/password_reset.html.heex:61 #, elixir-format +#: lib/web/templates/email/password_reset.html.heex:61 msgid "Reset Password" msgstr "Nullstill passord" -#: lib/web/templates/email/password_reset.html.heex:41 #, elixir-format +#: lib/web/templates/email/password_reset.html.heex:41 msgid "Resetting your password is easy. Just press the button below and follow the instructions. We'll have you up and running in no time." msgstr "" "Det er lett å nullstilla passordet. Berre trykk på knappen under og fylg " "framgangsmåten. Dette ordnar me på ei lita stund." -#: lib/web/email/user.ex:28 #, elixir-format +#: lib/web/email/user.ex:28 msgid "Instructions to confirm your Mobilizon account on %{instance}" msgstr "Framgangsmåte for å stadfesta Mobilizon-kontoen din på %{instance}" -#: lib/web/email/admin.ex:24 #, elixir-format +#: lib/web/email/admin.ex:24 msgid "New report on Mobilizon instance %{instance}" msgstr "Ny rapport på Mobilizon-nettstaden %{instance}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:51 #: lib/web/templates/email/before_event_notification.text.eex:4 -#, elixir-format msgid "Go to event page" msgstr "Gå til hendingssida" -#: lib/web/templates/email/report.text.eex:1 #, elixir-format +#: lib/web/templates/email/report.text.eex:1 msgid "New report from %{reporter} on %{instance}" msgstr "Ny rapport frå %{reporter} på %{instance}" -#: lib/web/templates/email/event_participation_approved.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_approved.text.eex:1 msgid "Participation approved" msgstr "Deltakinga er godkjend" +#, elixir-format #: lib/web/templates/email/password_reset.html.heex:13 #: lib/web/templates/email/password_reset.text.eex:1 -#, elixir-format msgid "Password reset" msgstr "Nullstill passord" -#: lib/web/templates/email/password_reset.text.eex:7 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:7 msgid "Resetting your password is easy. Just click the link below and follow the instructions. We'll have you up and running in no time." msgstr "" "Det er lett å nullstilla passordet. Berre klikk på lenka under og fylg " "framgangsmåten. Dette ordnar me på ei lita stund." -#: lib/web/templates/email/registration_confirmation.text.eex:5 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:5 msgid "You created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email." msgstr "" "Du har oppretta ein konto på %{host} med denne epostadressa. Du er eitt " "klikk unna å aktivera kontoen. Viss du ikkje oppretta nokon konto, kan du " "berre oversjå denne eposten." -#: lib/web/email/participation.ex:108 #, elixir-format +#: lib/web/email/participation.ex:108 msgid "Your participation to event %{title} has been approved" msgstr "Deltakinga di på hendinga %{title} er godkjent" -#: lib/web/email/participation.ex:68 #, elixir-format +#: lib/web/email/participation.ex:68 msgid "Your participation to event %{title} has been rejected" msgstr "Deltakinga di på hendinga %{title} er avslegen" -#: lib/web/email/event.ex:36 #, elixir-format +#: lib/web/email/event.ex:36 msgid "Event %{title} has been updated" msgstr "Hendinga %{title} er oppdatert" -#: lib/web/templates/email/event_updated.text.eex:15 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:15 msgid "New title: %{title}" msgstr "Ny tittel: %{title}" -#: lib/web/templates/email/password_reset.text.eex:5 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:5 msgid "You requested a new password for your account on %{instance}." msgstr "Du ba om eit nytt passord for brukarkontoen din på %{instance}." -#: lib/web/templates/email/email.html.heex:86 #, elixir-format +#: lib/web/templates/email/email.html.heex:86 msgid "Warning" msgstr "Åtvaring" -#: lib/web/email/participation.ex:131 #, elixir-format +#: lib/web/email/participation.ex:131 msgid "Confirm your participation to event %{title}" msgstr "Stadfest at du vil delta på hendinga %{title}" -#: lib/web/templates/api/privacy.html.heex:75 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:75 msgctxt "terms" msgid "An internal ID for your current selected identity" msgstr "Ein intern ID for den identiteten du har valt" -#: lib/web/templates/api/privacy.html.heex:74 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:74 msgctxt "terms" msgid "An internal user ID" msgstr "Ein intern brukar-ID" -#: lib/web/templates/api/privacy.html.heex:37 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:37 msgctxt "terms" msgid "Any of the information we collect from you may be used in the following ways:" msgstr "Informasjonen me samlar frå deg, kan bli brukt på desse måtane:" -#: lib/web/templates/api/privacy.html.heex:9 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:9 msgctxt "terms" msgid "Basic account information" msgstr "Grunnleggjande kontoinformasjon" -#: lib/web/templates/api/privacy.html.heex:25 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:25 msgctxt "terms" msgid "Do not share any dangerous information over Mobilizon." msgstr "Ikkje del farleg stoff på Mobilizon." -#: lib/web/templates/api/privacy.html.heex:90 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:90 msgctxt "terms" msgid "Do we disclose any information to outside parties?" msgstr "Sender me informasjon om deg til utanforståande?" -#: lib/web/templates/api/privacy.html.heex:68 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:68 msgctxt "terms" msgid "Do we use cookies?" msgstr "Bruker me infokapslar?" -#: lib/web/templates/api/privacy.html.heex:51 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:51 msgctxt "terms" msgid "How do we protect your information?" msgstr "Korleis vernar me opplysingane dine?" -#: lib/web/templates/api/privacy.html.heex:29 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:29 msgctxt "terms" msgid "IPs and other metadata" msgstr "IP-adresser og andre metadata" -#: lib/web/templates/api/privacy.html.heex:17 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:17 msgctxt "terms" msgid "Published events and comments" msgstr "Offentlege hendingar og kommentarar" -#: lib/web/templates/api/privacy.html.heex:64 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:64 msgctxt "terms" msgid "Retain the IP addresses associated with registered users no more than 12 months." msgstr "Ikkje lagra IP-adressene for registrerte brukarar lenger enn eitt år." -#: lib/web/templates/api/privacy.html.heex:76 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:76 msgctxt "terms" msgid "Tokens to authenticate you" msgstr "Identifiseringsteikn" -#: lib/web/templates/api/privacy.html.heex:31 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:31 msgctxt "terms" msgid "We also may retain server logs which include the IP address of every request to our server." msgstr "" "Me kan òg lagra tenarloggar som inneheld IP-adressene for alle førespurnader " "til tenaren vår." -#: lib/web/templates/api/privacy.html.heex:70 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:70 msgctxt "terms" msgid "We store the following information on your device when you connect:" msgstr "Me lagrar desse opplysingane på eininga di når du koplar til:" -#: lib/web/templates/api/privacy.html.heex:58 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:58 msgctxt "terms" msgid "We will make a good faith effort to:" msgstr "Me gjer vårt beste for å:" -#: lib/web/templates/api/privacy.html.heex:35 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:35 msgctxt "terms" msgid "What do we use your information for?" msgstr "Kva bruker me opplysingane dine til?" -#: lib/web/templates/api/privacy.html.heex:57 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:57 msgctxt "terms" msgid "What is our data retention policy?" msgstr "Kva retningsliner for datalagring har me?" -#: lib/web/templates/api/privacy.html.heex:67 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:67 msgctxt "terms" msgid "You may irreversibly delete your account at any time." msgstr "Du kan når som helst sletta kontoen din for alltid." -#: lib/web/templates/api/privacy.html.heex:115 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:115 msgctxt "terms" msgid "Changes to our Privacy Policy" msgstr "Endringar i personvernretningslinene våre" -#: lib/web/templates/api/privacy.html.heex:106 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:106 msgctxt "terms" msgid "If this server is in the EU or the EEA: Our site, products and services are all directed to people who are at least 16 years old. If you are under the age of 16, per the requirements of the GDPR (<a href=\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">General Data Protection Regulation</a>) do not use this site." msgstr "" @@ -279,8 +279,8 @@ msgstr "" "Personvernforordningen\">General Data Protection Regulation</a>) at du ikkje " "bruker nettstaden." -#: lib/web/templates/api/privacy.html.heex:109 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:109 msgctxt "terms" msgid "If this server is in the USA: Our site, products and services are all directed to people who are at least 13 years old. If you are under the age of 13, per the requirements of COPPA (<a href=\"https://en.wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\">Children's Online Privacy Protection Act</a>) do not use this site." msgstr "" @@ -290,30 +290,30 @@ msgstr "" "27s_Online_Privacy_Protection_Act\">Children's Online Privacy Protection " "Act</a>) at du ikkje bruker nettstaden." -#: lib/web/templates/api/privacy.html.heex:117 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:117 msgctxt "terms" msgid "If we decide to change our privacy policy, we will post those changes on this page." msgstr "" "Viss me endrar personvernretningslinene seinare, vil me leggja ut endringane " "på denne sida." -#: lib/web/templates/api/privacy.html.heex:112 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:112 msgctxt "terms" msgid "Law requirements can be different if this server is in another jurisdiction." msgstr "" "Lovkrava kan vera annleis om denne tenaren er innanfor ein annan " "jurisdiksjon." -#: lib/web/templates/api/privacy.html.heex:103 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:103 msgctxt "terms" msgid "Site usage by children" msgstr "Born på denne nettstaden" -#: lib/web/templates/api/privacy.html.heex:47 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:47 msgctxt "terms" msgid "The email address you provide may be used to send you information, updates and notifications about other people\n interacting with your content or sending you messages and to respond to inquiries, and/or other requests or\n questions." msgstr "" @@ -321,8 +321,8 @@ msgstr "" "varslingar om korleis andre\n" " reagerer på innhaldet ditt, eller sender deg meldingar, spørsmål og svar." -#: lib/web/templates/api/privacy.html.heex:45 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:45 msgctxt "terms" msgid "To aid moderation of the community, for example comparing your IP address with other known ones to determine ban\n evasion or other violations." msgstr "" @@ -330,8 +330,8 @@ msgstr "" "adressa di med andre kjente adresser slik\n" " at me kan finna ut om adressa er utestengt, eller andre brot på reglane." -#: lib/web/templates/api/privacy.html.heex:43 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:43 msgctxt "terms" msgid "To provide the core functionality of Mobilizon. Depending on this instance's policy you may only be able to\n interact with other people's content and post your own content if you are logged in." msgstr "" @@ -340,89 +340,89 @@ msgstr "" " berre samhandla med innhald og innlegg frå andre samt leggja ut eige " "innhald når du er logga inn." -#: lib/web/templates/api/privacy.html.heex:6 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:6 msgctxt "terms" msgid "What information do we collect?" msgstr "Kva opplysingar samlar me?" -#: lib/web/email/user.ex:177 #, elixir-format +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon på %{instance}: stadfest epostadressa di" -#: lib/web/email/user.ex:154 #, elixir-format +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon på %{instance}: epostadressa er endra" -#: lib/web/email/notification.ex:49 #, elixir-format +#: lib/web/email/notification.ex:49 msgid "One event planned today" msgid_plural "%{nb_events} events planned today" msgstr[0] "Ei planlagd hending i dag" msgstr[1] "%{nb_events} planlagde hendingar i dag" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.heex:38 #: lib/web/templates/email/on_day_notification.text.eex:4 -#, elixir-format msgid "You have one event today:" msgid_plural "You have %{total} events today:" msgstr[0] "Du har ei hending i dag:" msgstr[1] "Du har %{total} hendingar i dag:" -#: lib/web/templates/email/group_invite.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_invite.text.eex:3 msgid "%{inviter} just invited you to join their group %{group}" msgstr "%{inviter} har nett invitert deg til gruppa %{group}" +#, elixir-format #: lib/web/templates/email/group_invite.html.heex:13 #: lib/web/templates/email/group_invite.text.eex:1 -#, elixir-format msgid "Come along!" msgstr "Bli med!" -#: lib/web/email/notification.ex:24 #, elixir-format +#: lib/web/email/notification.ex:24 msgid "Don't forget to go to %{title}" msgstr "Ikkje gløym å koma på %{title}" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:38 #: lib/web/templates/email/before_event_notification.text.eex:3 -#, elixir-format msgid "Get ready for %{title}" msgstr "Gjer deg klar til %{title}" -#: lib/web/templates/email/group_invite.html.heex:59 #, elixir-format +#: lib/web/templates/email/group_invite.html.heex:59 msgid "See my groups" msgstr "Sjå på gruppene mine" +#, elixir-format #: lib/web/templates/email/group_invite.html.heex:45 #: lib/web/templates/email/group_invite.text.eex:5 -#, elixir-format msgid "To accept this invitation, head over to your groups." msgstr "Gå til gruppene dine for å takka ja til denne invitasjonen." -#: lib/web/templates/email/before_event_notification.text.eex:5 #, elixir-format +#: lib/web/templates/email/before_event_notification.text.eex:5 msgid "View the event on: %{link}" msgstr "Sjå hendinga på: %{link}" -#: lib/web/email/group.ex:33 #, elixir-format +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{inviter} har invitert deg til å bli med i gruppa %{group}" -#: lib/web/email/notification.ex:75 #, elixir-format +#: lib/web/email/notification.ex:75 msgid "One event planned this week" msgid_plural "%{nb_events} events planned this week" msgstr[0] "Ei planlagd hending denne veka" msgstr[1] "%{nb_events} planlagde hendingar denne veka" -#: lib/web/email/notification.ex:98 #, elixir-format +#: lib/web/email/notification.ex:98 msgid "One participation request for event %{title} to process" msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" msgstr[0] "Du har ein førespurnad om å delta på %{title} å handtera" @@ -430,21 +430,21 @@ msgstr[1] "" "%{number_participation_requests} førespurnader om å delta på %{title} å " "handtera" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.heex:38 #: lib/web/templates/email/notification_each_week.text.eex:3 -#, elixir-format msgid "You have one event this week:" msgid_plural "You have %{total} events this week:" msgstr[0] "Du har ei hending denne veka:" msgstr[1] "Du har %{total} hendingar denne veka:" -#: lib/service/metadata/utils.ex:53 #, elixir-format +#: lib/service/metadata/utils.ex:53 msgid "The event organizer didn't add any description." msgstr "Tilskiparen skreiv inga skildring." -#: lib/web/templates/api/privacy.html.heex:54 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:54 msgctxt "terms" msgid "We implement a variety of security measures to maintain the safety of your personal information when you enter, submit, or access your personal information. Among other things, your browser session, as well as the traffic between your applications and the API, are secured with SSL/TLS, and your password is hashed using a strong one-way algorithm." msgstr "" @@ -453,8 +453,8 @@ msgstr "" "er både nettlesarøkta di og trafikken sikra med SSL/TLS, og passordet ditt " "blir nykjelkryptert med ein sterk einvegsalgoritme." -#: lib/web/templates/api/privacy.html.heex:94 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:94 msgctxt "terms" msgid "No. We do not sell, trade, or otherwise transfer to outside parties your personally identifiable information. This does not include trusted third parties who assist us in operating our site, conducting our business, or servicing you, so long as those parties agree to keep this information confidential. We may also release your information when we believe release is appropriate to comply with the law, enforce our site policies, or protect ours or others rights, property, or safety." msgstr "" @@ -465,20 +465,20 @@ msgstr "" "halda lova, oppfylla våre eigne vilkår, eller verna våre eigne og andre sine " "rettar, eigedom og tryggleik." -#: lib/web/templates/api/terms.html.heex:23 #, elixir-format +#: lib/web/templates/api/terms.html.heex:23 msgctxt "terms" msgid "Accepting these Terms" msgstr "Å godta vilkåra" -#: lib/web/templates/api/terms.html.heex:27 #, elixir-format +#: lib/web/templates/api/terms.html.heex:27 msgctxt "terms" msgid "Changes to these Terms" msgstr "Endringar i vilkåra" -#: lib/web/templates/api/terms.html.heex:85 #, elixir-format +#: lib/web/templates/api/terms.html.heex:85 msgctxt "terms" msgid "A lot of the content on the Service is from you and others, and we don't review, verify or authenticate it, and it may include inaccuracies or false information. We make no representations, warranties, or guarantees relating to the quality, suitability, truth, accuracy or completeness of any content contained in the Service. You acknowledge sole responsibility for and assume all risk arising from your use of or reliance on any content." msgstr "" @@ -490,38 +490,38 @@ msgstr "" "ansvar når det gjeld å bruka eller lita på ein kvar del av innhaldet på " "nettstaden." -#: lib/web/templates/api/terms.html.heex:60 #, elixir-format +#: lib/web/templates/api/terms.html.heex:60 msgctxt "terms" msgid "Also, you agree that you will not do any of the following in connection with the Service or other users:" msgstr "" "Du godtek òg at du ikkje vil gjera noko av dette når du bruker tenesta eller " "har med andre brukarar å gjera:" -#: lib/web/templates/api/terms.html.heex:65 #, elixir-format +#: lib/web/templates/api/terms.html.heex:65 msgctxt "terms" msgid "Circumvent or attempt to circumvent any filtering, security measures, rate limits or other features designed to protect the Service, users of the Service, or third parties." msgstr "" "Gå rundt eller prøva å gå rundt filter, tryggleiksmekanismar, avgrensingar " "eller andre måtar å verna tenesta, brukarane eller tredjepartar." -#: lib/web/templates/api/terms.html.heex:64 #, elixir-format +#: lib/web/templates/api/terms.html.heex:64 msgctxt "terms" msgid "Collect any personal information about other users, or intimidate, threaten, stalk or otherwise harass other users of the Service;" msgstr "" "Samla personopplysingar om andre brukarar, eller plaga, truga, forfylgja " "eller uroa andre som bruker tenesta;" -#: lib/web/templates/api/terms.html.heex:55 #, elixir-format +#: lib/web/templates/api/terms.html.heex:55 msgctxt "terms" msgid "Content that is illegal or unlawful, that would otherwise create liability;" msgstr "Innhald som er ulovleg eller som vil føra med seg straffeansvar;" -#: lib/web/templates/api/terms.html.heex:56 #, elixir-format +#: lib/web/templates/api/terms.html.heex:56 msgctxt "terms" msgid "Content that may infringe or violate any patent, trademark, trade secret, copyright, right of privacy, right of publicity or other intellectual or other right of any party;" msgstr "" @@ -529,48 +529,48 @@ msgstr "" "opphavsrett, privatlivsrett, publiseringsrett eller andre intellektuelle og " "andre rettar til alle partar;" -#: lib/web/templates/api/terms.html.heex:42 #, elixir-format +#: lib/web/templates/api/terms.html.heex:42 msgctxt "terms" msgid "Creating Accounts" msgstr "Oppretta kontoar" -#: lib/web/templates/api/terms.html.heex:89 #, elixir-format +#: lib/web/templates/api/terms.html.heex:89 msgctxt "terms" msgid "Entire Agreement" msgstr "Heile avtala" -#: lib/web/templates/api/terms.html.heex:92 #, elixir-format +#: lib/web/templates/api/terms.html.heex:92 msgctxt "terms" msgid "Feedback" msgstr "Tilbakemeldingar" -#: lib/web/templates/api/terms.html.heex:83 #, elixir-format +#: lib/web/templates/api/terms.html.heex:83 msgctxt "terms" msgid "Hyperlinks and Third Party Content" msgstr "Lenker og tredjepartsinnhald" -#: lib/web/templates/api/terms.html.heex:88 #, elixir-format +#: lib/web/templates/api/terms.html.heex:88 msgctxt "terms" msgid "If you breach any of these Terms, we have the right to suspend or disable your access to or use of the Service." msgstr "" "Viss du bryt med desse vilkåra, har me rett til å sperra brukarkontoen din " "eller kasta deg ut frå tenesta." -#: lib/web/templates/api/terms.html.heex:63 #, elixir-format +#: lib/web/templates/api/terms.html.heex:63 msgctxt "terms" msgid "Impersonate or post on behalf of any person or entity or otherwise misrepresent your affiliation with a person or entity;" msgstr "" "Gje seg ut for å vera nokon andre, eller leggja ut innhald på deira vegner, " "eller elles misbruka tilknytinga di til ein person eller ei eining;" -#: lib/web/templates/api/terms.html.heex:48 #, elixir-format +#: lib/web/templates/api/terms.html.heex:48 msgctxt "terms" msgid "Our Service allows you and other users to post, link and otherwise make available content. You are responsible for the content that you make available to the Service, including its legality, reliability, and appropriateness." msgstr "" @@ -579,26 +579,26 @@ msgstr "" "denne tenesta. Det tyder òg at du er ansvarleg for om innhaldet er lovleg, " "til å lita på, og høver for dei som ser det." -#: lib/web/templates/api/terms.html.heex:39 #, elixir-format +#: lib/web/templates/api/terms.html.heex:39 msgctxt "terms" msgid "Privacy Policy" msgstr "Personvernretningsliner" -#: lib/web/templates/api/terms.html.heex:95 #, elixir-format +#: lib/web/templates/api/terms.html.heex:95 msgctxt "terms" msgid "Questions & Contact Information" msgstr "Spørsmål & kontakt" -#: lib/web/templates/api/terms.html.heex:87 #, elixir-format +#: lib/web/templates/api/terms.html.heex:87 msgctxt "terms" msgid "Termination" msgstr "Opphøyr" -#: lib/web/templates/api/terms.html.heex:62 #, elixir-format +#: lib/web/templates/api/terms.html.heex:62 msgctxt "terms" msgid "Use the Service in any manner that could interfere with, disrupt, negatively affect or inhibit other users from fully enjoying the Service or that could damage, disable, overburden or impair the functioning of the Service;" msgstr "" @@ -606,14 +606,14 @@ msgstr "" "eller hindra andre i å bruka tenesta; eller som kan skada, setja ut av " "drift, overlasta eller hindra funksjonane på tenesta;" -#: lib/web/templates/api/terms.html.heex:47 #, elixir-format +#: lib/web/templates/api/terms.html.heex:47 msgctxt "terms" msgid "Your Content & Conduct" msgstr "Innhaldet og åtferda di" -#: lib/web/templates/api/terms.html.heex:84 #, elixir-format +#: lib/web/templates/api/terms.html.heex:84 msgctxt "terms" msgid "<b>%{instance_name}</b> makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. The inclusion of any link does not imply endorsement by <b>%{instance_name}</b> of the site. Use of any such linked website is at the user's own risk." msgstr "" @@ -624,8 +624,8 @@ msgstr "" "tyder ikkje det at me går gode for innhaldet der. Du bruker alle lenker på " "eigen risiko." -#: lib/web/templates/api/terms.html.heex:68 #, elixir-format +#: lib/web/templates/api/terms.html.heex:68 msgctxt "terms" msgid "Finally, your use of the Service is also subject to acceptance of <a href=\"/rules\">the instance's own specific rules</a> regarding the code of conduct and moderation rules. Breaking those rules may also result in your account being disabled or suspended." msgstr "" @@ -633,16 +633,16 @@ msgstr "" "om åtferd og styring når du bruker nettstaden vår. Dersom du bryt reglane, " "kan det føra til at du blir utestengt eller at brukarkontoen din blir sperra." -#: lib/web/templates/api/terms.html.heex:81 #, elixir-format +#: lib/web/templates/api/terms.html.heex:81 msgctxt "terms" msgid "For full details about the Mobilizon software <a href=\"https://joinmobilizon.org\">see here</a>." msgstr "" "Les meir om Mobilizon-programvara <a href=\"https://joinmobilizon.org\"" ">her</a>." -#: lib/web/templates/api/terms.html.heex:18 #, elixir-format +#: lib/web/templates/api/terms.html.heex:18 msgctxt "terms" msgid "Here are the important things you need to know about accessing and using the <b>%{instance_name}</b> (<a href=\"https://%{instance_url}\">%{instance_url}</a>) website and service (collectively, \"Service\"). These are our terms of service (\"Terms\"). Please read them carefully." msgstr "" @@ -650,8 +650,8 @@ msgstr "" "href=\"https://%{instance_url}\">%{instance_url}</a>)-nettstaden og " "tenestene der (framover \"tenesta\"). her er vikåra, som me bed deg lesa." -#: lib/web/templates/api/terms.html.heex:33 #, elixir-format +#: lib/web/templates/api/terms.html.heex:33 msgctxt "terms" msgid "If we make major changes, we will notify our users in a clear and prominent manner. Minor changes may only be highlighted in the footer of our website. It is your responsibility to check the website regularly for changes to these Terms." msgstr "" @@ -660,8 +660,8 @@ msgstr "" "på nettsida vår. Viss du er interessert i endringane i vilkåra, må du fylgja " "med på nettsida." -#: lib/web/templates/api/terms.html.heex:53 #, elixir-format +#: lib/web/templates/api/terms.html.heex:53 msgctxt "terms" msgid "In order to make <b>%{instance_name}</b> a great place for all of us, please do not post, link and otherwise make available on or through the Service any of the following:" msgstr "" @@ -669,16 +669,16 @@ msgstr "" "ved å ikkje leggja ut, lenka eller visa til noko av det fylgjande når du " "bruker nettstaden:" -#: lib/web/templates/api/terms.html.heex:57 #, elixir-format +#: lib/web/templates/api/terms.html.heex:57 msgctxt "terms" msgid "Private information of any third party (e.g., addresses, phone numbers, email addresses, Social Security numbers and credit card numbers); and" msgstr "" "Privatopplysingar til tredjepartar (td. adresser, telefonnummer, " "epostadresser, personnummer og kredittkortnummer); og" -#: lib/web/templates/api/terms.html.heex:52 #, elixir-format +#: lib/web/templates/api/terms.html.heex:52 msgctxt "terms" msgid "Since Mobilizon is a distributed network, it is possible, depending on the visibility rules set to your content, that your content has been distributed to other Mobilizon instances. When you delete your content, we will request those other instances to also delete the content. Our responsibility on the content being deleted from those other instances ends here. If for some reason, some other instance does not delete the content, we cannot be held responsible." msgstr "" @@ -689,8 +689,8 @@ msgstr "" "innhaldet ditt på andre nettstader. Me er ikkje ansvarlege viss andre " "nettstader av ein eller annan grunn ikkje slettar innhaldet ditt." -#: lib/web/templates/api/terms.html.heex:90 #, elixir-format +#: lib/web/templates/api/terms.html.heex:90 msgctxt "terms" msgid "These Terms constitute the entire agreement between you and <b>%{instance_name}</b> regarding the use of the Service, superseding any prior agreements between you and <b>%{instance_name}</b> relating to your use of the Service." msgstr "" @@ -698,8 +698,8 @@ msgstr "" "å bruka tenesta, og avløyser alle tidlegare avtaler mellom deg og " "<b>%{instance_name}</b> om det same." -#: lib/web/templates/api/terms.html.heex:80 #, elixir-format +#: lib/web/templates/api/terms.html.heex:80 msgctxt "terms" msgid "This Service runs on a Mobilizon instance. This source code is licensed under an <a href=\"https://tldrlegal.com/license/gnu-affero-general-public-license-v3-(agpl-3.0)\">AGPLv3 license</a> which means you are allowed to and even encouraged to take the source code, modify it and use it." msgstr "" @@ -708,16 +708,16 @@ msgstr "" "license-v3-(agpl-3.0)\">AGPLv3-lisensen</a>, som både gjev deg høve til, og " "faktisk oppmodar deg til, å sjå på, bruka og endra kjeldekoden." -#: lib/web/templates/api/terms.html.heex:58 #, elixir-format +#: lib/web/templates/api/terms.html.heex:58 msgctxt "terms" msgid "Viruses, corrupted data or other harmful, disruptive or destructive files or code." msgstr "" "Virus, øydelagde data eller andre skadelege, forstyrrande og øydeleggjande " "filer eller kode." -#: lib/web/templates/api/terms.html.heex:51 #, elixir-format +#: lib/web/templates/api/terms.html.heex:51 msgctxt "terms" msgid "You can remove the content that you posted by deleting it. Once you delete your content, it will not appear on the Service, but copies of your deleted content may remain in our system or backups for some period of time. Web server access logs might also be stored for some time in the system." msgstr "" @@ -726,29 +726,29 @@ msgstr "" "det i systemet eller tryggingskopiane våre i noko tid. Tilgangsloggar frå " "vevtenaren kan òg bli lagra i noko tid." -#: lib/web/templates/api/terms.html.heex:96 #, elixir-format +#: lib/web/templates/api/terms.html.heex:96 msgctxt "terms" msgid "Questions or comments about the Service may be directed to us at %{contact}" msgstr "" "Du kan senda spørsmål eller kommentarar om tenesta til oss på %{contact}" -#: lib/web/templates/api/terms.html.heex:79 #, elixir-format +#: lib/web/templates/api/terms.html.heex:79 msgctxt "terms" msgid "Source code" msgstr "Kjeldekode" -#: lib/web/templates/api/terms.html.heex:93 #, elixir-format +#: lib/web/templates/api/terms.html.heex:93 msgctxt "terms" msgid "We love feedback. Please let us know what you think of the Service, these Terms and, in general, <b>%{instance_name}</b>." msgstr "" "Me likar tilbakemeldingar! Sei gjerne kva du synest om tenesta, vilkåra og " "kva som helst om <b>%{instance_name}</b>." -#: lib/web/templates/api/terms.html.heex:74 #, elixir-format +#: lib/web/templates/api/terms.html.heex:74 msgctxt "terms" msgid "Instance administrators (and community moderators, given the relevant access) are responsible for monitoring and acting on flagged content and other user reports, and have the right and responsibility to remove or edit content that is not aligned to this Instance set of rules, or to suspend, block or ban (temporarily or permanently) any account, community, or instance for breaking these terms, or for other behaviours that they deem inappropriate, threatening, offensive, or harmful." msgstr "" @@ -760,16 +760,16 @@ msgstr "" "same gjeld andre nettstader og brukarsamfunn, og åtferd som dei meiner er " "upassande, trugande, krenkjande eller skadeleg." -#: lib/web/templates/api/terms.html.heex:6 #, elixir-format +#: lib/web/templates/api/terms.html.heex:6 msgctxt "terms" msgid "<b>%{instance_name}</b> will not use or transmit or resell your personal data" msgstr "" "<b>%{instance_name}</b> korkje bruker, overfører eller sel " "personopplysingane dine" -#: lib/web/templates/api/terms.html.heex:44 #, elixir-format +#: lib/web/templates/api/terms.html.heex:44 msgctxt "terms" msgid "If you discover or suspect any Service security breaches, please let us know as soon as possible. For security holes in the Mobilizon software itself, please contact <a href=\"https://framagit.org/framasoft/mobilizon/\">its contributors</a> directly." msgstr "" @@ -778,16 +778,16 @@ msgstr "" "programvara, bed me deg kontakta <a href=\"https://framagit.org/framasoft/" "mobilizon/\">Framasoft</a> direkte." -#: lib/web/templates/api/terms.html.heex:77 #, elixir-format +#: lib/web/templates/api/terms.html.heex:77 msgctxt "terms" msgid "Instance administrators should ensure that every community hosted on the instance is properly moderated according to the defined rules." msgstr "" "Styrarane på nettstaden bør passa på at alle brukarsamfunna som er på " "nettstaden blir styrte etter retningslinene som er fastsette." -#: lib/web/templates/api/terms.html.heex:98 #, elixir-format +#: lib/web/templates/api/terms.html.heex:98 msgctxt "terms" msgid "Originally adapted from the <a href=\"https://joindiaspora.com/terms\">Diaspora*</a> and <a href=\"https://github.com/appdotnet/terms-of-service\">App.net</a> privacy policies, also licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>." msgstr "" @@ -796,8 +796,8 @@ msgstr "" "appdotnet/terms-of-service\">App.net</a>, som òg er under <a href=\"https" "://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>-lisensen." -#: lib/web/templates/api/privacy.html.heex:119 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:119 msgctxt "terms" msgid "Originally adapted from the <a href=\"https://mastodon.social/terms\">Mastodon</a> and <a href=\"https://github.com/discourse/discourse\">Discourse</a> privacy policies, also licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>." msgstr "" @@ -806,22 +806,22 @@ msgstr "" "discourse\">Discourse</a>, som òg er under <a href=\"https://creativecommons." "org/licenses/by-sa/4.0/\">CC BY-SA</a>-lisensen." -#: lib/web/templates/api/terms.html.heex:3 #, elixir-format +#: lib/web/templates/api/terms.html.heex:3 msgctxt "terms" msgid "Short version" msgstr "Kortversjon" -#: lib/web/templates/api/terms.html.heex:9 #, elixir-format +#: lib/web/templates/api/terms.html.heex:9 msgctxt "terms" msgid "The service is provided without warranties and these terms may change in the future" msgstr "" "Me driv denne tenesta utan å yta garantiar, og desse vilkåra kan bli endra i " "framtida" -#: lib/web/templates/api/privacy.html.heex:118 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:118 msgctxt "terms" msgid "This document is licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>. It was last updated June 18, 2020." msgstr "" @@ -829,8 +829,8 @@ msgstr "" "licenses/by-sa/4.0/\">CC BY-SA</a>-lisensen. Det vart sist endra 18. juni " "2020." -#: lib/web/templates/api/terms.html.heex:97 #, elixir-format +#: lib/web/templates/api/terms.html.heex:97 msgctxt "terms" msgid "This document is licensed under <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">CC BY-SA</a>. It was last updated June 22, 2020." msgstr "" @@ -838,83 +838,83 @@ msgstr "" "licenses/by-sa/4.0/\">CC BY-SA</a>-lisensen. Det vart sist endra 22. juni " "2020." -#: lib/web/templates/api/terms.html.heex:8 #, elixir-format +#: lib/web/templates/api/terms.html.heex:8 msgctxt "terms" msgid "You must respect other people and <b>%{instance_name}</b>'s rules when using the service" msgstr "" "Du må respektera andre menneske og halda reglane på <b>%{instance_name}</b> " "når du bruker denne tenesta" -#: lib/web/templates/api/terms.html.heex:7 #, elixir-format +#: lib/web/templates/api/terms.html.heex:7 msgctxt "terms" msgid "You must respect the law when using <b>%{instance_name}</b>" msgstr "Du må fylgja lovene når du bruker <b>%{instance_name}</b>" -#: lib/web/templates/api/terms.html.heex:5 #, elixir-format +#: lib/web/templates/api/terms.html.heex:5 msgctxt "terms" msgid "Your content is yours" msgstr "Du eig det du lagar" -#: lib/web/templates/email/anonymous_participation_confirmation.html.heex:51 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.heex:51 msgid "Confirm my e-mail address" msgstr "Stadfest epostadressa mi" +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.heex:13 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:1 -#, elixir-format msgid "Confirm your e-mail" msgstr "Stadfest epostadressa di" -#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "Hei! Du har akkurat meldt deg på denne hendinga: « %{title} ». Stadfest " "epostadressa du skreiv inn:" +#, elixir-format #: lib/web/templates/email/email.html.heex:115 #: lib/web/templates/email/email.text.eex:8 -#, elixir-format msgid "Need help? Is something not working as expected?" msgstr "Treng du hjelp, eller er det noko som ikkje verkar slik du venta?" -#: lib/web/templates/email/registration_confirmation.html.heex:38 #, elixir-format +#: lib/web/templates/email/registration_confirmation.html.heex:38 msgid "You created an account on <b>%{host}</b> with this email address. You are one click away from activating it." msgstr "" "Du har laga ein konto på <b>%{host}</b> med denne epostadressa. Du er berre " "eitt klikk unna å ta kontoen i bruk." -#: lib/web/templates/email/report.html.heex:13 #, elixir-format +#: lib/web/templates/email/report.html.heex:13 msgid "New report on <b>%{instance}</b>" msgstr "Ny rapport på <b>%{instance}</b>" -#: lib/web/templates/email/email_changed_old.html.heex:38 #, elixir-format +#: lib/web/templates/email/email_changed_old.html.heex:38 msgid "The email address for your account on <b>%{host}</b> is being changed to:" msgstr "Epostadressa for brukarkontoen din på <b>%{host}</b> blir no endra til:" -#: lib/web/templates/email/password_reset.html.heex:38 #, elixir-format +#: lib/web/templates/email/password_reset.html.heex:38 msgid "You requested a new password for your account on <b>%{instance}</b>." msgstr "Du har bede om eit nytt passord for kontoen din på <b>%{instance}</b>." -#: lib/web/templates/email/email.text.eex:5 #, elixir-format +#: lib/web/templates/email/email.text.eex:5 msgid "Please do not use it for real purposes." msgstr "Ikkje bruk han på ordentleg." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.heex:63 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:6 lib/web/templates/email/event_updated.html.heex:133 #: lib/web/templates/email/event_updated.text.eex:24 lib/web/templates/email/notification_each_week.html.heex:70 #: lib/web/templates/email/notification_each_week.text.eex:11 lib/web/templates/email/on_day_notification.html.heex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 -#, elixir-format msgid "Would you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button." msgstr[0] "" @@ -924,9 +924,9 @@ msgstr[1] "" "Viss du vil avbryta deltakinga di på ei eller fleire hendingar, kan du gå " "til hendingssidene via lenkene over og klikka på «deltek»-knappen." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:38 #: lib/web/templates/email/pending_participation_notification.text.eex:4 -#, elixir-format msgid "You have one pending attendance request to process:" msgid_plural "You have %{number_participation_requests} attendance requests to process:" msgstr[0] "Du har ein førespurnad om deltaking å handtera:" @@ -934,66 +934,66 @@ msgstr[1] "" "Du har %{number_participation_requests} førespurnader om deltaking å " "handtera:" -#: lib/web/templates/email/email.text.eex:11 #, elixir-format +#: lib/web/templates/email/email.text.eex:11 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} er ein Mobilizon-nettstad." -#: lib/web/templates/email/email.html.heex:143 #, elixir-format +#: lib/web/templates/email/email.html.heex:143 msgid "<b>%{instance}</b> is powered by Mobilizon." msgstr "<b>%{instance}</b> er ein Mobilizon-nettstad." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:13 #: lib/web/templates/email/pending_participation_notification.text.eex:1 -#, elixir-format msgid "A request is pending!" msgstr "Ein førespurnad ventar på deg!" +#, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:13 #: lib/web/templates/email/before_event_notification.text.eex:1 -#, elixir-format msgid "An event is upcoming!" msgstr "Ei hending skjer snart!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.heex:13 #: lib/web/templates/email/email_changed_new.text.eex:1 -#, elixir-format msgid "Confirm new email" msgstr "Stadfest ny epostadresse" -#: lib/web/templates/email/event_updated.html.heex:84 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:84 msgid "End" msgstr "Slutt" -#: lib/web/templates/email/event_updated.text.eex:21 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:21 msgid "End %{ends_on}" msgstr "Slutt %{ends_on}" +#, elixir-format #: lib/web/templates/email/event_updated.html.heex:13 #: lib/web/templates/email/event_updated.text.eex:1 -#, elixir-format msgid "Event update!" msgstr "Oppdatert hending!" -#: lib/web/templates/email/report.html.heex:88 #, elixir-format +#: lib/web/templates/email/report.html.heex:88 msgid "Flagged comments" msgstr "Flagga kommentarar" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.heex:45 #: lib/web/templates/email/event_participation_approved.text.eex:7 -#, elixir-format msgid "Good news: one of the event organizers just approved your request. Update your calendar, because you're on the guest list now!" msgstr "" "Godt nytt: Ein av tilskiparane har godkjent at du deltek. Skriv det i " "kalenderen din, for du er på gjestelista!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.heex:38 #: lib/web/templates/email/email_changed_new.text.eex:3 -#, elixir-format msgid "Hi there! It seems like you wanted to change the email address linked to your account on <b>%{instance}</b>. If you still wish to do so, please click the button below to confirm the change. You will then be able to log in to %{instance} with this new email address." msgstr "" "Hei! Det ser ut til at du vil endra epostadressa du har brukt til " @@ -1001,16 +1001,16 @@ msgstr "" "du klikka på knappen under for å stadfesta dndringa. Etterpå kan du logga " "inn på %{instance} med den nye adressa." -#: lib/web/templates/email/email_changed_old.text.eex:3 #, elixir-format +#: lib/web/templates/email/email_changed_old.text.eex:3 msgid "Hi there! Just a quick note to confirm that the email address linked to your account on %{host} has been changed from this one to:" msgstr "" "Hei! Berre ei lita melding for å stadfesta at epostadressa til kontoen din " "på %{host} er endra frå denne til:" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.heex:62 #: lib/web/templates/email/email_changed_old.text.eex:5 -#, elixir-format msgid "If you did not trigger this change yourself, it is likely that someone has gained access to your %{host} account. Please log in and change your password immediately. If you cannot login, contact the admin on %{host}." msgstr "" "Viss du ikkje gjorde denne endringa sjølv, er det sannsynleg at nokon har " @@ -1018,316 +1018,316 @@ msgstr "" "ditt med ein gong. Viss du ikkje kan logga inn, bør du kontakta styraren på " "%{host}." -#: lib/web/templates/email/password_reset.text.eex:12 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:12 msgid "If you didn't trigger the change yourself, please ignore this message. Your password won't be changed until you click the link above." msgstr "" "Viss du ikkje gjorde dette sjølv, kan du oversjå denne meldinga. Passordet " "ditt blir ikkje endra med mindre du klikkar på lenka over." +#, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.heex:70 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:4 lib/web/templates/email/registration_confirmation.html.heex:45 -#, elixir-format msgid "If you didn't trigger this email, you may safely ignore it." msgstr "Viss du ikkje gjorde dette sjølv, kan du trygt sjå bort frå dette." +#, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:63 #: lib/web/templates/email/before_event_notification.text.eex:6 -#, elixir-format msgid "If you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgstr "" "Viss du ikkje vil delta likevel, kan du gå til hendingssida med lenka over " "og klkka på «Deltek»-knappen." +#, elixir-format #: lib/web/templates/email/email.html.heex:144 #: lib/web/templates/email/email.text.eex:11 -#, elixir-format msgid "Learn more about Mobilizon here!" msgstr "Lær meir om Mobilizon her!" +#, elixir-format #: lib/web/templates/email/event_updated.html.heex:94 #: lib/web/templates/export/event_participants.html.heex:129 -#, elixir-format msgid "Location" msgstr "Stad" -#: lib/web/templates/email/event_updated.html.heex:104 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:104 msgid "Location address was removed" msgstr "Adressa vart fjerna" +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:51 #: lib/web/templates/email/pending_participation_notification.text.eex:6 -#, elixir-format msgid "Manage pending requests" msgstr "Sjå over ventande førespurnader" +#, elixir-format #: lib/web/templates/email/registration_confirmation.html.heex:13 #: lib/web/templates/email/registration_confirmation.text.eex:1 -#, elixir-format msgid "Nearly there!" msgstr "Nesten klar!" +#, elixir-format #: lib/web/templates/email/email_changed_old.html.heex:13 #: lib/web/templates/email/email_changed_old.text.eex:1 -#, elixir-format msgid "New email confirmation" msgstr "Ny stadfestingsepost" -#: lib/web/templates/email/report.html.heex:106 #, elixir-format +#: lib/web/templates/email/report.html.heex:106 msgid "Reasons for report" msgstr "Grungjeving for rapporten" -#: lib/web/templates/email/report.html.heex:39 #, elixir-format +#: lib/web/templates/email/report.html.heex:39 msgid "Someone on <b>%{instance}</b> reported the following content for you to analyze:" msgstr "" "Nokon på <b>%{instance}</b> rapporterte dette, slik at du kan sjå på det:" +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.heex:13 #: lib/web/templates/email/event_participation_rejected.text.eex:1 -#, elixir-format msgid "Sorry! You're not going." msgstr "Orsak! Du er ikkje påmeld." -#: lib/web/templates/email/event_updated.html.heex:74 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:74 msgid "Start" msgstr "Start" -#: lib/web/templates/email/event_updated.text.eex:18 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:18 msgid "Start %{begins_on}" msgstr "Startar %{begins_on}" -#: lib/web/templates/email/event_updated.text.eex:3 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:3 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "%{title} er endra, så me tenkte du ville vita det." +#, elixir-format #: lib/web/templates/email/event_updated.html.heex:55 #: lib/web/templates/email/event_updated.text.eex:11 -#, elixir-format msgid "This event has been cancelled by its organizers. Sorry!" msgstr "Tilskiparane har avlyst denne hendinga. Me orsakar!" +#, elixir-format #: lib/web/templates/email/event_updated.html.heex:51 #: lib/web/templates/email/event_updated.text.eex:7 -#, elixir-format msgid "This event has been confirmed" msgstr "Denne hendinga er stadfesta" +#, elixir-format #: lib/web/templates/email/event_updated.html.heex:53 #: lib/web/templates/email/event_updated.text.eex:9 -#, elixir-format msgid "This event has yet to be confirmed: organizers will let you know if they do confirm it." msgstr "" "Denne hendinga er ikkje stadfesta enno. Tilskiparane seier frå viss dei " "stadfestar ho." +#, elixir-format #: lib/web/templates/email/event_participation_rejected.html.heex:45 #: lib/web/templates/email/event_participation_rejected.text.eex:7 -#, elixir-format msgid "Unfortunately, the organizers rejected your request." msgstr "Tilskiparane har diverre avslege førespurnaden din." -#: lib/web/templates/email/email_changed_new.html.heex:51 #, elixir-format +#: lib/web/templates/email/email_changed_new.html.heex:51 msgid "Verify your email address" msgstr "Stadfest epostadressa di" -#: lib/web/templates/email/report.html.heex:126 #, elixir-format +#: lib/web/templates/email/report.html.heex:126 msgid "View report" msgstr "Les rapporten" -#: lib/web/templates/email/report.text.eex:24 #, elixir-format +#: lib/web/templates/email/report.text.eex:24 msgid "View report:" msgstr "Les rapporten:" +#, elixir-format #: lib/web/templates/email/email_anonymous_activity.html.heex:67 #: lib/web/templates/email/event_participation_approved.html.heex:58 lib/web/templates/email/event_participation_confirmed.html.heex:58 -#, elixir-format msgid "Visit event page" msgstr "Sjå på hendingssida" -#: lib/web/templates/email/event_updated.html.heex:121 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:121 msgid "Visit the updated event page" msgstr "Sjå på den oppdaterte hendingssida" -#: lib/web/templates/email/event_updated.text.eex:23 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:23 msgid "Visit the updated event page: %{link}" msgstr "Sjå på den oppdaterte hendingssida: %{link}" +#, elixir-format #: lib/web/templates/email/notification_each_week.html.heex:13 #: lib/web/templates/email/notification_each_week.text.eex:1 -#, elixir-format msgid "What's up this week?" msgstr "Kva skjer denne veka?" +#, elixir-format #: lib/web/templates/email/on_day_notification.html.heex:13 #: lib/web/templates/email/on_day_notification.text.eex:1 -#, elixir-format msgid "What's up today?" msgstr "Kva skjer i dag?" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.heex:70 #: lib/web/templates/email/event_participation_approved.text.eex:11 lib/web/templates/email/event_participation_confirmed.html.heex:70 #: lib/web/templates/email/event_participation_confirmed.text.eex:6 -#, elixir-format msgid "Would you wish to update or cancel your attendance, simply access the event page through the link above and click on the Attending button." msgstr "" "Viss du vil oppdatera eller avbryta deltakinga di, kan du gå til " "hendingssida med lenka over og klikka på Deltek-knappen." +#, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:64 #: lib/web/templates/email/pending_participation_notification.text.eex:8 -#, elixir-format msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »." msgstr "" "Du får denne eposten fordi du har valt å få varslingar når det er ventande " "førespurnader til hendingane dine. Du kan skru av eller endra varsel i " "kontoinnstillingane dine, under «Varsel»." -#: lib/web/templates/email/event_participation_rejected.text.eex:5 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.text.eex:5 msgid "You issued a request to attend %{title}." msgstr "Du ba om å bli med på %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.text.eex:5 #: lib/web/templates/email/event_participation_confirmed.text.eex:3 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Du ba nyst om å vera med på %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.heex:13 #: lib/web/templates/email/event_participation_confirmed.html.heex:13 lib/web/templates/email/event_participation_confirmed.text.eex:1 -#, elixir-format msgid "You're going!" msgstr "Du skal dit!" +#, elixir-format #: lib/web/templates/email/email_changed_new.html.heex:64 #: lib/web/templates/email/email_changed_new.text.eex:5 -#, elixir-format msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" "Viss du ikkje endra dette sjølv, kan du trygt sjå bort frå denne meldinga." -#: lib/web/templates/email/email.html.heex:90 #, elixir-format +#: lib/web/templates/email/email.html.heex:90 msgid "<b>Please do not use it for real purposes.</b>" msgstr "<b>Ikkje bruk det på ordentleg.</b>" +#, elixir-format #: lib/web/templates/email/group_member_removal.html.heex:45 #: lib/web/templates/email/group_member_removal.text.eex:5 -#, elixir-format msgid "If you feel this is an error, you may contact the group's administrators so that they can add you back." msgstr "" "Viss du meiner dette er feil, kan du kontakta gruppestyrarane slik at dei " "kan leggja deg til att." +#, elixir-format #: lib/web/templates/email/group_member_removal.html.heex:13 #: lib/web/templates/email/group_member_removal.text.eex:1 -#, elixir-format msgid "So long, and thanks for the fish!" msgstr "Ha det så lenge, og takk for all fisken!" -#: lib/web/email/group.ex:63 #, elixir-format +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Du er fjerna frå gruppa %{group}" -#: lib/web/templates/email/group_member_removal.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_member_removal.text.eex:3 msgid "You have been removed from group %{group}. You will not be able to access this group's private content anymore." msgstr "" "Du er fjerna frå gruppa %{group}. Du kan ikkje lenger lesa innhald som er " "privat for denne gruppa." -#: lib/web/templates/email/group_invite.html.heex:38 #, elixir-format +#: lib/web/templates/email/group_invite.html.heex:38 msgid "<b>%{inviter}</b> just invited you to join their group %{link_start}<b>%{group}</b>%{link_end}" msgstr "" "<b>%{inviter}</b> har nett invitert deg til gruppa " "%{link_start}<b>%{group}</b>%{link_end}" -#: lib/web/templates/email/group_member_removal.html.heex:38 #, elixir-format +#: lib/web/templates/email/group_member_removal.html.heex:38 msgid "You have been removed from group %{link_start}<b>%{group}</b>%{link_end}. You will not be able to access this group's private content anymore." msgstr "" "Du er fjerna frå gruppa %{link_start}<b>%{group}</b>%{link_end}. Frå no kan " "du ikkje lesa privat innhald i denne gruppa." +#, elixir-format #: lib/web/templates/email/group_suspension.html.heex:54 #: lib/web/templates/email/group_suspension.text.eex:7 -#, elixir-format msgid "As this group was located on another instance, it will continue to work for other instances than this one." msgstr "" "Denne gruppa var på ein annan nettstad, og vil halda fram å verka for andre " "nettstader unnateke denne." +#, elixir-format #: lib/web/templates/email/group_suspension.html.heex:46 #: lib/web/templates/email/group_suspension.text.eex:5 -#, elixir-format msgid "As this group was located on this instance, all of it's data has been irretrievably deleted." msgstr "" "Denne gruppa var på ein annan nettstad, så alle data gruppa hadde er borte " "for alltid." +#, elixir-format #: lib/web/templates/email/group_suspension.html.heex:13 #: lib/web/templates/email/group_suspension.text.eex:1 -#, elixir-format msgid "The group %{group} has been suspended on %{instance}!" msgstr "Gruppa %{group} på %{instance} er sperra!" -#: lib/web/templates/email/group_suspension.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_suspension.text.eex:3 msgid "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group." msgstr "" "Styrarane på nettstaden din har avgjort å sperra gruppa %{group_name} " "(%{group_address}). Du er ikkje lenger medlem av gruppa." -#: lib/web/email/group.ex:97 #, elixir-format +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "Gruppa %{group} på %{instance} er sperra" -#: lib/web/templates/api/terms.html.heex:24 #, elixir-format +#: lib/web/templates/api/terms.html.heex:24 msgctxt "terms" msgid "By accessing or using the Service, this means you agree to be bound by all the terms below. If these terms are in any way unclear, please let us know by contacting %{contact}." msgstr "" "Ved å vitja eller bruka denne tenesta, er du bunden av alle vilkåra under. " "Viss vilkåra er uklåre, set me pris på om du kontaktar %{contact}." -#: lib/web/templates/api/terms.html.heex:40 #, elixir-format +#: lib/web/templates/api/terms.html.heex:40 msgctxt "terms" msgid "For information about how we collect and use information about users of the Service, please check our <a href=\"/privacy\">privacy policy</a>." msgstr "" "På <a href=\"/privacy\">personvernsida vår</a> kan du lesa meir om korleis " "me samlar og bruker informasjon om dei som bruker denne tenesta." -#: lib/web/templates/api/terms.html.heex:36 #, elixir-format +#: lib/web/templates/api/terms.html.heex:36 msgctxt "terms" msgid "If you continue to use the Service after the revised Terms go into effect, you accept the revised Terms." msgstr "" "Viss du held fram å bruka tenesta etter at dei endra vilkåra byrjar gjelda, " "tyder det at du godtek dei endra vilkåra." -#: lib/web/templates/api/privacy.html.heex:78 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:78 msgctxt "terms" msgid "If you delete this information, you need to login again." msgstr "Viss du slettar desse opplysingane, må du logga inn på nytt." -#: lib/web/templates/api/privacy.html.heex:80 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:80 msgctxt "terms" msgid "If you're not connected, we don't store any information on your device, unless you participate in an event anonymously. In this specific case we store the hash of an unique identifier for the event and participation status in your browser so that we may display participation status. Deleting this information will only stop displaying participation status in your browser." msgstr "" @@ -1338,31 +1338,31 @@ msgstr "" "Viss du slettar desse opplysingane, kjem ikkje nettlesaren din til å syna om " "du deltek eller ei." -#: lib/web/templates/api/privacy.html.heex:87 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:87 msgctxt "terms" msgid "Note: This information is stored in your localStorage and not your cookies." msgstr "" "Merk: Desse opplysingane blir lagra i lokallagringa di, og ikkje i " "infokapslane." -#: lib/web/templates/api/terms.html.heex:71 #, elixir-format +#: lib/web/templates/api/terms.html.heex:71 msgctxt "terms" msgid "Our responsibility" msgstr "Ansvaret vårt" -#: lib/web/templates/api/privacy.html.heex:61 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:61 msgctxt "terms" msgid "Retain server logs containing the IP address of all requests to this server, insofar as such logs are kept, no more than 90 days." msgstr "" "Å lagra tenarloggar med IP-adressene for alle førespurnader til denne " "tenaren, i den grad me lagrar loggar, i maksimalt 90 dagar." +#, elixir-format #: lib/web/templates/api/privacy.html.heex:3 #: lib/web/templates/api/terms.html.heex:15 -#, elixir-format msgctxt "terms" msgid "Some terms, technical or otherwise, used in the text below may cover concepts that are difficult to grasp. We have provided <a href=\"/glossary\">a glossary</a> to help you understand them better." msgstr "" @@ -1370,16 +1370,16 @@ msgstr "" "skjøna. Me har laga ei <a href=\"/glossary\">ordliste</a> som kan hjelpa deg " "å forstå dei." -#: lib/web/templates/api/terms.html.heex:45 #, elixir-format +#: lib/web/templates/api/terms.html.heex:45 msgctxt "terms" msgid "We are not liable for any loss you may incur as a result of someone else using your email or password, either with or without your knowledge." msgstr "" "Me er ikkje ansvarlege for tap som kan koma av at nokon andre bruker eposten " "og passordet ditt, anten du veit om det eller ikkje." -#: lib/web/templates/api/terms.html.heex:50 #, elixir-format +#: lib/web/templates/api/terms.html.heex:50 msgctxt "terms" msgid "We cannot be held responsible should a programming or administrative error make your content visible to a larger audience than intended. Aside from our limited right to your content, you retain all of your rights to the content you post, link and otherwise make available on or through the Service." msgstr "" @@ -1389,8 +1389,8 @@ msgstr "" "innhaldet du legg ut, lenkar eller gjer tilgjengeleg på eller gjennom " "tenesta." -#: lib/web/templates/api/privacy.html.heex:10 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:10 msgctxt "terms" msgid "We collect information from you when you register on this instance and gather data when you participate in the platform by reading, writing, and interacting with content shared here. If you register on this instance, you will be asked to enter <b>an email address, a password</b> (hashed) and at least <b>an username</b>. Your email address will be verified by an email containing a unique link. Once the link is activated, we know you control that email address. You may also enter additional profile information such as <b>a display name and biography, and upload a profile picture and header image</b>. The username, display name, biography, profile picture and header image <b>are always listed publicly</b>. <b>You may however visit this instance without registering</b>." msgstr "" @@ -1407,16 +1407,16 @@ msgstr "" "offentlege</b>. <b>Hugs at du kan vitja denne nettstaden utan å registrera " "deg</b>." -#: lib/web/templates/api/terms.html.heex:30 #, elixir-format +#: lib/web/templates/api/terms.html.heex:30 msgctxt "terms" msgid "We reserve the right to modify these Terms at any time. For instance, we may need to change these Terms if we come out with a new feature." msgstr "" "Me held på retten til å endra desse vilkåra til ei kvar tid. Til dømes kan " "me ha bruk for å endra vilkåra dersom det kjem nye funksjonar på nettstaden." -#: lib/web/templates/api/terms.html.heex:20 #, elixir-format +#: lib/web/templates/api/terms.html.heex:20 msgctxt "terms" msgid "When we say “we”, “our”, or “us” in this document, we are referring to the owners, operators and administrators of this Mobilizon instance. The Mobilizon software is provided by the team of Mobilizon contributors, supported by <a href=\"https://framasoft.org\">Framasoft</a>, a French not-for-profit organization advocating for Free/Libre Software. Unless explicitly stated, this Mobilizon instance is an independent service using Mobilizon's source code. You may find more information about this instance on the <a href=\"/about/instance\">\"About this instance\"</a> page." msgstr "" @@ -1429,8 +1429,8 @@ msgstr "" "lesa meir om denne nettstaden på <a href=\"/about/instance\">«Om " "oss»</a>-sida." -#: lib/web/templates/api/terms.html.heex:43 #, elixir-format +#: lib/web/templates/api/terms.html.heex:43 msgctxt "terms" msgid "When you create an account you agree to maintain the security and confidentiality of your password and accept all risks of unauthorized access to your account data and any other information you provide to <b>%{instance_name}</b>." msgstr "" @@ -1439,8 +1439,8 @@ msgstr "" "tilgang til kontoopplysingane dine eller andre opplysingar du gjev til " "<b>%{instance_name}</b>." -#: lib/web/templates/api/terms.html.heex:49 #, elixir-format +#: lib/web/templates/api/terms.html.heex:49 msgctxt "terms" msgid "When you post, link or otherwise make available content to the Service, you grant us the right and license to display and distribute your content on or through the Service (including via applications). We may format your content for display throughout the Service, but we will not edit or revise the substance of your content itself. The displaying and distribution of your content happens only according to the visibility rules you have set for the content. We will not modify the visibility of the content you have set." msgstr "" @@ -1452,8 +1452,8 @@ msgstr "" "avgrensingane du har gjeve for kvar innhaldet skal syna. Me vil ikkje endra " "dei innstillingane du har gjort for kvar innhaldet skal syna." -#: lib/web/templates/api/privacy.html.heex:19 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:19 msgctxt "terms" msgid "Your <b>events</b> and <b>comments</b> are delivered to other instances that follow your own, meaning they are delivered to different instances and copies are stored there. When you delete events or comments, this is likewise delivered to these other instances. All interactions related to event features - such as joining an event - or group features - such as managing resources - are federated as well. Please keep in mind that the operators of the instance and any receiving instances may view such messages and information, and that recipients may screenshot, copy or otherwise re-share them." msgstr "" @@ -1468,8 +1468,8 @@ msgstr "" "mottakarar kan kopiera, laga skjermbilete eller dela innhaldet på andre " "måtar." -#: lib/web/templates/api/privacy.html.heex:99 #, elixir-format +#: lib/web/templates/api/privacy.html.heex:99 msgctxt "terms" msgid "Your content may be downloaded by other instances in the network. Your public events and comments are delivered to the instances following your own instance. Content created through a group is forwarded to all the instances of all the members of the group, insofar as these members reside on a different instance than this one." msgstr "" @@ -1479,327 +1479,327 @@ msgstr "" "alle nettstader frå alle medlemer i gruppa, i den grad desse medlemene er på " "andre nettstader enn denne." -#: lib/web/templates/email/event_participation_confirmed.text.eex:4 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.text.eex:4 msgid "You have confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Du har stadfesta at du deltek. Skriv det inn i kalenderen din, for du står " "på gjestelista no!" +#, elixir-format #: lib/web/templates/email/event_participation_approved.html.heex:38 #: lib/web/templates/email/event_participation_confirmed.html.heex:38 -#, elixir-format msgid "You recently requested to attend <b>%{title}</b>." msgstr "Du ba nett om å vera med på <b>%{title}</b>." -#: lib/web/email/participation.ex:88 #, elixir-format +#: lib/web/email/participation.ex:88 msgid "Your participation to event %{title} has been confirmed" msgstr "Me har stadfesta at du deltek på hendinga %{title}" -#: lib/web/templates/email/report.html.heex:41 #, elixir-format +#: lib/web/templates/email/report.html.heex:41 msgid "<b>%{reporter}</b> reported the following content." msgstr "<b>%{reporter}</b> rapporterte dette innhaldet." -#: lib/web/templates/email/report.text.eex:5 #, elixir-format +#: lib/web/templates/email/report.text.eex:5 msgid "Group %{group} was reported" msgstr "Gruppa %{group} er rapportert" -#: lib/web/templates/email/report.html.heex:51 #, elixir-format +#: lib/web/templates/email/report.html.heex:51 msgid "Group reported" msgstr "Ei gruppe er rapportert" -#: lib/web/templates/email/report.text.eex:7 #, elixir-format +#: lib/web/templates/email/report.text.eex:7 msgid "Profile %{profile} was reported" msgstr "Profilen %{profile} er rapportert" -#: lib/web/templates/email/report.html.heex:56 #, elixir-format +#: lib/web/templates/email/report.html.heex:56 msgid "Profile reported" msgstr "Ein profil er rapportert" -#: lib/web/templates/email/event_participation_confirmed.html.heex:45 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.html.heex:45 msgid "You have now confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "No har du stadfesta at du deltek. Skriv det inn i kalenderen din, for du " "står på gjestelista no!" -#: lib/mobilizon/posts/post.ex:99 #, elixir-format +#: lib/mobilizon/posts/post.ex:99 msgid "A text is required for the post" msgstr "Du treng tekst i innlegget" -#: lib/mobilizon/posts/post.ex:98 #, elixir-format +#: lib/mobilizon/posts/post.ex:98 msgid "A title is required for the post" msgstr "Du treng ein tittel på innlegget" -#: lib/web/templates/email/instance_follow.text.eex:3 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:3 msgid "%{name} (%{domain}) just requested to follow your instance." msgstr "%{name} (%{domain}) har spurt om å fylgja nettstaden din." -#: lib/web/email/follow.ex:54 #, elixir-format +#: lib/web/email/follow.ex:54 msgid "%{name} requests to follow your instance" msgstr "%{name} spør om å fylgja nettstaden din" -#: lib/web/templates/email/instance_follow.html.heex:38 #, elixir-format +#: lib/web/templates/email/instance_follow.html.heex:38 msgid "<b>%{name} (%{domain})</b> just requested to follow your instance. If you accept, this instance will receive all of your instance's public events." msgstr "" "<b>%{name} (%{domain})</b> har nett spurt om å fylgja nettstaden din. Viss " "du seier ja, vil nettstaden få alle dei offentlege hendingane på nettstaden " "din." -#: lib/web/templates/email/instance_follow.text.eex:4 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:4 msgid "If you accept, this instance will receive all of your public events." msgstr "" "Viss du seier ja, vil nettstaden få alle dei offentlege hendingane dine." -#: lib/web/email/follow.ex:48 #, elixir-format +#: lib/web/email/follow.ex:48 msgid "Instance %{name} (%{domain}) requests to follow your instance" msgstr "Nettstaden %{name} (%{domain}) spør om å fylgja nettstaden din" -#: lib/web/templates/email/instance_follow.html.heex:66 #, elixir-format +#: lib/web/templates/email/instance_follow.html.heex:66 msgid "See the federation settings" msgstr "Sjå på innstillingane for spreiing" +#, elixir-format #: lib/web/templates/email/instance_follow.html.heex:52 #: lib/web/templates/email/instance_follow.text.eex:6 -#, elixir-format msgid "To accept this invitation, head over to the instance's admin settings." msgstr "" "Gå til administratorinnstillingane for nettstaden for å godta denne " "invitasjonen." +#, elixir-format #: lib/web/templates/email/instance_follow.html.heex:13 #: lib/web/templates/email/instance_follow.text.eex:1 -#, elixir-format msgid "Want to connect?" msgstr "Vil du kopla til?" +#, elixir-format #: lib/web/templates/email/instance_follow.html.heex:45 #: lib/web/templates/email/instance_follow.text.eex:5 -#, elixir-format msgid "Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too." msgstr "" "Merk: At %{name} (%{domain}) fylgjer deg, tyder ikkje plent at du fylgjer " "dei, men du kan be om å fylgja dei òg." -#: lib/web/templates/email/anonymous_participation_confirmation.html.heex:38 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.html.heex:38 msgid "Hi there! You just registered to join this event: « <b>%{title}</b> ». Please confirm the e-mail address you provided:" msgstr "" "Hei! Du melde deg akkurat på denne hendinga: «<b>%{title}</b>». Stadfest " "epostadressa du skreiv inn:" -#: lib/web/templates/email/event_participation_rejected.html.heex:38 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.html.heex:38 msgid "You issued a request to attend <b>%{title}</b>." msgstr "Du sende ein førespurnad om å vera med på <b>%{title}</b>." -#: lib/web/templates/email/event_updated.html.heex:64 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:64 msgid "Event title" msgstr "Namn på hendinga" -#: lib/web/templates/email/event_updated.html.heex:38 #, elixir-format +#: lib/web/templates/email/event_updated.html.heex:38 msgid "There have been changes for <b>%{title}</b> so we'd thought we'd let you know." msgstr "<b>%{title}</b> har vorte endra, så me tenkte du ville vita det." -#: lib/web/templates/error/500_page.html.heex:7 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:7 msgid "This page is not correct" msgstr "Denne sida er feil" -#: lib/web/templates/error/500_page.html.heex:50 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:50 msgid "We're sorry, but something went wrong on our end." msgstr "Orsak, det skjedde noko feil hjå oss." +#, elixir-format #: lib/web/templates/email/email.html.heex:89 #: lib/web/templates/email/email.text.eex:4 -#, elixir-format msgid "This is a demonstration site to test Mobilizon." msgstr "Dette er ei demoside for å prøva ut Mobilizon." +#, elixir-format #: lib/service/metadata/actor.ex:67 lib/service/metadata/actor.ex:75 #: lib/service/metadata/instance.ex:54 lib/service/metadata/instance.ex:60 -#, elixir-format msgid "%{name}'s feed" msgstr "Straumen til %{name}" -#: lib/service/export/feed.ex:122 #, elixir-format +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "Den private hendingsstraumen til %{actor} på %{instance}" -#: lib/service/export/feed.ex:117 #, elixir-format +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "Den offentlege hendingsstraumen til %{actor} på %{instance}" -#: lib/service/export/feed.ex:225 #, elixir-format +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "Straum for %{email} på %{instance}" -#: lib/web/templates/error/500_page.html.heex:57 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:57 msgid "If the issue persists, you may contact the server administrator at %{contact}." msgstr "" "Viss feilen held fram, kan du kontakta styraren for denne tenaren på " "%{contact}." -#: lib/web/templates/error/500_page.html.heex:55 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:55 msgid "If the issue persists, you may try to contact the server administrator." msgstr "" "Viss feilen held fram, kan du prøva å kontakta styraren på denne tenaren." -#: lib/web/templates/error/500_page.html.heex:68 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:68 msgid "Technical details" msgstr "Tekniske detaljar" -#: lib/web/templates/error/500_page.html.heex:52 #, elixir-format +#: lib/web/templates/error/500_page.html.heex:52 msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Mobilizon-tenaren ser ut til å vera nede i augeblinken." -#: lib/service/export/feed.ex:75 #, elixir-format +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "Offentleg straum for %{instance}" -#: lib/graphql/resolvers/user.ex:298 #, elixir-format +#: lib/graphql/resolvers/user.ex:298 msgid "The password you have choosen is too short. Please make sure your password contains at least 6 charaters." msgstr "Passordet er for kort. Det må ha minst 6 teikn." -#: lib/graphql/resolvers/user.ex:304 #, elixir-format +#: lib/graphql/resolvers/user.ex:304 msgid "The token you provided is invalid. Make sure that the URL is exactly the one provided inside the email you got." msgstr "" "Godkjenningsteiknet er ugyldig. Pass på at adressa er heilt lik den du fekk " "i eposten." -#: lib/web/email/actor.ex:44 #, elixir-format +#: lib/web/email/actor.ex:44 msgid "Your participation to %{event} has been cancelled!" msgstr "Du har meldt deg av deltakinga på %{title}!" +#, elixir-format #: lib/web/templates/email/actor_suspension_participants.html.heex:38 #: lib/web/templates/email/actor_suspension_participants.text.eex:3 -#, elixir-format msgid "Your instance's moderation team has decided to suspend %{actor_name} (%{actor_address}). All of their events have been removed and your participation to event %{event} cancelled." msgstr "" "Styrarane på nettstaden din har avgjort å sperra gruppa %{group_name} " "(%{group_address}). Du er ikkje lenger medlem av gruppa." -#: lib/web/templates/email/group_suspension.html.heex:38 #, elixir-format +#: lib/web/templates/email/group_suspension.html.heex:38 msgid "Your instance's moderation team has decided to suspend <b>%{group_name}</b> (%{group_address}). You are no longer a member of this group." msgstr "" "Styrarane på nettstaden din har avgjort å sperra gruppa <b>%{group_name}</b> " "(%{group_address}). Du er ikkje lenger medlem av gruppa." +#, elixir-format #: lib/web/templates/email/actor_suspension_participants.html.heex:13 #: lib/web/templates/email/actor_suspension_participants.text.eex:1 -#, elixir-format msgid "Your participation to %{event} on %{instance} has been cancelled!" msgstr "Du har meldt deg av %{event} på %{instance}!" #. File name template for exported list of participants. Should NOT contain spaces. Make sure the output is going to be something standardized that is acceptable as a file name on most systems. #. File name template for exported list of participants. Should NOT contain spaces. Make sure the output is going to be something standardized that is acceptable as a file name on most systems. #. File name template for exported list of participants. Should NOT contain spaces. Make sure the output is going to be something standardized that is acceptable as a file name on most systems. +#, elixir-format #: lib/service/export/participants/csv.ex:73 #: lib/service/export/participants/ods.ex:79 lib/service/export/participants/pdf.ex:93 -#, elixir-format msgid "%{event}_participants" msgstr "%{event}_deltakarar" -#: lib/service/export/participants/common.ex:61 #, elixir-format +#: lib/service/export/participants/common.ex:61 msgid "Participant message" msgstr "Deltakarmelding" -#: lib/service/export/participants/common.ex:61 #, elixir-format +#: lib/service/export/participants/common.ex:61 msgid "Participant name" msgstr "Deltakinga er godkjend" -#: lib/service/export/participants/common.ex:61 #, elixir-format +#: lib/service/export/participants/common.ex:61 msgid "Participant status" msgstr "Deltakarstatus" -#: lib/service/export/participants/common.ex:52 #, elixir-format +#: lib/service/export/participants/common.ex:52 msgid "Administrator" msgstr "Styrar" -#: lib/service/export/participants/common.ex:55 #, elixir-format +#: lib/service/export/participants/common.ex:55 msgid "Creator" msgstr "Opphavsperson" -#: lib/service/export/participants/common.ex:49 #, elixir-format +#: lib/service/export/participants/common.ex:49 msgid "Moderator" msgstr "Redaktør" -#: lib/service/export/participants/common.ex:37 #, elixir-format +#: lib/service/export/participants/common.ex:37 msgid "Not approved" msgstr "Ikkje godkjent" -#: lib/service/export/participants/common.ex:40 #, elixir-format +#: lib/service/export/participants/common.ex:40 msgid "Not confirmed" msgstr "Ikkje stadfesta" -#: lib/service/export/participants/common.ex:46 #, elixir-format +#: lib/service/export/participants/common.ex:46 msgid "Participant" msgstr "Deltakar" -#: lib/service/export/participants/common.ex:43 #, elixir-format +#: lib/service/export/participants/common.ex:43 msgid "Rejected" msgstr "Avvist" -#: lib/web/templates/export/event_participants.html.heex:122 #, elixir-format +#: lib/web/templates/export/event_participants.html.heex:122 msgid "Begins on" msgstr "Byrjar" -#: lib/web/templates/export/event_participants.html.heex:125 #, elixir-format +#: lib/web/templates/export/event_participants.html.heex:125 msgid "Ends on" msgstr "Slutt" -#: lib/web/templates/export/event_participants.html.heex:132 #, elixir-format +#: lib/web/templates/export/event_participants.html.heex:132 msgid "Number of participants" msgstr "Tal deltakarar" -#: lib/web/templates/export/event_participants.html.heex:120 #, elixir-format +#: lib/web/templates/export/event_participants.html.heex:120 msgid "Participants for %{event}" msgstr "Deltakinga er godkjend" -#: lib/service/export/participants/common.ex:88 #, elixir-format +#: lib/service/export/participants/common.ex:88 msgid "Anonymous participant" msgstr "Anonym deltakar" diff --git a/priv/gettext/nn/LC_MESSAGES/errors.po b/priv/gettext/nn/LC_MESSAGES/errors.po index eadb2397c..52454a67d 100644 --- a/priv/gettext/nn/LC_MESSAGES/errors.po +++ b/priv/gettext/nn/LC_MESSAGES/errors.po @@ -110,876 +110,896 @@ msgstr "må vera større enn eller lik %{number}" msgid "must be equal to %{number}" msgstr "må vera lik %{number}" -#: lib/graphql/resolvers/user.ex:107 #, elixir-format +#: lib/graphql/resolvers/user.ex:107 msgid "Cannot refresh the token" msgstr "Kan ikkje fornya teiknet" -#: lib/graphql/resolvers/group.ex:227 #, elixir-format +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "Denne brukaren er ikkje medlem av gruppa" -#: lib/graphql/resolvers/group.ex:231 #, elixir-format +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "Denne brukaren er ikkje styrar av gruppa" -#: lib/graphql/resolvers/user.ex:588 #, elixir-format +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Greidde ikkje lagra brukarinnstillingane" -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 #, elixir-format +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Fann ikkje gruppa" -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 #, elixir-format +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Fann ikkje gruppa med ID %{id}" -#: lib/graphql/resolvers/user.ex:85 #, elixir-format +#: lib/graphql/resolvers/user.ex:85 msgid "Impossible to authenticate, either your email or password are invalid." msgstr "Greier ikkje å logga inn. Epostadressa eller passordet ditt er feil." -#: lib/graphql/resolvers/group.ex:290 #, elixir-format +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Fann ikkje medlemen" -#: lib/graphql/resolvers/actor.ex:94 #, elixir-format +#: lib/graphql/resolvers/actor.ex:94 msgid "No profile found for the moderator user" msgstr "Fann ingen profil for moderator-brukaren" -#: lib/graphql/resolvers/user.ex:253 #, elixir-format +#: lib/graphql/resolvers/user.ex:253 msgid "No user to validate with this email was found" msgstr "Fann ingen brukar med denne eposten å godkjenna" -#: lib/graphql/resolvers/person.ex:314 lib/graphql/resolvers/user.ex:278 #, elixir-format +#: lib/graphql/resolvers/person.ex:314 lib/graphql/resolvers/user.ex:278 msgid "No user with this email was found" msgstr "Fann ingen brukar med denne eposten" +#, elixir-format #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:32 lib/graphql/resolvers/participant.ex:210 lib/graphql/resolvers/person.ex:236 #: lib/graphql/resolvers/person.ex:353 lib/graphql/resolvers/person.ex:380 lib/graphql/resolvers/person.ex:397 -#, elixir-format msgid "Profile is not owned by authenticated user" msgstr "Ingen godkjent brukar eig denne profilen" -#: lib/graphql/resolvers/user.ex:156 #, elixir-format +#: lib/graphql/resolvers/user.ex:156 msgid "Registrations are not open" msgstr "Det er ikkje opna for å registrera seg" -#: lib/graphql/resolvers/user.ex:407 #, elixir-format +#: lib/graphql/resolvers/user.ex:407 msgid "The current password is invalid" msgstr "Dette passordet er ugyldig" -#: lib/graphql/resolvers/user.ex:452 #, elixir-format +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "Den nye epostadressa ser ut til å vera feil" -#: lib/graphql/resolvers/user.ex:449 #, elixir-format +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "Den nye epostadressa må vera annleis" -#: lib/graphql/resolvers/user.ex:410 #, elixir-format +#: lib/graphql/resolvers/user.ex:410 msgid "The new password must be different" msgstr "Det nye passordet må vera annleis" -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 #, elixir-format +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "Dette passordet er ugyldig" -#: lib/graphql/resolvers/user.ex:414 #, elixir-format +#: lib/graphql/resolvers/user.ex:414 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "Dette passordet er for kort. Passord må ha minst 6 teikn." -#: lib/graphql/resolvers/user.ex:274 #, elixir-format +#: lib/graphql/resolvers/user.ex:274 msgid "This user can't reset their password" msgstr "Denne brukaren kan ikkje nullstilla passordet sitt" -#: lib/graphql/resolvers/user.ex:81 #, elixir-format +#: lib/graphql/resolvers/user.ex:81 msgid "This user has been disabled" msgstr "Denne brukaren er avskrudd" -#: lib/graphql/resolvers/user.ex:232 lib/graphql/resolvers/user.ex:237 #, elixir-format +#: lib/graphql/resolvers/user.ex:232 lib/graphql/resolvers/user.ex:237 msgid "Unable to validate user" msgstr "Greier ikkje godkjenna brukaren" -#: lib/graphql/resolvers/user.ex:496 #, elixir-format +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "Brukaren er allereie inaktiv" -#: lib/graphql/resolvers/user.ex:563 #, elixir-format +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "Den førespurte brukaren er ikkje innlogga" -#: lib/graphql/resolvers/group.ex:262 #, elixir-format +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Du er allereie medlem av denne gruppa" -#: lib/graphql/resolvers/group.ex:297 #, elixir-format +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "Du kan ikkje forlata denne gruppa, fordi du er den einaste styraren" -#: lib/graphql/resolvers/group.ex:259 #, elixir-format +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "Du kan ikkje bli med i denne gruppa" -#: lib/graphql/resolvers/group.ex:111 #, elixir-format +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "Du kan ikkje lista opp grupper med mindre du er moderator." -#: lib/graphql/resolvers/user.ex:461 #, elixir-format +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "Du må vera innlogga for å endra epostadressa di" -#: lib/graphql/resolvers/user.ex:422 #, elixir-format +#: lib/graphql/resolvers/user.ex:422 msgid "You need to be logged-in to change your password" msgstr "Du må vera innlogga for å endra passordet ditt" -#: lib/graphql/resolvers/group.ex:236 #, elixir-format +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "Du må vera innlogga for å sletta ei gruppe" -#: lib/graphql/resolvers/user.ex:523 #, elixir-format +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "Du må vera innlogga for å sletta kontoen din" -#: lib/graphql/resolvers/group.ex:267 #, elixir-format +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "Du må vera innlogga for å bli med i ei gruppe" -#: lib/graphql/resolvers/group.ex:302 #, elixir-format +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "Du må vera innlogga for å forlata ei gruppe" -#: lib/graphql/resolvers/group.ex:200 #, elixir-format +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "Du må vera innlogga for å oppdatera ei gruppe" -#: lib/graphql/resolvers/user.ex:112 #, elixir-format +#: lib/graphql/resolvers/user.ex:112 msgid "You need to have an existing token to get a refresh token" msgstr "Du treng eit eksisterande teikn for å få eit fornyingsteikn" -#: lib/graphql/resolvers/user.ex:256 lib/graphql/resolvers/user.ex:281 #, elixir-format +#: lib/graphql/resolvers/user.ex:256 lib/graphql/resolvers/user.ex:281 msgid "You requested again a confirmation email too soon" msgstr "Du ba om ny stadfestingsepost for snøgt" -#: lib/graphql/resolvers/user.ex:159 #, elixir-format +#: lib/graphql/resolvers/user.ex:159 msgid "Your email is not on the allowlist" msgstr "Epostadressa di er ikkje på lista over godkjende adresser" -#: lib/graphql/resolvers/actor.ex:100 #, elixir-format +#: lib/graphql/resolvers/actor.ex:100 msgid "Error while performing background task" msgstr "Greidde ikkje utføra ei bakgrunnsoppgåve" -#: lib/graphql/resolvers/actor.ex:32 #, elixir-format +#: lib/graphql/resolvers/actor.ex:32 msgid "No profile found with this ID" msgstr "Fann ingen profil med denne ID-en" -#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:97 #, elixir-format +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:97 msgid "No remote profile found with this ID" msgstr "Fann ingen fjern profil med denne ID-en" -#: lib/graphql/resolvers/actor.ex:72 #, elixir-format +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Berre moderatorar og styrarar kan sperra ein profil" -#: lib/graphql/resolvers/actor.ex:105 #, elixir-format +#: lib/graphql/resolvers/actor.ex:105 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Berre moderatorar og styrarar kan oppheva sperring av profilar" -#: lib/graphql/resolvers/actor.ex:29 #, elixir-format +#: lib/graphql/resolvers/actor.ex:29 msgid "Only remote profiles may be refreshed" msgstr "Du kan berre lasta fjerne profilar på nytt" -#: lib/graphql/resolvers/actor.ex:64 #, elixir-format +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Profilen er allereie sperra" -#: lib/graphql/resolvers/participant.ex:96 #, elixir-format +#: lib/graphql/resolvers/participant.ex:96 msgid "A valid email is required by your instance" msgstr "Nettstaden din krev ei gyldig epostadresse" +#, elixir-format #: lib/graphql/resolvers/participant.ex:90 #: lib/graphql/resolvers/participant.ex:143 -#, elixir-format msgid "Anonymous participation is not enabled" msgstr "Det er ikkje høve til å vera med anonymt" -#: lib/graphql/resolvers/person.ex:210 #, elixir-format +#: lib/graphql/resolvers/person.ex:210 msgid "Cannot remove the last administrator of a group" msgstr "Kan ikkje fjerna den siste styraren i gruppa" -#: lib/graphql/resolvers/person.ex:207 #, elixir-format +#: lib/graphql/resolvers/person.ex:207 msgid "Cannot remove the last identity of a user" msgstr "Kan ikkje fjerna den siste identiteten til ein brukar" -#: lib/graphql/resolvers/comment.ex:125 #, elixir-format +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "Kommentaren er allereie sletta" -#: lib/graphql/error.ex:101 lib/graphql/resolvers/discussion.ex:75 #, elixir-format +#: lib/graphql/error.ex:101 lib/graphql/resolvers/discussion.ex:75 msgid "Discussion not found" msgstr "Fann ikkje ordskiftet" -#: lib/graphql/resolvers/report.ex:63 lib/graphql/resolvers/report.ex:82 #, elixir-format +#: lib/graphql/resolvers/report.ex:63 lib/graphql/resolvers/report.ex:82 msgid "Error while saving report" msgstr "Greidde ikkje lagra rapporten" -#: lib/graphql/resolvers/report.ex:102 #, elixir-format +#: lib/graphql/resolvers/report.ex:102 msgid "Error while updating report" msgstr "Greidde ikkje oppdatera rapporten" -#: lib/graphql/resolvers/participant.ex:131 #, elixir-format +#: lib/graphql/resolvers/participant.ex:131 msgid "Event id not found" msgstr "Fann ikkje ID-en til hendinga" -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 #, elixir-format +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Fann ikkje hendinga" +#, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 -#, elixir-format +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "Det finst inga hending med ID-en %{id}" -#: lib/graphql/resolvers/participant.ex:103 #, elixir-format +#: lib/graphql/resolvers/participant.ex:103 msgid "Internal Error" msgstr "Intern feil" -#: lib/graphql/resolvers/discussion.ex:225 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:225 msgid "No discussion with ID %{id}" msgstr "Ikkje noko ordskifte med ID-en %{id}" +#, elixir-format #: lib/graphql/resolvers/todos.ex:80 lib/graphql/resolvers/todos.ex:107 #: lib/graphql/resolvers/todos.ex:179 lib/graphql/resolvers/todos.ex:208 lib/graphql/resolvers/todos.ex:237 -#, elixir-format msgid "No profile found for user" msgstr "Fann ingen profil for brukaren" -#: lib/graphql/resolvers/feed_token.ex:64 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:64 msgid "No such feed token" msgstr "Det finst ikkje noko slikt teikn for kjelda" -#: lib/graphql/resolvers/participant.ex:259 #, elixir-format +#: lib/graphql/resolvers/participant.ex:259 msgid "Participant already has role %{role}" msgstr "Deltakaren har rolla %{role} allereie" +#, elixir-format #: lib/graphql/resolvers/participant.ex:187 #: lib/graphql/resolvers/participant.ex:220 lib/graphql/resolvers/participant.ex:263 -#, elixir-format msgid "Participant not found" msgstr "Fann ikkje deltakaren" -#: lib/graphql/resolvers/person.ex:32 #, elixir-format +#: lib/graphql/resolvers/person.ex:32 msgid "Person with ID %{id} not found" msgstr "Fann ingen person med ID-en %{id}" -#: lib/graphql/resolvers/person.ex:56 #, elixir-format +#: lib/graphql/resolvers/person.ex:56 msgid "Person with username %{username} not found" msgstr "Fann ingen person med brukarnamnet %{username}" -#: lib/graphql/resolvers/post.ex:169 lib/graphql/resolvers/post.ex:203 #, elixir-format +#: lib/graphql/resolvers/post.ex:169 lib/graphql/resolvers/post.ex:203 msgid "Post ID is not a valid ID" msgstr "Innleggs-IDen er ugyldig" -#: lib/graphql/resolvers/post.ex:172 lib/graphql/resolvers/post.ex:206 #, elixir-format +#: lib/graphql/resolvers/post.ex:172 lib/graphql/resolvers/post.ex:206 msgid "Post doesn't exist" msgstr "Innlegget finst ikkje" -#: lib/graphql/resolvers/member.ex:82 #, elixir-format +#: lib/graphql/resolvers/member.ex:82 msgid "Profile invited doesn't exist" msgstr "Den inviterte profilen finst ikkje" -#: lib/graphql/resolvers/member.ex:91 lib/graphql/resolvers/member.ex:95 #, elixir-format +#: lib/graphql/resolvers/member.ex:91 lib/graphql/resolvers/member.ex:95 msgid "Profile is already a member of this group" msgstr "Profilen er allereie medlem i denne gruppa" +#, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 -#, elixir-format msgid "Profile is not member of group" msgstr "Profilen er ikkje medlem i gruppa" -#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/person.ex:233 #, elixir-format +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/person.ex:233 msgid "Profile not found" msgstr "Fann ikkje profilen" -#: lib/graphql/resolvers/report.ex:40 #, elixir-format +#: lib/graphql/resolvers/report.ex:40 msgid "Report not found" msgstr "Fann ikkje rapporten" -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 #, elixir-format +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "Ressursen finst ikkje" -#: lib/graphql/resolvers/participant.ex:124 #, elixir-format +#: lib/graphql/resolvers/participant.ex:124 msgid "The event has already reached its maximum capacity" msgstr "Hendinga er fullteikna" -#: lib/graphql/resolvers/participant.ex:283 #, elixir-format +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "Teiknet er ugyldig" -#: lib/graphql/resolvers/todos.ex:176 lib/graphql/resolvers/todos.ex:243 #, elixir-format +#: lib/graphql/resolvers/todos.ex:176 lib/graphql/resolvers/todos.ex:243 msgid "Todo doesn't exist" msgstr "Gjeremålet finst ikkje" +#, elixir-format #: lib/graphql/resolvers/todos.ex:77 lib/graphql/resolvers/todos.ex:211 #: lib/graphql/resolvers/todos.ex:240 -#, elixir-format msgid "Todo list doesn't exist" msgstr "Gjeremålslista finst ikkje" -#: lib/graphql/resolvers/feed_token.ex:73 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:73 msgid "Token does not exist" msgstr "Teiknet finst ikkje" -#: lib/graphql/resolvers/feed_token.ex:67 lib/graphql/resolvers/feed_token.ex:70 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:67 lib/graphql/resolvers/feed_token.ex:70 msgid "Token is not a valid UUID" msgstr "Teiknet er ikkje ein gyldig UUID" -#: lib/graphql/error.ex:96 lib/graphql/resolvers/person.ex:415 #, elixir-format +#: lib/graphql/error.ex:96 lib/graphql/resolvers/person.ex:415 msgid "User not found" msgstr "Fann ikkje brukaren" -#: lib/graphql/resolvers/person.ex:310 #, elixir-format +#: lib/graphql/resolvers/person.ex:310 msgid "You already have a profile for this user" msgstr "Du har allereie ein profil for denne brukaren" -#: lib/graphql/resolvers/participant.ex:134 #, elixir-format +#: lib/graphql/resolvers/participant.ex:134 msgid "You are already a participant of this event" msgstr "Du er allereie deltakar på denne hendinga" -#: lib/graphql/resolvers/member.ex:85 #, elixir-format +#: lib/graphql/resolvers/member.ex:85 msgid "You are not a member of this group" msgstr "Du er ikkje medlem i denne gruppa" -#: lib/graphql/resolvers/member.ex:155 #, elixir-format +#: lib/graphql/resolvers/member.ex:155 msgid "You are not a moderator or admin for this group" msgstr "Du er ikkje styrar eller administrator for denne gruppa" -#: lib/graphql/resolvers/comment.ex:59 #, elixir-format +#: lib/graphql/resolvers/comment.ex:59 msgid "You are not allowed to create a comment if not connected" msgstr "Du har ikkje løyve til å skriva kommentarar viss du ikkje er kopla til" -#: lib/graphql/resolvers/feed_token.ex:41 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:41 msgid "You are not allowed to create a feed token if not connected" msgstr "Du har ikkje løyve til å laga eit straumteikn når du ikkje er kopla til" -#: lib/graphql/resolvers/comment.ex:133 #, elixir-format +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "Du har ikkje løyve til å sletta ein kommentar når du ikkje er kopla til" -#: lib/graphql/resolvers/feed_token.ex:82 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:82 msgid "You are not allowed to delete a feed token if not connected" msgstr "Du har ikkje løyve til å sletta straumteikn når du ikkje er kopla til" -#: lib/graphql/resolvers/comment.ex:93 #, elixir-format +#: lib/graphql/resolvers/comment.ex:93 msgid "You are not allowed to update a comment if not connected" msgstr "" "Du har ikkje løyve til å oppdatera kommentarar når du ikkje er kopla til" +#, elixir-format #: lib/graphql/resolvers/participant.ex:181 #: lib/graphql/resolvers/participant.ex:214 -#, elixir-format msgid "You can't leave event because you're the only event creator participant" msgstr "" "Du kan ikkje forlata hendinga, fordi du er den einaste deltakaren som har " "oppretta hendinga" -#: lib/graphql/resolvers/member.ex:159 #, elixir-format +#: lib/graphql/resolvers/member.ex:159 msgid "You can't set yourself to a lower member role for this group because you are the only administrator" msgstr "" "Du kan ikkje gje deg sjølv ei deltakarrolle i denne gruppa, fordi du er den " "einaste administratoren" -#: lib/graphql/resolvers/comment.ex:121 #, elixir-format +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "Du kan ikkje sletta denne kommentaren" -#: lib/graphql/resolvers/event.ex:375 #, elixir-format +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "Du kan ikkje sletta denne hendinga" -#: lib/graphql/resolvers/member.ex:88 #, elixir-format +#: lib/graphql/resolvers/member.ex:88 msgid "You cannot invite to this group" msgstr "Du kan ikkje invitera til denne gruppa" -#: lib/graphql/resolvers/feed_token.ex:76 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:76 msgid "You don't have permission to delete this token" msgstr "Du har ikkje løyve til å sletta dette teiknet" -#: lib/graphql/resolvers/admin.ex:54 #, elixir-format +#: lib/graphql/resolvers/admin.ex:54 msgid "You need to be logged-in and a moderator to list action logs" msgstr "" "Du må vera innlogga og ha ei moderatorrolle for å lista opp hendingsloggar" -#: lib/graphql/resolvers/report.ex:28 #, elixir-format +#: lib/graphql/resolvers/report.ex:28 msgid "You need to be logged-in and a moderator to list reports" msgstr "Du må vera innlogga og ha ei moderatorrolle for å lista opp rapportar" -#: lib/graphql/resolvers/report.ex:107 #, elixir-format +#: lib/graphql/resolvers/report.ex:107 msgid "You need to be logged-in and a moderator to update a report" msgstr "Du må vera innlogga og ha ei moderatorrolle for å oppdatera ein rapport" -#: lib/graphql/resolvers/report.ex:45 #, elixir-format +#: lib/graphql/resolvers/report.ex:45 msgid "You need to be logged-in and a moderator to view a report" msgstr "Du må vera innlogga og ha ei moderatorrolle for å lesa rapportar" -#: lib/graphql/resolvers/admin.ex:246 #, elixir-format +#: lib/graphql/resolvers/admin.ex:246 msgid "You need to be logged-in and an administrator to access admin settings" msgstr "" "Du må vera innlogga og ha ei administratorrolle for å sjå admin-" "innstillingane" -#: lib/graphql/resolvers/admin.ex:230 #, elixir-format +#: lib/graphql/resolvers/admin.ex:230 msgid "You need to be logged-in and an administrator to access dashboard statistics" msgstr "" "Du må vera innlogga og ha ei administratorrolle for å sjå statistikk på " "styringspanelet" -#: lib/graphql/resolvers/admin.ex:272 #, elixir-format +#: lib/graphql/resolvers/admin.ex:272 msgid "You need to be logged-in and an administrator to save admin settings" msgstr "" "Du må vera innlogga og ha ei administratorrolle for å lagra admin-" "innstillingar" -#: lib/graphql/resolvers/discussion.ex:90 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:90 msgid "You need to be logged-in to access discussions" msgstr "Du må vera innlogga for å sjå ordskifte" -#: lib/graphql/resolvers/resource.ex:96 #, elixir-format +#: lib/graphql/resolvers/resource.ex:96 msgid "You need to be logged-in to access resources" msgstr "Du må vera innlogga for å sjå ressursane" -#: lib/graphql/resolvers/event.ex:295 #, elixir-format +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "Du må vera innlogga for å laga hendingar" -#: lib/graphql/resolvers/post.ex:141 #, elixir-format +#: lib/graphql/resolvers/post.ex:141 msgid "You need to be logged-in to create posts" msgstr "Du må vera innlogga for å skriva innlegg" -#: lib/graphql/resolvers/report.ex:79 #, elixir-format +#: lib/graphql/resolvers/report.ex:79 msgid "You need to be logged-in to create reports" msgstr "Du må vera innlogga for å rapportera" -#: lib/graphql/resolvers/resource.ex:136 #, elixir-format +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "Du må vera innlogga for å laga ressursar" -#: lib/graphql/resolvers/event.ex:384 #, elixir-format +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "Du må vera innlogga for å sletta ei hending" -#: lib/graphql/resolvers/post.ex:214 #, elixir-format +#: lib/graphql/resolvers/post.ex:214 msgid "You need to be logged-in to delete posts" msgstr "Du må vera innlogga for å sletta innlegg" -#: lib/graphql/resolvers/resource.ex:203 #, elixir-format +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "Du må vera innlogga for å sletta ressursar" -#: lib/graphql/resolvers/participant.ex:108 #, elixir-format +#: lib/graphql/resolvers/participant.ex:108 msgid "You need to be logged-in to join an event" msgstr "Du må vera innlogga for å bli med på ei hending" -#: lib/graphql/resolvers/participant.ex:225 #, elixir-format +#: lib/graphql/resolvers/participant.ex:225 msgid "You need to be logged-in to leave an event" msgstr "Du må vera innlogga for å melda deg av ei hending" -#: lib/graphql/resolvers/event.ex:341 #, elixir-format +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "Du må vera innlogga for å oppdatera hendingar" -#: lib/graphql/resolvers/post.ex:180 #, elixir-format +#: lib/graphql/resolvers/post.ex:180 msgid "You need to be logged-in to update posts" msgstr "Du må vera innlogga for å oppdatera innlegg" -#: lib/graphql/resolvers/resource.ex:173 #, elixir-format +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "Du må vera innlogga for å oppdatera ressursar" -#: lib/graphql/resolvers/resource.ex:232 #, elixir-format +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "Du må vera innlogga for å førehandsvisa ressursar" -#: lib/graphql/resolvers/resource.ex:128 #, elixir-format +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "Opphavsressursen høyrer ikkje til denne gruppa" -#: lib/mobilizon/users/user.ex:113 #, elixir-format +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "Dette passordet er for kort." -#: lib/mobilizon/users/user.ex:141 #, elixir-format +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Registreringsteiknet er allereie i bruk, dette ser ut som ein feil frå vår " "side." -#: lib/mobilizon/users/user.ex:108 #, elixir-format +#: lib/mobilizon/users/user.ex:108 msgid "This email is already used." msgstr "Denne eposten er allereie i bruk." -#: lib/graphql/error.ex:97 #, elixir-format +#: lib/graphql/error.ex:97 msgid "Post not found" msgstr "Fann ikkje innlegget" -#: lib/graphql/error.ex:84 #, elixir-format +#: lib/graphql/error.ex:84 msgid "Invalid arguments passed" msgstr "Ugyldige argument" -#: lib/graphql/error.ex:90 #, elixir-format +#: lib/graphql/error.ex:90 msgid "Invalid credentials" msgstr "Ugyldig innlogging" -#: lib/graphql/error.ex:88 #, elixir-format +#: lib/graphql/error.ex:88 msgid "Reset your password to login" msgstr "Nullstill passordet for å logga inn" -#: lib/graphql/error.ex:95 lib/graphql/error.ex:100 #, elixir-format +#: lib/graphql/error.ex:95 lib/graphql/error.ex:100 msgid "Resource not found" msgstr "Fann ikkje ressursen" -#: lib/graphql/error.ex:102 #, elixir-format +#: lib/graphql/error.ex:102 msgid "Something went wrong" msgstr "Noko gjekk gale" -#: lib/graphql/error.ex:83 #, elixir-format +#: lib/graphql/error.ex:83 msgid "Unknown Resource" msgstr "Ukjend ressurs" -#: lib/graphql/error.ex:93 #, elixir-format +#: lib/graphql/error.ex:93 msgid "You don't have permission to do this" msgstr "Du har ikkje løyve til å gjera detet" -#: lib/graphql/error.ex:85 #, elixir-format +#: lib/graphql/error.ex:85 msgid "You need to be logged in" msgstr "Du må vera innlogga" -#: lib/graphql/resolvers/member.ex:116 #, elixir-format +#: lib/graphql/resolvers/member.ex:116 msgid "You can't accept this invitation with this profile." msgstr "Du kan ikkje ta imot invitasjonar med denne profilen." -#: lib/graphql/resolvers/member.ex:137 #, elixir-format +#: lib/graphql/resolvers/member.ex:137 msgid "You can't reject this invitation with this profile." msgstr "Du kan ikkje avslå invitasjonen med denne profilen." -#: lib/graphql/resolvers/media.ex:71 #, elixir-format +#: lib/graphql/resolvers/media.ex:71 msgid "File doesn't have an allowed MIME type." msgstr "Fila har ingen tillaten MIME-type." -#: lib/graphql/resolvers/group.ex:195 #, elixir-format +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "Profilen er ikkje administrator for gruppa" -#: lib/graphql/resolvers/event.ex:330 #, elixir-format +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "Du kan ikkje endra denne hendinga." -#: lib/graphql/resolvers/event.ex:333 #, elixir-format +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "Du kan ikkje kopla denne hendinga til denne profilen." -#: lib/graphql/resolvers/member.ex:140 #, elixir-format +#: lib/graphql/resolvers/member.ex:140 msgid "This invitation doesn't exist." msgstr "Invitasjonen finst ikkje." -#: lib/graphql/resolvers/member.ex:185 #, elixir-format +#: lib/graphql/resolvers/member.ex:185 msgid "This member already has been rejected." msgstr "Denne medlemen har allereie fått avslag." -#: lib/graphql/resolvers/member.ex:192 #, elixir-format +#: lib/graphql/resolvers/member.ex:192 msgid "You don't have the right to remove this member." msgstr "Du har ikkje løyve til å fjerna denne medlemen." -#: lib/mobilizon/actors/actor.ex:349 #, elixir-format +#: lib/mobilizon/actors/actor.ex:349 msgid "This username is already taken." msgstr "Dette brukarnamnet er oppteke." -#: lib/graphql/resolvers/discussion.ex:87 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:87 msgid "You must provide either an ID or a slug to access a discussion" msgstr "" "Du må gje anten ein ID eller ei stuttadresse for å få tilgang til ordskiftet" -#: lib/graphql/resolvers/event.ex:284 #, elixir-format +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "Brukaren eig ikkje arrangørprofilen" -#: lib/graphql/resolvers/participant.ex:93 #, elixir-format +#: lib/graphql/resolvers/participant.ex:93 msgid "Profile ID provided is not the anonymous profile one" msgstr "Denne profil-IDen er ikkje den anonyme profilen" -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 -#: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 #, elixir-format +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 +#: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "Dette biletet er for stort" -#: lib/web/views/utils.ex:34 #, elixir-format +#: lib/web/views/utils.ex:34 msgid "Index file not found. You need to recompile the front-end." msgstr "Fann ikkje indeksfila. Du må kompilera framsida på nytt." -#: lib/graphql/resolvers/resource.ex:125 #, elixir-format +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "Greidde ikkje laga ressursen" -#: lib/graphql/resolvers/user.ex:479 #, elixir-format +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "Ugyldig aktiveringslykjel" -#: lib/graphql/resolvers/resource.ex:222 #, elixir-format +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "Greidde ikkje henta ressursdetaljane frå denne adressa." -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 #, elixir-format +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Moderatorprofilen har ikkje tilgang til denne hendinga" -#: lib/graphql/resolvers/event.ex:278 #, elixir-format +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" "Organisatoren har ikkje løyve til å laga hendingar på vegner av denne gruppa" -#: lib/graphql/resolvers/event.ex:321 #, elixir-format +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" "Denne profilen har ikkje løyve til å oppdatera hendingar på vegner av denne " "gruppa" -#: lib/graphql/resolvers/user.ex:163 #, elixir-format +#: lib/graphql/resolvers/user.ex:163 msgid "Your e-mail has been denied registration or uses a disallowed e-mail provider" msgstr "" "Eposten din er nekta å registrera seg, eller bruker ein epostvert me ikkje " "godtek" -#: lib/graphql/resolvers/comment.ex:128 #, elixir-format +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Fann ikkje hendinga" -#: lib/graphql/resolvers/discussion.ex:129 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:129 msgid "Error while creating a discussion" msgstr "Greidde ikkje laga ressursen" -#: lib/graphql/resolvers/user.ex:602 #, elixir-format +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "Greidde ikkje oppdatera rapporten" -#: lib/graphql/resolvers/person.ex:307 #, elixir-format +#: lib/graphql/resolvers/person.ex:307 msgid "Error while uploading pictures" msgstr "Greidde ikkje oppdatera rapporten" -#: lib/graphql/resolvers/participant.ex:190 #, elixir-format +#: lib/graphql/resolvers/participant.ex:190 msgid "Failed to leave the event" msgstr "Greidde ikkje forlata hendinga" -#: lib/graphql/resolvers/group.ex:191 #, elixir-format +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "Greidde ikkje oppdatera gruppa" -#: lib/graphql/resolvers/user.ex:456 #, elixir-format +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "Greidde ikkje oppdatera epostadressa til brukaren" -#: lib/graphql/resolvers/user.ex:475 #, elixir-format +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "Greier ikkje godkjenna brukaren" -#: lib/graphql/resolvers/participant.ex:146 #, elixir-format +#: lib/graphql/resolvers/participant.ex:146 msgid "The anonymous actor ID is invalid" msgstr "ID-en til den anonyme brukaren er ugyldig" -#: lib/graphql/resolvers/resource.ex:161 #, elixir-format +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "Det var ein ukjend feil då ressursen vart oppdatert" -#: lib/graphql/resolvers/comment.ex:84 #, elixir-format +#: lib/graphql/resolvers/comment.ex:84 msgid "You are not the comment creator" msgstr "Du har ikkje skrive denne kommentaren" -#: lib/graphql/resolvers/user.ex:404 #, elixir-format +#: lib/graphql/resolvers/user.ex:404 msgid "You cannot change your password." msgstr "Du kan ikkje endra passordet ditt." -#: lib/graphql/resolvers/participant.ex:310 #, elixir-format +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "Formatet er ikkje støtta" -#: lib/graphql/resolvers/participant.ex:322 #, elixir-format +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" "Eit program som trengst for å eksportera til %{format} er ikkje installert" -#: lib/graphql/resolvers/participant.ex:330 #, elixir-format +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "Det var ein feil då eksporten vart lagra" -#: lib/web/controllers/export_controller.ex:30 #, elixir-format +#: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "Du kan ikkje eksportera til %{format} på denne nettstaden" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "Det var ein ukjend feil då ressursen vart oppdatert" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/oc/LC_MESSAGES/default.po b/priv/gettext/oc/LC_MESSAGES/default.po index 38a831494..607b095c7 100644 --- a/priv/gettext/oc/LC_MESSAGES/default.po +++ b/priv/gettext/oc/LC_MESSAGES/default.po @@ -344,12 +344,12 @@ msgid "What information do we collect?" msgstr "Quinas informacions reculem ?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon sus %{instance} : confirmatz vòstra adreça electronica" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon sus %{instance} : adreça electronica cambiada" @@ -407,7 +407,7 @@ msgid "View the event on: %{link}" msgstr "Veire l’eveniment actualizat sus : %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{inviter} vos a convidat a rejónher lo grop %{group}" @@ -1142,7 +1142,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Vos an tirat del grop %{group}" @@ -1191,7 +1191,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "Lo grop %{group} foguèt suspendut sus %{instance}" @@ -1454,17 +1454,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1489,7 +1489,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/oc/LC_MESSAGES/errors.po b/priv/gettext/oc/LC_MESSAGES/errors.po index 23137d301..5f8da1151 100644 --- a/priv/gettext/oc/LC_MESSAGES/errors.po +++ b/priv/gettext/oc/LC_MESSAGES/errors.po @@ -100,28 +100,28 @@ msgid "Cannot refresh the token" msgstr "Actualizacion impossibla del geton" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "Lo perfil actual es pas un membre d’aqueste grop" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "Lo perfil actual es pas administrator del grop seleccionat" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Error en salvagardant los paramètres utilizaire" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Grop pas trobat" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Grop amb l’ID %{id} pas trobat" @@ -133,7 +133,7 @@ msgstr "" "invalid." #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Membre pas trobat" @@ -170,12 +170,12 @@ msgid "The current password is invalid" msgstr "Lo mòt de santa clara actuau es invalid" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "Lo email nau sèm invalid" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "Lo email nau deb esser different" @@ -185,8 +185,8 @@ msgid "The new password must be different" msgstr "Lo mòt de santa clara nau deb esser different" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "Lo mòt de santa clara aprovedit es invalid" @@ -213,37 +213,37 @@ msgid "Unable to validate user" msgstr "Es impossible de validar l'utilizator" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "Utilizator déjà desactivat" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "L'utilizator demandat es pas conectat" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Essetz déjà membre d'aquest grop" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "Podetz pas quitar aquest grop perque essetz lo sol administrator" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "Podetz pas rejónher aquest grop" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "Podetz listar los grops sonque se essetz moderator." #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "Debetz esser conectat per cambiar lo voste email" @@ -253,27 +253,27 @@ msgid "You need to be logged-in to change your password" msgstr "Debetz d'esser conectat per cambiar lo voste mòt de santa clara" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "Debetz d'esser conectat per suprimir un grop" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "Devetz d'esser conectat per suprimir lo voste compte" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "Devetz d'esser conectat per rejónher un grop" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "Devetz d'esser conectat per quitar un grop" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "Devetz d'esser conectat per metre à jorn un grop" @@ -350,7 +350,7 @@ msgid "Cannot remove the last identity of a user" msgstr "Pòden pas suprimir la darrièra identitat d'un utilizator" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "Comentari déjà suprimit" @@ -375,15 +375,15 @@ msgid "Event id not found" msgstr "ID d'eveniment non trobat" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Eveniment non trobat" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "Un eveniment d'amb aquesta ID %{id} existís pas" @@ -451,8 +451,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -469,7 +469,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -479,7 +479,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -540,7 +540,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -566,12 +566,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -631,7 +631,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -646,12 +646,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -661,7 +661,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -676,7 +676,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -686,27 +686,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -776,17 +776,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -816,7 +816,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -826,7 +826,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -837,33 +837,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "Error mentre que sauvant lo rapòrt" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -873,7 +873,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Eveniment non trobat" @@ -883,7 +883,7 @@ msgid "Error while creating a discussion" msgstr "Error mentre que sauvant lo rapòrt" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "Error mentre la mesa a jorn dèu rapòrt" @@ -898,17 +898,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "Es impossible de validar l'utilizator" @@ -918,7 +918,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -933,17 +933,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -951,3 +951,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/default.po b/priv/gettext/pl/LC_MESSAGES/default.po index f7d9f93dd..453673cda 100644 --- a/priv/gettext/pl/LC_MESSAGES/default.po +++ b/priv/gettext/pl/LC_MESSAGES/default.po @@ -343,12 +343,12 @@ msgid "What information do we collect?" msgstr "Jakie informacje zbieramy?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon na %{instance}: potwierdź swój adres e-mail" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon na %{instance}: zmieniono e-mail" @@ -409,7 +409,7 @@ msgid "View the event on: %{link}" msgstr "Zobacz zaktualizowane wydarzenie na %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "Dostałeś(-aś) zaproszenie od %{inviter}, aby dołączyć do grupy %{group}" @@ -1151,7 +1151,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Zostałeś(-aś) usunięty(-a) z grupy %{group}" @@ -1204,7 +1204,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "Grupa %{group} została zawieszona na %{instance}" @@ -1468,17 +1468,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1503,7 +1503,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Serwer Mobilizon wydaje się tymczasowo nie działać." #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/pl/LC_MESSAGES/errors.po b/priv/gettext/pl/LC_MESSAGES/errors.po index 056c450a3..050896668 100644 --- a/priv/gettext/pl/LC_MESSAGES/errors.po +++ b/priv/gettext/pl/LC_MESSAGES/errors.po @@ -107,28 +107,28 @@ msgid "Cannot refresh the token" msgstr "Nie można odświeżyć tokenu" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "Obency profil nie jest członkiem tej grupy" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "Obecny profil nie jest administratorem zaznaczonej grupy" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Błąd zapisywania ustawień użytkownika" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Nie odnaleziono grupy" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Nie odnaleziono grupy o ID %{id}" @@ -139,7 +139,7 @@ msgstr "" "Nie udało się uwierzytelnić. Adres e-mail bądź hasło jest nieprawidłowe." #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Nie odnaleziono użytkownika" @@ -177,12 +177,12 @@ msgid "The current password is invalid" msgstr "Obecne hasło jest nieprawidłowe" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "Nowy adres e-mail nie wydaje się być prawidłowy" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "Nowy adres e-mail musi się różnić od obecnego" @@ -192,8 +192,8 @@ msgid "The new password must be different" msgstr "Nowe hasło musi różnić się od obecnego" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "Wprowadzone hasło jest nieprawidłowe" @@ -220,38 +220,38 @@ msgid "Unable to validate user" msgstr "Nie udało się zwalidować użytkownika" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "Użytkownik jest już wyłączony" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "Żądany użytkownik nie jest zalogowany" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Już jesteś członkiem tej grupy" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" "Nie możesz opuścić tej grupy, ponieważ jesteś jej jedynym administratorem" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "Nie możesz dołączyć do tej grupy" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "Nie masz dostępu do listy grup, jeżeli nie jesteś moderatorem." #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "Musisz być zalogowany(-a), aby zmienić adres e-mail" @@ -261,27 +261,27 @@ msgid "You need to be logged-in to change your password" msgstr "Musisz być zalogowany(-a), aby zmienić hasło" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "Musisz być zalogowany(-a), aby usunąć grupę" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "Musisz być zalogowany(-a), aby usunąć konto" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "Musisz być zalogowany(-a), aby dołączyć do grupy" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "Musisz być zalogowany(-a), aby opuścić grupę" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "Musisz być zalogowany(-a), aby zaktualizować grupę" @@ -357,7 +357,7 @@ msgid "Cannot remove the last identity of a user" msgstr "Nie można usunąć jedynej tożsamości użytkownika" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "Komentarz jest już usunięty" @@ -382,15 +382,15 @@ msgid "Event id not found" msgstr "Nie znaleziono id wydarzenia" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Nie znaleziono wydarzenia" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "Wydarzenie o ID %{id} nie istnieje" @@ -458,8 +458,8 @@ msgstr "Profil jest już członkiem tej grupy" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -476,7 +476,7 @@ msgid "Report not found" msgstr "Nie znaleziono zgłoszenia" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "Zasób nie istnieje" @@ -486,7 +486,7 @@ msgid "The event has already reached its maximum capacity" msgstr "Wydarzenie już przekroczyło maksymalną zasobność" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "Ten token jest nieprawidłowy" @@ -547,7 +547,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -575,12 +575,12 @@ msgstr "" "administratorem" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "Nie możesz usunąć tego komentarza" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "Nie możesz usunąć tego wydarzenia" @@ -646,7 +646,7 @@ msgid "You need to be logged-in to access resources" msgstr "Musisz być zalogowany(-a), aby uzyskać dostęp do zasobów" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "Musisz być zalogowany(-a), aby móc utworzyć wydarzenia" @@ -661,12 +661,12 @@ msgid "You need to be logged-in to create reports" msgstr "Musisz być zalogowany(-a), aby utworzyć zgłoszenie" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "Musisz być zalogowany(-a), aby utworzyć zasób" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "Musisz być zalogowany(-a), aby usunąć wydarzenie" @@ -676,7 +676,7 @@ msgid "You need to be logged-in to delete posts" msgstr "Musisz być zalogowany(-a), aby usunąć wpis" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "Musisz być zalogowany(-a), aby usunąć zasób" @@ -691,7 +691,7 @@ msgid "You need to be logged-in to leave an event" msgstr "Musisz być zalogowany(-a), aby opuścić wydarzenie" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "Musisz być zalogowany(-a), aby zaktualizować wydarzenie" @@ -701,27 +701,27 @@ msgid "You need to be logged-in to update posts" msgstr "Musisz być zalogowany(-a), aby zaktualizować wpis" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "Musisz być zalogowany(-a), aby zaktualizować zasób" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "Musisz być zalogowany(-a), aby zobaczyć podgląd zasobu" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "Nadrzędny zasób nie należy do tej grupy" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "Wybrane hasło jest zbyt krótkie" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Token rejestracyjny jest już w użyciu, to wygląda na problem po naszej " @@ -793,17 +793,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "Plik nie ma dozwolonego typu MIME." #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "Profil nie jest administratorem grupy" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "Nie możesz edytować tego wydarzenia." #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "Nie możesz przypisać tego wydarzenia do tego profilu." @@ -833,7 +833,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -843,7 +843,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -854,33 +854,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "Wystąpił błąd podczas zapisywania zgłoszenia" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Wskazany profil moderatora nie ma uprawnień dla tego wydarzenia" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -890,7 +890,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Nie znaleziono wydarzenia" @@ -900,7 +900,7 @@ msgid "Error while creating a discussion" msgstr "Wystąpił błąd podczas zapisywania zgłoszenia" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "Wystąpił błąd podczas aktualizacji zgłoszenia" @@ -915,17 +915,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "Nie udało się zwalidować użytkownika" @@ -935,7 +935,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -950,17 +950,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -968,3 +968,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/default.po b/priv/gettext/pt/LC_MESSAGES/default.po index a1621f6bf..6ba33b2c4 100644 --- a/priv/gettext/pt/LC_MESSAGES/default.po +++ b/priv/gettext/pt/LC_MESSAGES/default.po @@ -310,12 +310,12 @@ msgid "What information do we collect?" msgstr "" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "" @@ -373,7 +373,7 @@ msgid "View the event on: %{link}" msgstr "" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "" @@ -1046,7 +1046,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1089,7 +1089,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1349,17 +1349,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1384,7 +1384,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/pt/LC_MESSAGES/errors.po b/priv/gettext/pt/LC_MESSAGES/errors.po index f1a3195eb..8c0d7db6e 100644 --- a/priv/gettext/pt/LC_MESSAGES/errors.po +++ b/priv/gettext/pt/LC_MESSAGES/errors.po @@ -93,28 +93,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "" @@ -124,7 +124,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -161,12 +161,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -176,8 +176,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -202,37 +202,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -242,27 +242,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -338,7 +338,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -363,15 +363,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -439,8 +439,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -457,7 +457,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -467,7 +467,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -528,7 +528,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -554,12 +554,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -619,7 +619,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -634,12 +634,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -649,7 +649,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -664,7 +664,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -674,27 +674,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -764,17 +764,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -804,7 +804,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -814,7 +814,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -825,33 +825,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -861,7 +861,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -871,7 +871,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -886,17 +886,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -906,7 +906,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -921,17 +921,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -939,3 +939,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/default.po b/priv/gettext/pt_BR/LC_MESSAGES/default.po index 723e3a9b5..b844b59d1 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/default.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/default.po @@ -356,12 +356,12 @@ msgid "What information do we collect?" msgstr "Quais informações coletamos?" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon da instância %{instance}: confirma seu endereço de email" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon da instância %{instance}: email alterado" @@ -419,7 +419,7 @@ msgid "View the event on: %{link}" msgstr "Veja o evento atualizado em: %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "" @@ -1123,7 +1123,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1166,7 +1166,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1461,17 +1461,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1496,7 +1496,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/pt_BR/LC_MESSAGES/errors.po b/priv/gettext/pt_BR/LC_MESSAGES/errors.po index d124e2710..990efd01d 100644 --- a/priv/gettext/pt_BR/LC_MESSAGES/errors.po +++ b/priv/gettext/pt_BR/LC_MESSAGES/errors.po @@ -93,28 +93,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "" @@ -124,7 +124,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -161,12 +161,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -176,8 +176,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -202,37 +202,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -242,27 +242,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -338,7 +338,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -363,15 +363,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -439,8 +439,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -457,7 +457,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -467,7 +467,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -528,7 +528,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -554,12 +554,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -619,7 +619,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -634,12 +634,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -649,7 +649,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -664,7 +664,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -674,27 +674,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -764,17 +764,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -804,7 +804,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -814,7 +814,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -825,33 +825,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -861,7 +861,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -871,7 +871,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -886,17 +886,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -906,7 +906,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -921,17 +921,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -939,3 +939,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/ru/LC_MESSAGES/default.po b/priv/gettext/ru/LC_MESSAGES/default.po index b9cac47dd..6530c8d38 100644 --- a/priv/gettext/ru/LC_MESSAGES/default.po +++ b/priv/gettext/ru/LC_MESSAGES/default.po @@ -35,29 +35,27 @@ msgstr "Активировать мою учётную запись" #, elixir-format #: lib/web/templates/email/email.html.heex:118 #: lib/web/templates/email/email.text.eex:9 -#, elixir-format msgid "Ask the community on Framacolibri" msgstr "Обратиться к сообществу на Framacolibri" -#: lib/web/templates/email/report.text.eex:15 #, elixir-format +#: lib/web/templates/email/report.text.eex:15 msgid "Comments" msgstr "Комментарии" #, elixir-format #: lib/web/templates/email/report.html.heex:72 #: lib/web/templates/email/report.text.eex:11 -#, elixir-format msgid "Event" msgstr "Мероприятие" -#: lib/web/email/user.ex:48 #, elixir-format +#: lib/web/email/user.ex:48 msgid "Instructions to reset your password on %{instance}" msgstr "Инструкции по сбросу пароля на %{instance}" -#: lib/web/templates/email/report.text.eex:21 #, elixir-format +#: lib/web/templates/email/report.text.eex:21 msgid "Reason" msgstr "Причина" @@ -73,77 +71,75 @@ msgstr "" "Сбросить пароль легко. Просто нажмите на кнопку ниже и следуйте инструкциям. " "Это быстро." -#: lib/web/email/user.ex:28 #, elixir-format +#: lib/web/email/user.ex:28 msgid "Instructions to confirm your Mobilizon account on %{instance}" msgstr "Инструкции по подтверждению учётной записи Mobilizon на %{instance}" -#: lib/web/email/admin.ex:24 #, elixir-format +#: lib/web/email/admin.ex:24 msgid "New report on Mobilizon instance %{instance}" msgstr "Новый отчёт на Mobilizon узле %{instance}" #, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:51 #: lib/web/templates/email/before_event_notification.text.eex:4 -#, elixir-format msgid "Go to event page" msgstr "Перейти на страницу мероприятия" -#: lib/web/templates/email/report.text.eex:1 #, elixir-format +#: lib/web/templates/email/report.text.eex:1 msgid "New report from %{reporter} on %{instance}" msgstr "Новый отчёт от %{reporter} на %{instance}" -#: lib/web/templates/email/event_participation_approved.text.eex:1 #, elixir-format +#: lib/web/templates/email/event_participation_approved.text.eex:1 msgid "Participation approved" msgstr "Участие одобрено" #, elixir-format #: lib/web/templates/email/password_reset.html.heex:13 #: lib/web/templates/email/password_reset.text.eex:1 -#, elixir-format msgid "Password reset" msgstr "Сброс пароля" -#: lib/web/templates/email/password_reset.text.eex:7 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:7 msgid "Resetting your password is easy. Just click the link below and follow the instructions. We'll have you up and running in no time." msgstr "" "Сбросить пароль легко. Просто нажмите на ссылку ниже и следуйте инструкциям. " "Это быстро." -#: lib/web/templates/email/registration_confirmation.text.eex:5 #, elixir-format +#: lib/web/templates/email/registration_confirmation.text.eex:5 msgid "You created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email." msgstr "" "Вы создали аккаунт на% {host}, используя этот адрес электронной почты. Вы в " "одном клике от его активации. Если это сделали не вы, просто проигнорируйте " "это письмо." -#: lib/web/email/participation.ex:108 #, elixir-format +#: lib/web/email/participation.ex:108 msgid "Your participation to event %{title} has been approved" msgstr "Ваше участие в мероприятии %{title} было одобрено" -#: lib/web/email/participation.ex:68 #, elixir-format +#: lib/web/email/participation.ex:68 msgid "Your participation to event %{title} has been rejected" msgstr "Ваш запрос на участие в %{title} был отклонен" -#: lib/web/email/event.ex:36 #, elixir-format +#: lib/web/email/event.ex:36 msgid "Event %{title} has been updated" msgstr "Мероприятие %{title} было обновлено" -#: lib/web/templates/email/event_updated.text.eex:15 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:15 msgid "New title: %{title}" msgstr "Новый заголовок: %{title}" -#: lib/web/templates/email/password_reset.text.eex:5 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:5 msgid "You requested a new password for your account on %{instance}." msgstr "Вы запросили новый пароль для своей учетной записи на %{instance}." @@ -152,8 +148,8 @@ msgstr "Вы запросили новый пароль для своей уче msgid "Warning" msgstr "Предупреждение" -#: lib/web/email/participation.ex:131 #, elixir-format +#: lib/web/email/participation.ex:131 msgid "Confirm your participation to event %{title}" msgstr "Подтвердите свое участие в мероприятии %{title}" @@ -358,18 +354,18 @@ msgctxt "terms" msgid "What information do we collect?" msgstr "Какую информацию мы собираем?" -#: lib/web/email/user.ex:177 #, elixir-format +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon на %{instance}: подтвердите свой адрес электронной почты" -#: lib/web/email/user.ex:154 #, elixir-format +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon на %{instance}: адрес электронной почты изменен" -#: lib/web/email/notification.ex:49 #, elixir-format +#: lib/web/email/notification.ex:49 msgid "One event planned today" msgid_plural "%{nb_events} events planned today" msgstr[0] "Сегодня запланировано одно мероприятие" @@ -379,34 +375,31 @@ msgstr[2] "Сегодня запланировано %{nb_events} меропри #, elixir-format #: lib/web/templates/email/on_day_notification.html.heex:38 #: lib/web/templates/email/on_day_notification.text.eex:4 -#, elixir-format msgid "You have one event today:" msgid_plural "You have %{total} events today:" msgstr[0] "У вас сегодня одно мероприятие:" msgstr[1] "У вас сегодня %{total} мероприятия:" msgstr[2] "У вас сегодня %{total} мероприятий:" -#: lib/web/templates/email/group_invite.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_invite.text.eex:3 msgid "%{inviter} just invited you to join their group %{group}" msgstr "%{inviter} только что пригласил вас присоединиться к их группе %{group}" #, elixir-format #: lib/web/templates/email/group_invite.html.heex:13 #: lib/web/templates/email/group_invite.text.eex:1 -#, elixir-format msgid "Come along!" msgstr "Присоединяйтесь к нам!" -#: lib/web/email/notification.ex:24 #, elixir-format +#: lib/web/email/notification.ex:24 msgid "Don't forget to go to %{title}" msgstr "Не забудь об участии в %{title}" #, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:38 #: lib/web/templates/email/before_event_notification.text.eex:3 -#, elixir-format msgid "Get ready for %{title}" msgstr "Будь готов к %{title}" @@ -418,30 +411,29 @@ msgstr "Посмотреть мои группы" #, elixir-format #: lib/web/templates/email/group_invite.html.heex:45 #: lib/web/templates/email/group_invite.text.eex:5 -#, elixir-format msgid "To accept this invitation, head over to your groups." msgstr "Чтобы принять это приглашение, зайдите в свои группы." -#: lib/web/templates/email/before_event_notification.text.eex:5 #, elixir-format +#: lib/web/templates/email/before_event_notification.text.eex:5 msgid "View the event on: %{link}" msgstr "Посмотреть мероприятие на: %{link}" -#: lib/web/email/group.ex:33 #, elixir-format +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{Inviter} пригласил вас присоединиться к группе %{group}" -#: lib/web/email/notification.ex:75 #, elixir-format +#: lib/web/email/notification.ex:75 msgid "One event planned this week" msgid_plural "%{nb_events} events planned this week" msgstr[0] "На этой неделе запланировано одно мероприятие" msgstr[1] "На этой неделе запланировано %{nb_events} мероприятия" msgstr[2] "На этой неделе запланировано %{nb_events} мероприятий" -#: lib/web/email/notification.ex:98 #, elixir-format +#: lib/web/email/notification.ex:98 msgid "One participation request for event %{title} to process" msgid_plural "%{number_participation_requests} participation requests for event %{title} to process" msgstr[0] "Одна заявка на участие в мероприятии %{title} ожидает одобрения" @@ -455,15 +447,14 @@ msgstr[2] "" #, elixir-format #: lib/web/templates/email/notification_each_week.html.heex:38 #: lib/web/templates/email/notification_each_week.text.eex:3 -#, elixir-format msgid "You have one event this week:" msgid_plural "You have %{total} events this week:" msgstr[0] "У вас одно мероприятие на этой неделе:" msgstr[1] "На этой неделе у вас запланировано %{total} мероприятия:" msgstr[2] "На этой неделе у вас запланировано %{total} мероприятий:" -#: lib/service/metadata/utils.ex:53 #, elixir-format +#: lib/service/metadata/utils.ex:53 msgid "The event organizer didn't add any description." msgstr "Организатор мероприятия не добавил описания." @@ -898,12 +889,11 @@ msgstr "Подтвердите мой адрес электронной почт #, elixir-format #: lib/web/templates/email/anonymous_participation_confirmation.html.heex:13 #: lib/web/templates/email/anonymous_participation_confirmation.text.eex:1 -#, elixir-format msgid "Confirm your e-mail" msgstr "Подтвердите ваш адрес электронной почты" -#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 #, elixir-format +#: lib/web/templates/email/anonymous_participation_confirmation.text.eex:3 msgid "Hi there! You just registered to join this event: « %{title} ». Please confirm the e-mail address you provided:" msgstr "" "Привет! Вы только что зарегистрировались, чтобы присоединиться к мероприятию:" @@ -913,7 +903,6 @@ msgstr "" #, elixir-format #: lib/web/templates/email/email.html.heex:115 #: lib/web/templates/email/email.text.eex:8 -#, elixir-format msgid "Need help? Is something not working as expected?" msgstr "Нужна помощь? Что-то не работает?" @@ -941,8 +930,8 @@ msgid "You requested a new password for your account on <b>%{instance}</b>." msgstr "" "Вы запросили новый пароль для своей учетной записи на <b>%{instance}</b>." -#: lib/web/templates/email/email.text.eex:5 #, elixir-format +#: lib/web/templates/email/email.text.eex:5 msgid "Please do not use it for real purposes." msgstr "Пожалуйста, используйте это только для тестовых целей." @@ -952,7 +941,6 @@ msgstr "Пожалуйста, используйте это только для #: lib/web/templates/email/event_updated.text.eex:24 lib/web/templates/email/notification_each_week.html.heex:70 #: lib/web/templates/email/notification_each_week.text.eex:11 lib/web/templates/email/on_day_notification.html.heex:70 #: lib/web/templates/email/on_day_notification.text.eex:14 -#, elixir-format msgid "Would you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button." msgstr[0] "" @@ -970,7 +958,6 @@ msgstr[2] "" #, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:38 #: lib/web/templates/email/pending_participation_notification.text.eex:4 -#, elixir-format msgid "You have one pending attendance request to process:" msgid_plural "You have %{number_participation_requests} attendance requests to process:" msgstr[0] "У вас есть ожидающий рассмотрения запрос на участие:" @@ -981,8 +968,8 @@ msgstr[2] "" "У вас есть %{number_participation_requests} ожидающих рассмотрения запросов " "на участие:" -#: lib/web/templates/email/email.text.eex:11 #, elixir-format +#: lib/web/templates/email/email.text.eex:11 msgid "%{instance} is powered by Mobilizon." msgstr "%{instance} работает на платформе Mobilizon." @@ -994,21 +981,18 @@ msgstr "<b>%{instance}</b> работает на платформе Mobilizon." #, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:13 #: lib/web/templates/email/pending_participation_notification.text.eex:1 -#, elixir-format msgid "A request is pending!" msgstr "Заявка находится на рассмотрении!" #, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:13 #: lib/web/templates/email/before_event_notification.text.eex:1 -#, elixir-format msgid "An event is upcoming!" msgstr "Скоро начало мероприятия!" #, elixir-format #: lib/web/templates/email/email_changed_new.html.heex:13 #: lib/web/templates/email/email_changed_new.text.eex:1 -#, elixir-format msgid "Confirm new email" msgstr "Подтвердите новый адрес электронной почты" @@ -1017,15 +1001,14 @@ msgstr "Подтвердите новый адрес электронной по msgid "End" msgstr "Конец" -#: lib/web/templates/email/event_updated.text.eex:21 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:21 msgid "End %{ends_on}" msgstr "Конец %{ends_on}" #, elixir-format #: lib/web/templates/email/event_updated.html.heex:13 #: lib/web/templates/email/event_updated.text.eex:1 -#, elixir-format msgid "Event update!" msgstr "Мероприятие обновлено!" @@ -1037,7 +1020,6 @@ msgstr "Помеченные комментарии" #, elixir-format #: lib/web/templates/email/event_participation_approved.html.heex:45 #: lib/web/templates/email/event_participation_approved.text.eex:7 -#, elixir-format msgid "Good news: one of the event organizers just approved your request. Update your calendar, because you're on the guest list now!" msgstr "" "Хорошие новости: один из организаторов мероприятия только что одобрил вашу " @@ -1046,7 +1028,6 @@ msgstr "" #, elixir-format #: lib/web/templates/email/email_changed_new.html.heex:38 #: lib/web/templates/email/email_changed_new.text.eex:3 -#, elixir-format msgid "Hi there! It seems like you wanted to change the email address linked to your account on <b>%{instance}</b>. If you still wish to do so, please click the button below to confirm the change. You will then be able to log in to %{instance} with this new email address." msgstr "" "Привет! Похоже, вы хотели изменить адрес электронной почты, связанный с " @@ -1054,8 +1035,8 @@ msgstr "" "это, нажмите кнопку ниже, чтобы подтвердить изменение. После этого вы " "сможете войти в %{instance} с новым адресом электронной почты." -#: lib/web/templates/email/email_changed_old.text.eex:3 #, elixir-format +#: lib/web/templates/email/email_changed_old.text.eex:3 msgid "Hi there! Just a quick note to confirm that the email address linked to your account on %{host} has been changed from this one to:" msgstr "" "Привет! Мы просто хотели сообщить вам, что адрес электронной почты, который " @@ -1064,7 +1045,6 @@ msgstr "" #, elixir-format #: lib/web/templates/email/email_changed_old.html.heex:62 #: lib/web/templates/email/email_changed_old.text.eex:5 -#, elixir-format msgid "If you did not trigger this change yourself, it is likely that someone has gained access to your %{host} account. Please log in and change your password immediately. If you cannot login, contact the admin on %{host}." msgstr "" "Если вы не активировали это изменение самостоятельно, вероятно, кто-то " @@ -1072,8 +1052,8 @@ msgstr "" "немедленно измените свой пароль. Если вам не удается войти в систему, " "обратитесь к администратору %{host}." -#: lib/web/templates/email/password_reset.text.eex:12 #, elixir-format +#: lib/web/templates/email/password_reset.text.eex:12 msgid "If you didn't trigger the change yourself, please ignore this message. Your password won't be changed until you click the link above." msgstr "" "Если вы не активировали это изменение самостоятельно, проигнорируйте это " @@ -1089,7 +1069,6 @@ msgstr "" #, elixir-format #: lib/web/templates/email/before_event_notification.html.heex:63 #: lib/web/templates/email/before_event_notification.text.eex:6 -#, elixir-format msgid "If you wish to cancel your attendance, visit the event page through the link above and click the « Attending » button." msgstr "" "Если вы хотите отменить свое участие, просто перейдите на страницу " @@ -1098,7 +1077,6 @@ msgstr "" #, elixir-format #: lib/web/templates/email/email.html.heex:144 #: lib/web/templates/email/email.text.eex:11 -#, elixir-format msgid "Learn more about Mobilizon here!" msgstr "Узнайте больше о Mobilizon!" @@ -1116,21 +1094,18 @@ msgstr "Адрес местоположения был удален" #, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:51 #: lib/web/templates/email/pending_participation_notification.text.eex:6 -#, elixir-format msgid "Manage pending requests" msgstr "Управление запросами в ожидании" #, elixir-format #: lib/web/templates/email/registration_confirmation.html.heex:13 #: lib/web/templates/email/registration_confirmation.text.eex:1 -#, elixir-format msgid "Nearly there!" msgstr "Почти готово!" #, elixir-format #: lib/web/templates/email/email_changed_old.html.heex:13 #: lib/web/templates/email/email_changed_old.text.eex:1 -#, elixir-format msgid "New email confirmation" msgstr "Подтверждение нового адреса электронной почты" @@ -1147,7 +1122,6 @@ msgstr "Кто-то на <b>%{instance}</b> сообщил вам о следу #, elixir-format #: lib/web/templates/email/event_participation_rejected.html.heex:13 #: lib/web/templates/email/event_participation_rejected.text.eex:1 -#, elixir-format msgid "Sorry! You're not going." msgstr "Очень жаль! Вы не будете участвовать." @@ -1156,34 +1130,31 @@ msgstr "Очень жаль! Вы не будете участвовать." msgid "Start" msgstr "Начало" -#: lib/web/templates/email/event_updated.text.eex:18 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:18 msgid "Start %{begins_on}" msgstr "Начало %{begins_on}" -#: lib/web/templates/email/event_updated.text.eex:3 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:3 msgid "There have been changes for %{title} so we'd thought we'd let you know." msgstr "В %{title} произошли изменения, поэтому мы решили сообщить вам об этом." #, elixir-format #: lib/web/templates/email/event_updated.html.heex:55 #: lib/web/templates/email/event_updated.text.eex:11 -#, elixir-format msgid "This event has been cancelled by its organizers. Sorry!" msgstr "Мероприятие отменено организаторами. Очень жаль!" #, elixir-format #: lib/web/templates/email/event_updated.html.heex:51 #: lib/web/templates/email/event_updated.text.eex:7 -#, elixir-format msgid "This event has been confirmed" msgstr "Мероприятие подтверждено" #, elixir-format #: lib/web/templates/email/event_updated.html.heex:53 #: lib/web/templates/email/event_updated.text.eex:9 -#, elixir-format msgid "This event has yet to be confirmed: organizers will let you know if they do confirm it." msgstr "" "Это мероприятие еще не подтверждено: организаторы сообщат вам, если " @@ -1192,7 +1163,6 @@ msgstr "" #, elixir-format #: lib/web/templates/email/event_participation_rejected.html.heex:45 #: lib/web/templates/email/event_participation_rejected.text.eex:7 -#, elixir-format msgid "Unfortunately, the organizers rejected your request." msgstr "К сожалению, организаторы отклонили ваше участие." @@ -1206,8 +1176,8 @@ msgstr "Проверьте свой адрес электронной почты msgid "View report" msgstr "Смотреть отчёт" -#: lib/web/templates/email/report.text.eex:24 #, elixir-format +#: lib/web/templates/email/report.text.eex:24 msgid "View report:" msgstr "Смотреть отчёт:" @@ -1222,22 +1192,20 @@ msgstr "Посетите страницу мероприятия" msgid "Visit the updated event page" msgstr "Посетите обновленную страницу мероприятия" -#: lib/web/templates/email/event_updated.text.eex:23 #, elixir-format +#: lib/web/templates/email/event_updated.text.eex:23 msgid "Visit the updated event page: %{link}" msgstr "Посетите обновленную страницу мероприятия: %{link}" #, elixir-format #: lib/web/templates/email/notification_each_week.html.heex:13 #: lib/web/templates/email/notification_each_week.text.eex:1 -#, elixir-format msgid "What's up this week?" msgstr "Что будет на этой неделе?" #, elixir-format #: lib/web/templates/email/on_day_notification.html.heex:13 #: lib/web/templates/email/on_day_notification.text.eex:1 -#, elixir-format msgid "What's up today?" msgstr "Что будет сегодня?" @@ -1245,7 +1213,6 @@ msgstr "Что будет сегодня?" #: lib/web/templates/email/event_participation_approved.html.heex:70 #: lib/web/templates/email/event_participation_approved.text.eex:11 lib/web/templates/email/event_participation_confirmed.html.heex:70 #: lib/web/templates/email/event_participation_confirmed.text.eex:6 -#, elixir-format msgid "Would you wish to update or cancel your attendance, simply access the event page through the link above and click on the Attending button." msgstr "" "Если вы хотите обновить или отменить свое участие, просто перейдите на " @@ -1254,7 +1221,6 @@ msgstr "" #, elixir-format #: lib/web/templates/email/pending_participation_notification.html.heex:64 #: lib/web/templates/email/pending_participation_notification.text.eex:8 -#, elixir-format msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »." msgstr "" "Вы получили это письмо, потому что выбрали получение уведомлений об " @@ -1262,14 +1228,14 @@ msgstr "" "изменить настройки уведомлений в настройках своей учетной записи в разделе « " "Уведомления »." -#: lib/web/templates/email/event_participation_rejected.text.eex:5 #, elixir-format +#: lib/web/templates/email/event_participation_rejected.text.eex:5 msgid "You issued a request to attend %{title}." msgstr "Вы подали заявку на участие в %{title}." +#, elixir-format #: lib/web/templates/email/event_participation_approved.text.eex:5 #: lib/web/templates/email/event_participation_confirmed.text.eex:3 -#, elixir-format msgid "You recently requested to attend %{title}." msgstr "Вы недавно подали заявку на присоединение к %{title}." @@ -1282,7 +1248,6 @@ msgstr "Вы примете участие!" #, elixir-format #: lib/web/templates/email/email_changed_new.html.heex:64 #: lib/web/templates/email/email_changed_new.text.eex:5 -#, elixir-format msgid "If you didn't trigger the change yourself, please ignore this message." msgstr "" "Если вы не активировали изменение самостоятельно, проигнорируйте это " @@ -1296,7 +1261,6 @@ msgstr "<b>Пожалуйста, используйте это только дл #, elixir-format #: lib/web/templates/email/group_member_removal.html.heex:45 #: lib/web/templates/email/group_member_removal.text.eex:5 -#, elixir-format msgid "If you feel this is an error, you may contact the group's administrators so that they can add you back." msgstr "" "Если вы считаете, что это ошибка, вы можете связаться с администраторами " @@ -1305,17 +1269,16 @@ msgstr "" #, elixir-format #: lib/web/templates/email/group_member_removal.html.heex:13 #: lib/web/templates/email/group_member_removal.text.eex:1 -#, elixir-format msgid "So long, and thanks for the fish!" msgstr "Всего хорошего, и спасибо за рыбу!" -#: lib/web/email/group.ex:63 #, elixir-format +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "Вас исключили из группы %{group}" -#: lib/web/templates/email/group_member_removal.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_member_removal.text.eex:3 msgid "You have been removed from group %{group}. You will not be able to access this group's private content anymore." msgstr "" "Вас исключили из группы %{group}. Вы больше не сможете получить доступ к " @@ -1338,7 +1301,6 @@ msgstr "" #, elixir-format #: lib/web/templates/email/group_suspension.html.heex:54 #: lib/web/templates/email/group_suspension.text.eex:7 -#, elixir-format msgid "As this group was located on another instance, it will continue to work for other instances than this one." msgstr "" "Поскольку эта группа находилась на другом узле, она все равно будет работать " @@ -1347,7 +1309,6 @@ msgstr "" #, elixir-format #: lib/web/templates/email/group_suspension.html.heex:46 #: lib/web/templates/email/group_suspension.text.eex:5 -#, elixir-format msgid "As this group was located on this instance, all of it's data has been irretrievably deleted." msgstr "" "Поскольку эта группа находилась на этом узле, все её содержимое было " @@ -1356,20 +1317,19 @@ msgstr "" #, elixir-format #: lib/web/templates/email/group_suspension.html.heex:13 #: lib/web/templates/email/group_suspension.text.eex:1 -#, elixir-format msgid "The group %{group} has been suspended on %{instance}!" msgstr "Группа %{group} заблокирована на %{instance}!" -#: lib/web/templates/email/group_suspension.text.eex:3 #, elixir-format +#: lib/web/templates/email/group_suspension.text.eex:3 msgid "Your instance's moderation team has decided to suspend %{group_name} (%{group_address}). You are no longer a member of this group." msgstr "" "Команда модераторов вашего узла приняла решение приостановить работу " "%{group_name} (%{group_address}). Вы больше не являетесь участником этой " "группы." -#: lib/web/email/group.ex:97 #, elixir-format +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "Группа %{group} заблокирована на %{instance}" @@ -1557,8 +1517,8 @@ msgstr "" "Групповой контент, отправляется на узлы всех участников группы, если эти " "участники находятся на отличном от этого узле." -#: lib/web/templates/email/event_participation_confirmed.text.eex:4 #, elixir-format +#: lib/web/templates/email/event_participation_confirmed.text.eex:4 msgid "You have confirmed your participation. Update your calendar, because you're on the guest list now!" msgstr "" "Вы подтвердили свое участие. Обновите свой календарь, потому что теперь вы в " @@ -1570,8 +1530,8 @@ msgstr "" msgid "You recently requested to attend <b>%{title}</b>." msgstr "Вы недавно запросили участие в мероприятии <b>%{title}</b>." -#: lib/web/email/participation.ex:88 #, elixir-format +#: lib/web/email/participation.ex:88 msgid "Your participation to event %{title} has been confirmed" msgstr "Ваше участие в мероприятии %{title} одобрено" @@ -1580,8 +1540,8 @@ msgstr "Ваше участие в мероприятии %{title} одобре msgid "<b>%{reporter}</b> reported the following content." msgstr "<b>%{reporter}</b> сообщил о следующем содержимом." -#: lib/web/templates/email/report.text.eex:5 #, elixir-format +#: lib/web/templates/email/report.text.eex:5 msgid "Group %{group} was reported" msgstr "Группа %{group} сообщила" @@ -1590,8 +1550,8 @@ msgstr "Группа %{group} сообщила" msgid "Group reported" msgstr "Группа сообщила" -#: lib/web/templates/email/report.text.eex:7 #, elixir-format +#: lib/web/templates/email/report.text.eex:7 msgid "Profile %{profile} was reported" msgstr "Профиль %{profile} сообщил" @@ -1607,23 +1567,23 @@ msgstr "" "Вы подтвердили свое участие. Обновите свой календарь, потому что теперь вы в " "списке гостей!" -#: lib/mobilizon/posts/post.ex:99 #, elixir-format +#: lib/mobilizon/posts/post.ex:99 msgid "A text is required for the post" msgstr "Для публикации требуется текст" -#: lib/mobilizon/posts/post.ex:98 #, elixir-format +#: lib/mobilizon/posts/post.ex:98 msgid "A title is required for the post" msgstr "Для публикации требуется заголовок" -#: lib/web/templates/email/instance_follow.text.eex:3 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:3 msgid "%{name} (%{domain}) just requested to follow your instance." msgstr "%{name} (%{domain}) только что попросил подписаться на ваш узел." -#: lib/web/email/follow.ex:54 #, elixir-format +#: lib/web/email/follow.ex:54 msgid "%{name} requests to follow your instance" msgstr "%{name} просит подписаться на ваш узел" @@ -1635,15 +1595,15 @@ msgstr "" "вы согласитесь, то этот узел будет получать все публичные события вашего " "узла." -#: lib/web/templates/email/instance_follow.text.eex:4 #, elixir-format +#: lib/web/templates/email/instance_follow.text.eex:4 msgid "If you accept, this instance will receive all of your public events." msgstr "" "Если вы согласитесь, то этот узел будет получать все публичные события " "вашего узла." -#: lib/web/email/follow.ex:48 #, elixir-format +#: lib/web/email/follow.ex:48 msgid "Instance %{name} (%{domain}) requests to follow your instance" msgstr "Узел %{name} (%{domain}) просит подписаться на ваш узел" @@ -1655,21 +1615,18 @@ msgstr "Смотри настройки федерализации" #, elixir-format #: lib/web/templates/email/instance_follow.html.heex:52 #: lib/web/templates/email/instance_follow.text.eex:6 -#, elixir-format msgid "To accept this invitation, head over to the instance's admin settings." msgstr "Чтобы принять это приглашение, перейдите в админку узла." #, elixir-format #: lib/web/templates/email/instance_follow.html.heex:13 #: lib/web/templates/email/instance_follow.text.eex:1 -#, elixir-format msgid "Want to connect?" msgstr "Вы хотите подключиться?" #, elixir-format #: lib/web/templates/email/instance_follow.html.heex:45 #: lib/web/templates/email/instance_follow.text.eex:5 -#, elixir-format msgid "Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too." msgstr "" "Примечание: Подписка %{name} (%{domain}) на вас не обязательно означает, что " @@ -1713,28 +1670,27 @@ msgstr "Сожалеем, но с нашей стороны что-то пошл #, elixir-format #: lib/web/templates/email/email.html.heex:89 #: lib/web/templates/email/email.text.eex:4 -#, elixir-format msgid "This is a demonstration site to test Mobilizon." msgstr "Это демонстрационная площадка для тестирования Mobilizon." +#, elixir-format #: lib/service/metadata/actor.ex:67 lib/service/metadata/actor.ex:75 #: lib/service/metadata/instance.ex:54 lib/service/metadata/instance.ex:60 -#, elixir-format msgid "%{name}'s feed" msgstr "Лента %{name}" -#: lib/service/export/feed.ex:122 #, elixir-format +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "Лента приватных мероприятий от %{actor} на %{instance}" -#: lib/service/export/feed.ex:117 #, elixir-format +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "Лента публичных мероприятий от %{actor} на %{instance}" -#: lib/service/export/feed.ex:225 #, elixir-format +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "Лента для %{email} на %{instance}" @@ -1762,34 +1718,33 @@ msgstr "Технические подробности" msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "Сервер Mobilizon %{instance} временно недоступен." -#: lib/service/export/feed.ex:75 #, elixir-format +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "Публичная лента для %{instance}" -#: lib/graphql/resolvers/user.ex:298 #, elixir-format +#: lib/graphql/resolvers/user.ex:298 msgid "The password you have choosen is too short. Please make sure your password contains at least 6 charaters." msgstr "" "Выбранный вами пароль слишком короткий. Пожалуйста, убедитесь, что ваш " "пароль содержит не менее 6 символов." -#: lib/graphql/resolvers/user.ex:304 #, elixir-format +#: lib/graphql/resolvers/user.ex:304 msgid "The token you provided is invalid. Make sure that the URL is exactly the one provided inside the email you got." msgstr "" "Предоставленный вами токен недействителен. Убедитесь, что URL-адрес - именно " "тот, который указан в полученном вами электронном письме." -#: lib/web/email/actor.ex:44 #, elixir-format +#: lib/web/email/actor.ex:44 msgid "Your participation to %{event} has been cancelled!" msgstr "Ваше участие в %{event} было отменено!" #, elixir-format #: lib/web/templates/email/actor_suspension_participants.html.heex:38 #: lib/web/templates/email/actor_suspension_participants.text.eex:3 -#, elixir-format msgid "Your instance's moderation team has decided to suspend %{actor_name} (%{actor_address}). All of their events have been removed and your participation to event %{event} cancelled." msgstr "" "Команда модераторов вашего узла приняла решение приостановить работу " @@ -1807,7 +1762,6 @@ msgstr "" #, elixir-format #: lib/web/templates/email/actor_suspension_participants.html.heex:13 #: lib/web/templates/email/actor_suspension_participants.text.eex:1 -#, elixir-format msgid "Your participation to %{event} on %{instance} has been cancelled!" msgstr "Ваше участие в %{event} на %{instance} было отменено!" diff --git a/priv/gettext/ru/LC_MESSAGES/errors.po b/priv/gettext/ru/LC_MESSAGES/errors.po index 6ff34d89e..439eb4a39 100644 --- a/priv/gettext/ru/LC_MESSAGES/errors.po +++ b/priv/gettext/ru/LC_MESSAGES/errors.po @@ -101,240 +101,240 @@ msgstr "должно быть больше или равно %{number}" msgid "must be equal to %{number}" msgstr "должно быть равно %{number}" -#: lib/graphql/resolvers/user.ex:107 #, elixir-format +#: lib/graphql/resolvers/user.ex:107 msgid "Cannot refresh the token" msgstr "Токен не может быть обновлен" -#: lib/graphql/resolvers/group.ex:227 #, elixir-format +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "Текущий профиль не является участником этой группы" -#: lib/graphql/resolvers/group.ex:231 #, elixir-format +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "Текущий профиль не является администратором выбранной группы" -#: lib/graphql/resolvers/user.ex:588 #, elixir-format +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Ошибка при сохранении пользовательских настроек" -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 #, elixir-format +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Группа не найдена" -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 #, elixir-format +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Группа с ID %{id} не найдена" -#: lib/graphql/resolvers/user.ex:85 #, elixir-format +#: lib/graphql/resolvers/user.ex:85 msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" "Не удалось пройти аутентификацию. Неверный адрес электронной почты или " "пароль." -#: lib/graphql/resolvers/group.ex:290 #, elixir-format +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "Участник не найден" -#: lib/graphql/resolvers/actor.ex:94 #, elixir-format +#: lib/graphql/resolvers/actor.ex:94 msgid "No profile found for the moderator user" msgstr "Профиль модератора не найден" -#: lib/graphql/resolvers/user.ex:253 #, elixir-format +#: lib/graphql/resolvers/user.ex:253 msgid "No user to validate with this email was found" msgstr "" "Не найдено ни одного пользователя для подтверждения с этим адресом " "электронной почты" -#: lib/graphql/resolvers/person.ex:314 lib/graphql/resolvers/user.ex:278 #, elixir-format +#: lib/graphql/resolvers/person.ex:314 lib/graphql/resolvers/user.ex:278 msgid "No user with this email was found" msgstr "Пользователя с этим адресом электронной почты не найдено" +#, elixir-format #: lib/graphql/resolvers/feed_token.ex:28 #: lib/graphql/resolvers/participant.ex:32 lib/graphql/resolvers/participant.ex:210 lib/graphql/resolvers/person.ex:236 #: lib/graphql/resolvers/person.ex:353 lib/graphql/resolvers/person.ex:380 lib/graphql/resolvers/person.ex:397 -#, elixir-format msgid "Profile is not owned by authenticated user" msgstr "Профиль не принадлежит аутентифицированному пользователю" -#: lib/graphql/resolvers/user.ex:156 #, elixir-format +#: lib/graphql/resolvers/user.ex:156 msgid "Registrations are not open" msgstr "Регистрация не открыта" -#: lib/graphql/resolvers/user.ex:407 #, elixir-format +#: lib/graphql/resolvers/user.ex:407 msgid "The current password is invalid" msgstr "Текущий пароль неверен" -#: lib/graphql/resolvers/user.ex:452 #, elixir-format +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "Новый адрес электронной почты недействителен" -#: lib/graphql/resolvers/user.ex:449 #, elixir-format +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "Новый адрес электронной почты должен отличаться от текущего" -#: lib/graphql/resolvers/user.ex:410 #, elixir-format +#: lib/graphql/resolvers/user.ex:410 msgid "The new password must be different" msgstr "Новый пароль должен отличаться от текущего" -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 #, elixir-format +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "Введён неверный пароль" -#: lib/graphql/resolvers/user.ex:414 #, elixir-format +#: lib/graphql/resolvers/user.ex:414 msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters." msgstr "" "Введенный пароль слишком короткий. Убедитесь, что ваш пароль состоит не " "менее чем из 6 символов." -#: lib/graphql/resolvers/user.ex:274 #, elixir-format +#: lib/graphql/resolvers/user.ex:274 msgid "This user can't reset their password" msgstr "Этот пользователь не может сбросить свой пароль" -#: lib/graphql/resolvers/user.ex:81 #, elixir-format +#: lib/graphql/resolvers/user.ex:81 msgid "This user has been disabled" msgstr "Этот пользователь отключен" -#: lib/graphql/resolvers/user.ex:232 lib/graphql/resolvers/user.ex:237 #, elixir-format +#: lib/graphql/resolvers/user.ex:232 lib/graphql/resolvers/user.ex:237 msgid "Unable to validate user" msgstr "Невозможно проверить пользователя" -#: lib/graphql/resolvers/user.ex:496 #, elixir-format +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "Пользователь уже отключен" -#: lib/graphql/resolvers/user.ex:563 #, elixir-format +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "Запрошенный пользователь не авторизован" -#: lib/graphql/resolvers/group.ex:262 #, elixir-format +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "Вы уже являетесь участником этой группы" -#: lib/graphql/resolvers/group.ex:297 #, elixir-format +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" "Вы не можете покинуть эту группу, потому что вы её единственный администратор" -#: lib/graphql/resolvers/group.ex:259 #, elixir-format +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "Вы не можете присоединиться к этой группе" -#: lib/graphql/resolvers/group.ex:111 #, elixir-format +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "Только модератор может просматривать список групп." -#: lib/graphql/resolvers/user.ex:461 #, elixir-format +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" "Вам необходимо войти в систему, чтобы изменить свой адрес электронной почты" -#: lib/graphql/resolvers/user.ex:422 #, elixir-format +#: lib/graphql/resolvers/user.ex:422 msgid "You need to be logged-in to change your password" msgstr "Вам необходимо войти в систему, чтобы изменить свой пароль" -#: lib/graphql/resolvers/group.ex:236 #, elixir-format +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "Вам необходимо войти в систему, чтобы удалить группу" -#: lib/graphql/resolvers/user.ex:523 #, elixir-format +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "Вам необходимо войти в систему, чтобы удалить свою учетную запись" -#: lib/graphql/resolvers/group.ex:267 #, elixir-format +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "Вам необходимо войти в систему, чтобы присоединиться к группе" -#: lib/graphql/resolvers/group.ex:302 #, elixir-format +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "Вам необходимо войти в систему, чтобы покинуть группу" -#: lib/graphql/resolvers/group.ex:200 #, elixir-format +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "Вам необходимо войти в систему, чтобы обновить группу" -#: lib/graphql/resolvers/user.ex:112 #, elixir-format +#: lib/graphql/resolvers/user.ex:112 msgid "You need to have an existing token to get a refresh token" msgstr "У вас должен быть существующий токен, чтобы получить токен обновления" -#: lib/graphql/resolvers/user.ex:256 lib/graphql/resolvers/user.ex:281 #, elixir-format +#: lib/graphql/resolvers/user.ex:256 lib/graphql/resolvers/user.ex:281 msgid "You requested again a confirmation email too soon" msgstr "Вы слишком рано запросили новое письмо с подтверждением" -#: lib/graphql/resolvers/user.ex:159 #, elixir-format +#: lib/graphql/resolvers/user.ex:159 msgid "Your email is not on the allowlist" msgstr "Ваш адрес электронной почты отсутствует в белом списке" -#: lib/graphql/resolvers/actor.ex:100 #, elixir-format +#: lib/graphql/resolvers/actor.ex:100 msgid "Error while performing background task" msgstr "Ошибка при выполнении фоновой задачи" -#: lib/graphql/resolvers/actor.ex:32 #, elixir-format +#: lib/graphql/resolvers/actor.ex:32 msgid "No profile found with this ID" msgstr "Профиль с этим ID не найден" -#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:97 #, elixir-format +#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:97 msgid "No remote profile found with this ID" msgstr "Удалённый профиль с этим ID не найден" -#: lib/graphql/resolvers/actor.ex:72 #, elixir-format +#: lib/graphql/resolvers/actor.ex:72 msgid "Only moderators and administrators can suspend a profile" msgstr "Только модераторы и администраторы могут заблокировать профиль" -#: lib/graphql/resolvers/actor.ex:105 #, elixir-format +#: lib/graphql/resolvers/actor.ex:105 msgid "Only moderators and administrators can unsuspend a profile" msgstr "Только модераторы и администраторы могут разблокировать профиль" -#: lib/graphql/resolvers/actor.ex:29 #, elixir-format +#: lib/graphql/resolvers/actor.ex:29 msgid "Only remote profiles may be refreshed" msgstr "Обновлять можно только удаленные профили" -#: lib/graphql/resolvers/actor.ex:64 #, elixir-format +#: lib/graphql/resolvers/actor.ex:64 msgid "Profile already suspended" msgstr "Профиль уже заблокирован" @@ -349,33 +349,33 @@ msgstr "Вашему узлу требуется действующий адре msgid "Anonymous participation is not enabled" msgstr "Анонимное участие не разрешено" -#: lib/graphql/resolvers/person.ex:210 #, elixir-format +#: lib/graphql/resolvers/person.ex:210 msgid "Cannot remove the last administrator of a group" msgstr "Невозможно удалить последнего администратора группы" -#: lib/graphql/resolvers/person.ex:207 #, elixir-format +#: lib/graphql/resolvers/person.ex:207 msgid "Cannot remove the last identity of a user" msgstr "Единственный идентификатор пользователя не может быть удален" -#: lib/graphql/resolvers/comment.ex:125 #, elixir-format +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "Комментарий уже удалён" -#: lib/graphql/error.ex:101 lib/graphql/resolvers/discussion.ex:75 #, elixir-format +#: lib/graphql/error.ex:101 lib/graphql/resolvers/discussion.ex:75 msgid "Discussion not found" msgstr "Обсуждение не найдено" -#: lib/graphql/resolvers/report.ex:63 lib/graphql/resolvers/report.ex:82 #, elixir-format +#: lib/graphql/resolvers/report.ex:63 lib/graphql/resolvers/report.ex:82 msgid "Error while saving report" msgstr "При сохранении отчёта произошла ошибка" -#: lib/graphql/resolvers/report.ex:102 #, elixir-format +#: lib/graphql/resolvers/report.ex:102 msgid "Error while updating report" msgstr "При обновлении отчёта произошла ошибка" @@ -384,16 +384,16 @@ msgstr "При обновлении отчёта произошла ошибка msgid "Event id not found" msgstr "Не найден id мероприятия" -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 #, elixir-format +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "Мероприятие не найдено" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "Мероприятия с ID %{id} не существует" @@ -402,19 +402,19 @@ msgstr "Мероприятия с ID %{id} не существует" msgid "Internal Error" msgstr "Внутренняя ошибка" -#: lib/graphql/resolvers/discussion.ex:225 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:225 msgid "No discussion with ID %{id}" msgstr "Обсуждения с ID %{id} нет" +#, elixir-format #: lib/graphql/resolvers/todos.ex:80 lib/graphql/resolvers/todos.ex:107 #: lib/graphql/resolvers/todos.ex:179 lib/graphql/resolvers/todos.ex:208 lib/graphql/resolvers/todos.ex:237 -#, elixir-format msgid "No profile found for user" msgstr "Профиль пользователя не найден" -#: lib/graphql/resolvers/feed_token.ex:64 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:64 msgid "No such feed token" msgstr "Такого токена ленты не существует" @@ -429,57 +429,57 @@ msgstr "У участника уже есть роль %{role}" msgid "Participant not found" msgstr "Участник не найден" -#: lib/graphql/resolvers/person.ex:32 #, elixir-format +#: lib/graphql/resolvers/person.ex:32 msgid "Person with ID %{id} not found" msgstr "Человек с ID %{id} не найден" -#: lib/graphql/resolvers/person.ex:56 #, elixir-format +#: lib/graphql/resolvers/person.ex:56 msgid "Person with username %{username} not found" msgstr "Не найдено человека с именем пользователя %{username}" -#: lib/graphql/resolvers/post.ex:169 lib/graphql/resolvers/post.ex:203 #, elixir-format +#: lib/graphql/resolvers/post.ex:169 lib/graphql/resolvers/post.ex:203 msgid "Post ID is not a valid ID" msgstr "ID поста имеет недопустимое значение" -#: lib/graphql/resolvers/post.ex:172 lib/graphql/resolvers/post.ex:206 #, elixir-format +#: lib/graphql/resolvers/post.ex:172 lib/graphql/resolvers/post.ex:206 msgid "Post doesn't exist" msgstr "Пост не существует" -#: lib/graphql/resolvers/member.ex:82 #, elixir-format +#: lib/graphql/resolvers/member.ex:82 msgid "Profile invited doesn't exist" msgstr "Приглашенный профиль не существует" -#: lib/graphql/resolvers/member.ex:91 lib/graphql/resolvers/member.ex:95 #, elixir-format +#: lib/graphql/resolvers/member.ex:91 lib/graphql/resolvers/member.ex:95 msgid "Profile is already a member of this group" msgstr "Профиль уже является участником этой группы" +#, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 -#, elixir-format msgid "Profile is not member of group" msgstr "Профиль не является членом группы" -#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/person.ex:233 #, elixir-format +#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/person.ex:233 msgid "Profile not found" msgstr "Профиль не найден" -#: lib/graphql/resolvers/report.ex:40 #, elixir-format +#: lib/graphql/resolvers/report.ex:40 msgid "Report not found" msgstr "Отчёт не найден" -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 #, elixir-format +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "Ресурс не существует" @@ -491,38 +491,38 @@ msgstr "" "участников" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "Этот токен недействителен" -#: lib/graphql/resolvers/todos.ex:176 lib/graphql/resolvers/todos.ex:243 #, elixir-format +#: lib/graphql/resolvers/todos.ex:176 lib/graphql/resolvers/todos.ex:243 msgid "Todo doesn't exist" msgstr "Такого пункта в списке дел не существует" +#, elixir-format #: lib/graphql/resolvers/todos.ex:77 lib/graphql/resolvers/todos.ex:211 #: lib/graphql/resolvers/todos.ex:240 -#, elixir-format msgid "Todo list doesn't exist" msgstr "Списка дел не существует" -#: lib/graphql/resolvers/feed_token.ex:73 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:73 msgid "Token does not exist" msgstr "Токен не существует" -#: lib/graphql/resolvers/feed_token.ex:67 lib/graphql/resolvers/feed_token.ex:70 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:67 lib/graphql/resolvers/feed_token.ex:70 msgid "Token is not a valid UUID" msgstr "Токен не является допустимым UUID" -#: lib/graphql/error.ex:96 lib/graphql/resolvers/person.ex:415 #, elixir-format +#: lib/graphql/error.ex:96 lib/graphql/resolvers/person.ex:415 msgid "User not found" msgstr "Пользователь не найден" -#: lib/graphql/resolvers/person.ex:310 #, elixir-format +#: lib/graphql/resolvers/person.ex:310 msgid "You already have a profile for this user" msgstr "У вас уже есть профиль для этого пользователя" @@ -531,38 +531,38 @@ msgstr "У вас уже есть профиль для этого пользо msgid "You are already a participant of this event" msgstr "Вы уже являетесь участником этого мероприятия" -#: lib/graphql/resolvers/member.ex:85 #, elixir-format +#: lib/graphql/resolvers/member.ex:85 msgid "You are not a member of this group" msgstr "Вы не состоите в этой группе" -#: lib/graphql/resolvers/member.ex:155 #, elixir-format +#: lib/graphql/resolvers/member.ex:155 msgid "You are not a moderator or admin for this group" msgstr "Вы не модератор и не администратор этой группы" -#: lib/graphql/resolvers/comment.ex:59 #, elixir-format +#: lib/graphql/resolvers/comment.ex:59 msgid "You are not allowed to create a comment if not connected" msgstr "Вы не можете создать комментарий при отсутствии подключения" -#: lib/graphql/resolvers/feed_token.ex:41 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:41 msgid "You are not allowed to create a feed token if not connected" msgstr "Вы не можете создать токен ленты при отсутствии подключения" -#: lib/graphql/resolvers/comment.ex:133 #, elixir-format +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "Вы не можете удалить комментарий при отсутствии подключения" -#: lib/graphql/resolvers/feed_token.ex:82 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:82 msgid "You are not allowed to delete a feed token if not connected" msgstr "Вы не можете удалить токен ленты при отсутствии подключения" -#: lib/graphql/resolvers/comment.ex:93 #, elixir-format +#: lib/graphql/resolvers/comment.ex:93 msgid "You are not allowed to update a comment if not connected" msgstr "Вы не можете обновить комментарий при отсутствии подключения" @@ -574,126 +574,126 @@ msgstr "" "Вы не можете покинуть мероприятие, потому что являетесь единственным " "участником, создавшим его" -#: lib/graphql/resolvers/member.ex:159 #, elixir-format +#: lib/graphql/resolvers/member.ex:159 msgid "You can't set yourself to a lower member role for this group because you are the only administrator" msgstr "" "Вы не можете назначить себе роль с меньшими правами для этой группы, потому " "что вы единственный администратор" -#: lib/graphql/resolvers/comment.ex:121 #, elixir-format +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "Вы не можете удалить этот комментарий" -#: lib/graphql/resolvers/event.ex:375 #, elixir-format +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "Вы не можете удалить это мероприятие" -#: lib/graphql/resolvers/member.ex:88 #, elixir-format +#: lib/graphql/resolvers/member.ex:88 msgid "You cannot invite to this group" msgstr "Вы не можете приглашать в эту группу" -#: lib/graphql/resolvers/feed_token.ex:76 #, elixir-format +#: lib/graphql/resolvers/feed_token.ex:76 msgid "You don't have permission to delete this token" msgstr "У вас нет прав на удаление этого токена" -#: lib/graphql/resolvers/admin.ex:54 #, elixir-format +#: lib/graphql/resolvers/admin.ex:54 msgid "You need to be logged-in and a moderator to list action logs" msgstr "" "Для доступа к журналу активности вы должны войти в систему и иметь права " "модератора" -#: lib/graphql/resolvers/report.ex:28 #, elixir-format +#: lib/graphql/resolvers/report.ex:28 msgid "You need to be logged-in and a moderator to list reports" msgstr "" "Для доступа к списку отчётов вы должны войти в систему и иметь права " "модератора" -#: lib/graphql/resolvers/report.ex:107 #, elixir-format +#: lib/graphql/resolvers/report.ex:107 msgid "You need to be logged-in and a moderator to update a report" msgstr "" "Для обновления отчёта вы должны войти в систему и иметь права модератора" -#: lib/graphql/resolvers/report.ex:45 #, elixir-format +#: lib/graphql/resolvers/report.ex:45 msgid "You need to be logged-in and a moderator to view a report" msgstr "Для просмотра отчёта вы должны войти в систему и иметь права модератора" -#: lib/graphql/resolvers/admin.ex:246 #, elixir-format +#: lib/graphql/resolvers/admin.ex:246 msgid "You need to be logged-in and an administrator to access admin settings" msgstr "" "Для доступа в админку вы должны войти в систему и иметь права администратора" -#: lib/graphql/resolvers/admin.ex:230 #, elixir-format +#: lib/graphql/resolvers/admin.ex:230 msgid "You need to be logged-in and an administrator to access dashboard statistics" msgstr "" "Для доступа к панели со статистикой вы должны войти в систему и иметь права " "администратора" -#: lib/graphql/resolvers/admin.ex:272 #, elixir-format +#: lib/graphql/resolvers/admin.ex:272 msgid "You need to be logged-in and an administrator to save admin settings" msgstr "" "Для сохранения настроек в админке вы должны войти в систему и иметь права " "администратора" -#: lib/graphql/resolvers/discussion.ex:90 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:90 msgid "You need to be logged-in to access discussions" msgstr "Вам необходимо войти в систему, чтобы получить доступ к обсуждениям" -#: lib/graphql/resolvers/resource.ex:96 #, elixir-format +#: lib/graphql/resolvers/resource.ex:96 msgid "You need to be logged-in to access resources" msgstr "Вам необходимо войти в систему, чтобы получить доступ к ресурсам" -#: lib/graphql/resolvers/event.ex:295 #, elixir-format +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность создавать мероприятия" -#: lib/graphql/resolvers/post.ex:141 #, elixir-format +#: lib/graphql/resolvers/post.ex:141 msgid "You need to be logged-in to create posts" msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность создавать публикации" -#: lib/graphql/resolvers/report.ex:79 #, elixir-format +#: lib/graphql/resolvers/report.ex:79 msgid "You need to be logged-in to create reports" msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность создавать отчёты" -#: lib/graphql/resolvers/resource.ex:136 #, elixir-format +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность создавать ресурсы" -#: lib/graphql/resolvers/event.ex:384 #, elixir-format +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность удалить мероприятие" -#: lib/graphql/resolvers/post.ex:214 #, elixir-format +#: lib/graphql/resolvers/post.ex:214 msgid "You need to be logged-in to delete posts" msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность удалять публикации" -#: lib/graphql/resolvers/resource.ex:203 #, elixir-format +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "Вам необходимо войти в систему, чтобы иметь возможность удалять ресурсы" @@ -707,154 +707,154 @@ msgstr "Вам необходимо войти в систему, чтобы п msgid "You need to be logged-in to leave an event" msgstr "Вам необходимо войти в систему, чтобы покинуть мероприятие" -#: lib/graphql/resolvers/event.ex:341 #, elixir-format +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "Вам необходимо войти в систему, чтобы обновить мероприятие" -#: lib/graphql/resolvers/post.ex:180 #, elixir-format +#: lib/graphql/resolvers/post.ex:180 msgid "You need to be logged-in to update posts" msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность обновлять публикации" -#: lib/graphql/resolvers/resource.ex:173 #, elixir-format +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" "Вам необходимо войти в систему, чтобы иметь возможность обновлять ресурсы" -#: lib/graphql/resolvers/resource.ex:232 #, elixir-format +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" "Вам необходимо войти в систему, чтобы получить доступ к предпросмотру " "ресурсов" -#: lib/graphql/resolvers/resource.ex:128 #, elixir-format +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "Родительский ресурс не принадлежит к этой группе" -#: lib/mobilizon/users/user.ex:113 #, elixir-format +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "Выбран слишком короткий пароль." -#: lib/mobilizon/users/user.ex:141 #, elixir-format +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" "Регистрационный токен уже используется. Похоже, что проблема с нашей стороны." -#: lib/mobilizon/users/user.ex:108 #, elixir-format +#: lib/mobilizon/users/user.ex:108 msgid "This email is already used." msgstr "Этот электронный адрес уже используется." -#: lib/graphql/error.ex:97 #, elixir-format +#: lib/graphql/error.ex:97 msgid "Post not found" msgstr "Пост не найден" -#: lib/graphql/error.ex:84 #, elixir-format +#: lib/graphql/error.ex:84 msgid "Invalid arguments passed" msgstr "Переданы неверные аргументы" -#: lib/graphql/error.ex:90 #, elixir-format +#: lib/graphql/error.ex:90 msgid "Invalid credentials" msgstr "Неверные учётные данные" -#: lib/graphql/error.ex:88 #, elixir-format +#: lib/graphql/error.ex:88 msgid "Reset your password to login" msgstr "Сбросьте пароль для входа в систему" -#: lib/graphql/error.ex:95 lib/graphql/error.ex:100 #, elixir-format +#: lib/graphql/error.ex:95 lib/graphql/error.ex:100 msgid "Resource not found" msgstr "Ресурс не найден" -#: lib/graphql/error.ex:102 #, elixir-format +#: lib/graphql/error.ex:102 msgid "Something went wrong" msgstr "Что-то пошло не так" -#: lib/graphql/error.ex:83 #, elixir-format +#: lib/graphql/error.ex:83 msgid "Unknown Resource" msgstr "Неизвестный ресурс" -#: lib/graphql/error.ex:93 #, elixir-format +#: lib/graphql/error.ex:93 msgid "You don't have permission to do this" msgstr "У вас недостаточно для этого прав" -#: lib/graphql/error.ex:85 #, elixir-format +#: lib/graphql/error.ex:85 msgid "You need to be logged in" msgstr "Вам необходимо войти в систему" -#: lib/graphql/resolvers/member.ex:116 #, elixir-format +#: lib/graphql/resolvers/member.ex:116 msgid "You can't accept this invitation with this profile." msgstr "Вы не можете принять это приглашение из этого профиля." -#: lib/graphql/resolvers/member.ex:137 #, elixir-format +#: lib/graphql/resolvers/member.ex:137 msgid "You can't reject this invitation with this profile." msgstr "Вы не можете отклонить это приглашение из этого профиля." -#: lib/graphql/resolvers/media.ex:71 #, elixir-format +#: lib/graphql/resolvers/media.ex:71 msgid "File doesn't have an allowed MIME type." msgstr "Файл не имеет разрешенного MIME-типа." -#: lib/graphql/resolvers/group.ex:195 #, elixir-format +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "Профиль не является администратором группы" -#: lib/graphql/resolvers/event.ex:330 #, elixir-format +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "Вы не можете редактировать это мероприятие." -#: lib/graphql/resolvers/event.ex:333 #, elixir-format +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "Вы не можете назначить это мероприятие этому профилю." -#: lib/graphql/resolvers/member.ex:140 #, elixir-format +#: lib/graphql/resolvers/member.ex:140 msgid "This invitation doesn't exist." msgstr "Такого приглашения не существует." -#: lib/graphql/resolvers/member.ex:185 #, elixir-format +#: lib/graphql/resolvers/member.ex:185 msgid "This member already has been rejected." msgstr "Этот участник уже был отклонён." -#: lib/graphql/resolvers/member.ex:192 #, elixir-format +#: lib/graphql/resolvers/member.ex:192 msgid "You don't have the right to remove this member." msgstr "У вас нет прав на удаление этого участника." -#: lib/mobilizon/actors/actor.ex:349 #, elixir-format +#: lib/mobilizon/actors/actor.ex:349 msgid "This username is already taken." msgstr "Это имя пользователя уже занято." -#: lib/graphql/resolvers/discussion.ex:87 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:87 msgid "You must provide either an ID or a slug to access a discussion" msgstr "" "Вы должны предоставить либо ID, либо короткое имя для доступа к обсуждению" -#: lib/graphql/resolvers/event.ex:284 #, elixir-format +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "Профиль организатора не принадлежит пользователю" @@ -863,75 +863,75 @@ msgstr "Профиль организатора не принадлежит по msgid "Profile ID provided is not the anonymous profile one" msgstr "Указанный ID профиля не является анонимным" -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 -#: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 #, elixir-format +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 +#: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "Предоставленное изображение слишком большое" -#: lib/web/views/utils.ex:34 #, elixir-format +#: lib/web/views/utils.ex:34 msgid "Index file not found. You need to recompile the front-end." msgstr "Индексный файл не найден. Вам нужно пересобрать фронтенд." -#: lib/graphql/resolvers/resource.ex:125 #, elixir-format +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "При создании ресурса произошла ошибка" -#: lib/graphql/resolvers/user.ex:479 #, elixir-format +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "Неверный токен активации" -#: lib/graphql/resolvers/resource.ex:222 #, elixir-format +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "Невозможно получить сведения о ресурсе по этому URL-адресу." #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "Указанный профиль модератора не имеет доступа к этому событию" -#: lib/graphql/resolvers/event.ex:278 #, elixir-format +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" "В профиле организатора нет разрешения на создание мероприятия от имени этой " "группы" -#: lib/graphql/resolvers/event.ex:321 #, elixir-format +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" "У этого профиля нет разрешения на обновление мероприятия от имени этой группы" -#: lib/graphql/resolvers/user.ex:163 #, elixir-format +#: lib/graphql/resolvers/user.ex:163 msgid "Your e-mail has been denied registration or uses a disallowed e-mail provider" msgstr "" "Ваш адрес электронной почты был отклонен при регистрации или используется " "запрещенная служба электронной почты" -#: lib/graphql/resolvers/comment.ex:128 #, elixir-format +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "Мероприятие не найдено" -#: lib/graphql/resolvers/discussion.ex:129 #, elixir-format +#: lib/graphql/resolvers/discussion.ex:129 msgid "Error while creating a discussion" msgstr "При создании ресурса произошла ошибка" -#: lib/graphql/resolvers/user.ex:602 #, elixir-format +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "При обновлении отчёта произошла ошибка" -#: lib/graphql/resolvers/person.ex:307 #, elixir-format +#: lib/graphql/resolvers/person.ex:307 msgid "Error while uploading pictures" msgstr "При обновлении отчёта произошла ошибка" @@ -940,18 +940,18 @@ msgstr "При обновлении отчёта произошла ошибка msgid "Failed to leave the event" msgstr "Не удалось покинуть мероприятие" -#: lib/graphql/resolvers/group.ex:191 #, elixir-format +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "Не удалось обновить группу" -#: lib/graphql/resolvers/user.ex:456 #, elixir-format +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "Не удалось обновить электронную почту пользователя" -#: lib/graphql/resolvers/user.ex:475 #, elixir-format +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "Невозможно проверить пользователя" @@ -960,33 +960,33 @@ msgstr "Невозможно проверить пользователя" msgid "The anonymous actor ID is invalid" msgstr "ID анонимного актора недействителен" -#: lib/graphql/resolvers/resource.ex:161 #, elixir-format +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "Неизвестная ошибка при обновлении ресурса" -#: lib/graphql/resolvers/comment.ex:84 #, elixir-format +#: lib/graphql/resolvers/comment.ex:84 msgid "You are not the comment creator" msgstr "Вы не автор комментария" -#: lib/graphql/resolvers/user.ex:404 #, elixir-format +#: lib/graphql/resolvers/user.ex:404 msgid "You cannot change your password." msgstr "Вы не можете изменить свой пароль." #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -994,3 +994,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "Неизвестная ошибка при обновлении ресурса" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/default.po b/priv/gettext/sv/LC_MESSAGES/default.po index 7dbe6f01e..5a9942a9d 100644 --- a/priv/gettext/sv/LC_MESSAGES/default.po +++ b/priv/gettext/sv/LC_MESSAGES/default.po @@ -326,12 +326,12 @@ msgid "What information do we collect?" msgstr "" #, elixir-format -#: lib/web/email/user.ex:177 +#: lib/web/email/user.ex:175 msgid "Mobilizon on %{instance}: confirm your email address" msgstr "Mobilizon på %{instance}: bekräfta din e-postadress" #, elixir-format -#: lib/web/email/user.ex:154 +#: lib/web/email/user.ex:155 msgid "Mobilizon on %{instance}: email changed" msgstr "Mobilizon på %{instance}: e-postadressen har ändrats" @@ -389,7 +389,7 @@ msgid "View the event on: %{link}" msgstr "Visa det uppdaterade evenemanget på %{link}" #, elixir-format -#: lib/web/email/group.ex:33 +#: lib/web/email/group.ex:31 msgid "You have been invited by %{inviter} to join group %{group}" msgstr "%{inviter} har bjudit in dig till gruppen %{group}" @@ -1071,7 +1071,7 @@ msgid "So long, and thanks for the fish!" msgstr "" #, elixir-format -#: lib/web/email/group.ex:63 +#: lib/web/email/group.ex:61 msgid "You have been removed from group %{group}" msgstr "" @@ -1114,7 +1114,7 @@ msgid "Your instance's moderation team has decided to suspend %{group_name} (%{g msgstr "" #, elixir-format -#: lib/web/email/group.ex:97 +#: lib/web/email/group.ex:95 msgid "The group %{group} has been suspended on %{instance}" msgstr "" @@ -1377,17 +1377,17 @@ msgid "%{name}'s feed" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:122 +#: lib/service/export/feed.ex:115 msgid "%{actor}'s private events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:117 +#: lib/service/export/feed.ex:110 msgid "%{actor}'s public events feed on %{instance}" msgstr "" #, elixir-format -#: lib/service/export/feed.ex:225 +#: lib/service/export/feed.ex:219 msgid "Feed for %{email} on %{instance}" msgstr "" @@ -1412,7 +1412,7 @@ msgid "The Mobilizon server %{instance} seems to be temporarily down." msgstr "" #, elixir-format -#: lib/service/export/feed.ex:75 +#: lib/service/export/feed.ex:67 msgid "Public feed for %{instance}" msgstr "" diff --git a/priv/gettext/sv/LC_MESSAGES/errors.po b/priv/gettext/sv/LC_MESSAGES/errors.po index aaaf0ea43..8b108a3e0 100644 --- a/priv/gettext/sv/LC_MESSAGES/errors.po +++ b/priv/gettext/sv/LC_MESSAGES/errors.po @@ -100,28 +100,28 @@ msgid "Cannot refresh the token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:227 +#: lib/graphql/resolvers/group.ex:245 msgid "Current profile is not a member of this group" msgstr "Den nuvarande profilen är inte med i den här gruppen" #, elixir-format -#: lib/graphql/resolvers/group.ex:231 +#: lib/graphql/resolvers/group.ex:249 msgid "Current profile is not an administrator of the selected group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:588 +#: lib/graphql/resolvers/user.ex:592 msgid "Error while saving user settings" msgstr "Ett fel uppstod när användarinställningarna skulle sparas" #, elixir-format -#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:224 -#: lib/graphql/resolvers/group.ex:256 lib/graphql/resolvers/group.ex:293 lib/graphql/resolvers/member.ex:79 +#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 +#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/member.ex:79 msgid "Group not found" msgstr "Gruppen kunde inte hittas" #, elixir-format -#: lib/graphql/resolvers/group.ex:77 lib/graphql/resolvers/group.ex:81 +#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82 msgid "Group with ID %{id} not found" msgstr "Gruppen med %{id} kunde inte hittas" @@ -131,7 +131,7 @@ msgid "Impossible to authenticate, either your email or password are invalid." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:290 +#: lib/graphql/resolvers/group.ex:308 msgid "Member not found" msgstr "" @@ -168,12 +168,12 @@ msgid "The current password is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:452 +#: lib/graphql/resolvers/user.ex:450 msgid "The new email doesn't seem to be valid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:449 +#: lib/graphql/resolvers/user.ex:453 msgid "The new email must be different" msgstr "" @@ -183,8 +183,8 @@ msgid "The new password must be different" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:446 lib/graphql/resolvers/user.ex:515 -#: lib/graphql/resolvers/user.ex:518 +#: lib/graphql/resolvers/user.ex:457 lib/graphql/resolvers/user.ex:519 +#: lib/graphql/resolvers/user.ex:522 msgid "The password provided is invalid" msgstr "" @@ -209,37 +209,37 @@ msgid "Unable to validate user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:496 +#: lib/graphql/resolvers/user.ex:500 msgid "User already disabled" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:563 +#: lib/graphql/resolvers/user.ex:567 msgid "User requested is not logged-in" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:262 +#: lib/graphql/resolvers/group.ex:280 msgid "You are already a member of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:297 +#: lib/graphql/resolvers/group.ex:315 msgid "You can't leave this group because you are the only administrator" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:259 +#: lib/graphql/resolvers/group.ex:277 msgid "You cannot join this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:111 +#: lib/graphql/resolvers/group.ex:112 msgid "You may not list groups unless moderator." msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:461 +#: lib/graphql/resolvers/user.ex:465 msgid "You need to be logged-in to change your email" msgstr "" @@ -249,27 +249,27 @@ msgid "You need to be logged-in to change your password" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:236 +#: lib/graphql/resolvers/group.ex:254 msgid "You need to be logged-in to delete a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:523 +#: lib/graphql/resolvers/user.ex:527 msgid "You need to be logged-in to delete your account" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:267 +#: lib/graphql/resolvers/group.ex:285 msgid "You need to be logged-in to join a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:302 +#: lib/graphql/resolvers/group.ex:320 msgid "You need to be logged-in to leave a group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:200 +#: lib/graphql/resolvers/group.ex:218 msgid "You need to be logged-in to update a group" msgstr "" @@ -345,7 +345,7 @@ msgid "Cannot remove the last identity of a user" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:125 +#: lib/graphql/resolvers/comment.ex:126 msgid "Comment is already deleted" msgstr "" @@ -370,15 +370,15 @@ msgid "Event id not found" msgstr "" #, elixir-format -#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:327 -#: lib/graphql/resolvers/event.ex:379 +#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:355 +#: lib/graphql/resolvers/event.ex:407 msgid "Event not found" msgstr "" #, elixir-format #: lib/graphql/resolvers/participant.ex:87 #: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155 -#: lib/graphql/resolvers/participant.ex:349 +#: lib/graphql/resolvers/participant.ex:336 msgid "Event with this ID %{id} doesn't exist" msgstr "" @@ -446,8 +446,8 @@ msgstr "" #, elixir-format #: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 -#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:131 -#: lib/graphql/resolvers/resource.ex:164 lib/graphql/resolvers/resource.ex:198 lib/graphql/resolvers/todos.ex:58 +#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 +#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 #: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 #: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246 msgid "Profile is not member of group" @@ -464,7 +464,7 @@ msgid "Report not found" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:168 lib/graphql/resolvers/resource.ex:195 +#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196 msgid "Resource doesn't exist" msgstr "" @@ -474,7 +474,7 @@ msgid "The event has already reached its maximum capacity" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:283 +#: lib/graphql/resolvers/participant.ex:282 msgid "This token is invalid" msgstr "" @@ -535,7 +535,7 @@ msgid "You are not allowed to create a feed token if not connected" msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:133 +#: lib/graphql/resolvers/comment.ex:134 msgid "You are not allowed to delete a comment if not connected" msgstr "" @@ -561,12 +561,12 @@ msgid "You can't set yourself to a lower member role for this group because you msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:121 +#: lib/graphql/resolvers/comment.ex:122 msgid "You cannot delete this comment" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:375 +#: lib/graphql/resolvers/event.ex:403 msgid "You cannot delete this event" msgstr "" @@ -626,7 +626,7 @@ msgid "You need to be logged-in to access resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:295 +#: lib/graphql/resolvers/event.ex:313 msgid "You need to be logged-in to create events" msgstr "" @@ -641,12 +641,12 @@ msgid "You need to be logged-in to create reports" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:136 +#: lib/graphql/resolvers/resource.ex:137 msgid "You need to be logged-in to create resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:384 +#: lib/graphql/resolvers/event.ex:412 msgid "You need to be logged-in to delete an event" msgstr "" @@ -656,7 +656,7 @@ msgid "You need to be logged-in to delete posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:203 +#: lib/graphql/resolvers/resource.ex:204 msgid "You need to be logged-in to delete resources" msgstr "" @@ -671,7 +671,7 @@ msgid "You need to be logged-in to leave an event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:341 +#: lib/graphql/resolvers/event.ex:369 msgid "You need to be logged-in to update an event" msgstr "" @@ -681,27 +681,27 @@ msgid "You need to be logged-in to update posts" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:173 +#: lib/graphql/resolvers/resource.ex:174 msgid "You need to be logged-in to update resources" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:232 +#: lib/graphql/resolvers/resource.ex:233 msgid "You need to be logged-in to view a resource preview" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:128 +#: lib/graphql/resolvers/resource.ex:129 msgid "Parent resource doesn't belong to this group" msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:113 +#: lib/mobilizon/users/user.ex:114 msgid "The chosen password is too short." msgstr "" #, elixir-format -#: lib/mobilizon/users/user.ex:141 +#: lib/mobilizon/users/user.ex:142 msgid "The registration token is already in use, this looks like an issue on our side." msgstr "" @@ -771,17 +771,17 @@ msgid "File doesn't have an allowed MIME type." msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:195 +#: lib/graphql/resolvers/group.ex:213 msgid "Profile is not administrator for the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:330 +#: lib/graphql/resolvers/event.ex:358 msgid "You can't edit this event." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:333 +#: lib/graphql/resolvers/event.ex:361 msgid "You can't attribute this event to this profile." msgstr "" @@ -811,7 +811,7 @@ msgid "You must provide either an ID or a slug to access a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:284 +#: lib/graphql/resolvers/event.ex:308 msgid "Organizer profile is not owned by the user" msgstr "" @@ -821,7 +821,7 @@ msgid "Profile ID provided is not the anonymous profile one" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:153 lib/graphql/resolvers/group.ex:183 +#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 #: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304 msgid "The provided picture is too heavy" msgstr "" @@ -832,33 +832,33 @@ msgid "Index file not found. You need to recompile the front-end." msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:125 +#: lib/graphql/resolvers/resource.ex:126 msgid "Error while creating resource" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:479 +#: lib/graphql/resolvers/user.ex:483 msgid "Invalid activation token" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:222 +#: lib/graphql/resolvers/resource.ex:223 msgid "Unable to fetch resource details from this URL." msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:171 lib/graphql/resolvers/participant.ex:253 -#: lib/graphql/resolvers/participant.ex:341 +#: lib/graphql/resolvers/event.ex:173 lib/graphql/resolvers/participant.ex:253 +#: lib/graphql/resolvers/participant.ex:328 msgid "Provided profile doesn't have moderator permissions on this event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:278 +#: lib/graphql/resolvers/event.ex:294 msgid "Organizer profile doesn't have permission to create an event on behalf of this group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/event.ex:321 +#: lib/graphql/resolvers/event.ex:349 msgid "This profile doesn't have permission to update an event on behalf of this group" msgstr "" @@ -868,7 +868,7 @@ msgid "Your e-mail has been denied registration or uses a disallowed e-mail prov msgstr "" #, elixir-format -#: lib/graphql/resolvers/comment.ex:128 +#: lib/graphql/resolvers/comment.ex:129 msgid "Comment not found" msgstr "" @@ -878,7 +878,7 @@ msgid "Error while creating a discussion" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:602 +#: lib/graphql/resolvers/user.ex:606 msgid "Error while updating locale" msgstr "" @@ -893,17 +893,17 @@ msgid "Failed to leave the event" msgstr "" #, elixir-format -#: lib/graphql/resolvers/group.ex:191 +#: lib/graphql/resolvers/group.ex:209 msgid "Failed to update the group" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:456 +#: lib/graphql/resolvers/user.ex:447 msgid "Failed to update user email" msgstr "" #, elixir-format -#: lib/graphql/resolvers/user.ex:475 +#: lib/graphql/resolvers/user.ex:479 msgid "Failed to validate user email" msgstr "" @@ -913,7 +913,7 @@ msgid "The anonymous actor ID is invalid" msgstr "" #, elixir-format -#: lib/graphql/resolvers/resource.ex:161 +#: lib/graphql/resolvers/resource.ex:162 msgid "Unknown error while updating resource" msgstr "" @@ -928,17 +928,17 @@ msgid "You cannot change your password." msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:310 +#: lib/graphql/resolvers/participant.ex:321 msgid "Format not supported" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:322 +#: lib/graphql/resolvers/participant.ex:305 msgid "A dependency needed to export to %{format} is not installed" msgstr "" #, elixir-format -#: lib/graphql/resolvers/participant.ex:330 +#: lib/graphql/resolvers/participant.ex:313 msgid "An error occured while saving export" msgstr "" @@ -946,3 +946,23 @@ msgstr "" #: lib/web/controllers/export_controller.ex:30 msgid "Export to format %{format} is not enabled on this instance" msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/group.ex:165 +msgid "Only admins can create groups" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/event.ex:301 +msgid "Only groups can create events" +msgstr "" + +#, elixir-format, fuzzy +#: lib/graphql/resolvers/event.ex:287 +msgid "Unknown error while creating event" +msgstr "" + +#, elixir-format +#: lib/graphql/resolvers/user.ex:460 +msgid "User cannot change email" +msgstr "" From 6e136ff8b58e4b6707b69ce94cbe5d0f057d5612 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Mon, 11 Oct 2021 18:28:28 +0200 Subject: [PATCH 5/9] Update tz_world before running tests Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 42ff2ce16..038cc4298 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -112,6 +112,7 @@ exunit-1.11: before_script: - mix deps.clean --all - mix deps.get + - mix tz_world.update - mix ecto.create - mix ecto.migrate script: @@ -127,6 +128,7 @@ exunit: MIX_ENV: test before_script: - mix deps.get + - mix tz_world.update - mix ecto.create - mix ecto.migrate script: From e606090f173e550430e69daa34e4760e8fe80ea3 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Mon, 11 Oct 2021 18:28:42 +0200 Subject: [PATCH 6/9] Fix legacy tests missing the python deps Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- docker/tests/Dockerfile-legacy | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docker/tests/Dockerfile-legacy b/docker/tests/Dockerfile-legacy index a90806409..870b38375 100644 --- a/docker/tests/Dockerfile-legacy +++ b/docker/tests/Dockerfile-legacy @@ -19,10 +19,15 @@ RUN set -xe \ CMD ["iex"] -ENV REFRESHED_AT=2021-06-07 -RUN apt-get update -yq && apt-get install -yq build-essential inotify-tools postgresql-client git curl gnupg xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 cmake exiftool +ENV REFRESHED_AT=2021-10-11 +RUN apt-get update -yq && apt-get install -yq build-essential inotify-tools postgresql-client git curl gnupg xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 cmake exiftool python3-pip python3-setuptools RUN curl -sL https://deb.nodesource.com/setup_12.x | bash && apt-get install nodejs -yq RUN npm install -g yarn wait-on RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* RUN mix local.hex --force && mix local.rebar --force +# Weasyprint 53 requires pango >= 1.44.0, which is not available in Stretch. +# TODO: Remove the version requirement when elixir:latest is based on Bullseye +# https://github.com/erlang/docker-erlang-otp/issues/362 +# https://github.com/Kozea/WeasyPrint/issues/1384 +RUN pip3 install -Iv weasyprint==52 pyexcel_ods3 RUN curl https://dbip.mirror.framasoft.org/files/dbip-city-lite-latest.mmdb --output GeoLite2-City.mmdb -s && mkdir -p /usr/share/GeoIP && mv GeoLite2-City.mmdb /usr/share/GeoIP/ From e280820e9c17adca80e198b714678ec8545e8ef6 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Mon, 11 Oct 2021 18:29:01 +0200 Subject: [PATCH 7/9] Fix front-end tests Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- js/src/components/Post/PostElementItem.vue | 1 + js/src/views/Posts/Post.vue | 1 + js/tests/unit/specs/boot/routes.spec.ts | 4 ++++ .../components/Comment/__snapshots__/CommentTree.spec.ts.snap | 4 ++-- .../unit/specs/components/__snapshots__/navbar.spec.ts.snap | 2 +- 5 files changed, 9 insertions(+), 3 deletions(-) diff --git a/js/src/components/Post/PostElementItem.vue b/js/src/components/Post/PostElementItem.vue index 602713d23..045ffbdab 100644 --- a/js/src/components/Post/PostElementItem.vue +++ b/js/src/components/Post/PostElementItem.vue @@ -47,6 +47,7 @@ <small class="has-text-grey-dark">{{ $options.filters.formatDateTimeString( new Date(post.insertedAt), + undefined, false ) }}</small> diff --git a/js/src/views/Posts/Post.vue b/js/src/views/Posts/Post.vue index 671475fc7..e315c76de 100644 --- a/js/src/views/Posts/Post.vue +++ b/js/src/views/Posts/Post.vue @@ -29,6 +29,7 @@ :title=" $options.filters.formatDateTimeString( post.updatedAt, + undefined, true, 'short' ) diff --git a/js/tests/unit/specs/boot/routes.spec.ts b/js/tests/unit/specs/boot/routes.spec.ts index 14d771ff2..483938a3e 100644 --- a/js/tests/unit/specs/boot/routes.spec.ts +++ b/js/tests/unit/specs/boot/routes.spec.ts @@ -4,11 +4,15 @@ import App from "@/App.vue"; import VueRouter from "vue-router"; import Buefy from "buefy"; import flushPromises from "flush-promises"; +import VueAnnouncer from "@vue-a11y/announcer"; +import VueSkipTo from "@vue-a11y/skip-to"; const localVue = createLocalVue(); config.mocks.$t = (key: string): string => key; localVue.use(VueRouter); localVue.use(Buefy); +localVue.use(VueAnnouncer); +localVue.use(VueSkipTo); describe("routing", () => { test("Homepage", async () => { diff --git a/js/tests/unit/specs/components/Comment/__snapshots__/CommentTree.spec.ts.snap b/js/tests/unit/specs/components/Comment/__snapshots__/CommentTree.spec.ts.snap index c2d67bc89..2ab6af2fe 100644 --- a/js/tests/unit/specs/components/Comment/__snapshots__/CommentTree.spec.ts.snap +++ b/js/tests/unit/specs/components/Comment/__snapshots__/CommentTree.spec.ts.snap @@ -12,7 +12,7 @@ exports[`CommentTree renders a comment tree with comments 1`] = ` <div class="field"> <div class="field"> <p class="control"> - <editor-stub mode="comment" value=""></editor-stub> + <editor-stub mode="comment" aria-label="Comment body" value=""></editor-stub> </p> <!----> </div> @@ -54,7 +54,7 @@ exports[`CommentTree renders an empty comment tree 1`] = ` <div class="field"> <div class="field"> <p class="control"> - <editor-stub mode="comment" value=""></editor-stub> + <editor-stub mode="comment" aria-label="Comment body" value=""></editor-stub> </p> <!----> </div> diff --git a/js/tests/unit/specs/components/__snapshots__/navbar.spec.ts.snap b/js/tests/unit/specs/components/__snapshots__/navbar.spec.ts.snap index 4a1495dbc..e863ec22e 100644 --- a/js/tests/unit/specs/components/__snapshots__/navbar.spec.ts.snap +++ b/js/tests/unit/specs/components/__snapshots__/navbar.spec.ts.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`App component renders a Vue component 1`] = `<b-navbar-stub type="is-secondary" wrapperclass="container" closeonclick="true" mobileburger="true"><template></template> <template></template> <template></template></b-navbar-stub>`; +exports[`App component renders a Vue component 1`] = `<b-navbar-stub type="is-secondary" wrapperclass="container" closeonclick="true" mobileburger="true" id="navbar"><template></template> <template></template> <template></template></b-navbar-stub>`; From 9621caf6616e878d3ab07b8dcf0e49cc36762392 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Mon, 11 Oct 2021 18:46:16 +0200 Subject: [PATCH 8/9] Bump required version to Elixir 1.12 and remove legacy tests Drops support for OTP < 22 Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- .gitlab-ci.yml | 18 ------------------ docker/tests/Dockerfile-legacy | 33 --------------------------------- mix.exs | 2 +- 3 files changed, 1 insertion(+), 52 deletions(-) delete mode 100644 docker/tests/Dockerfile-legacy diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 038cc4298..df71cd174 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -101,24 +101,6 @@ deps: needs: - install -exunit-1.11: - stage: test - image: tcitworld/mobilizon-ci:legacy - services: - - name: postgis/postgis:11-3.0 - alias: postgres - variables: - MIX_ENV: test - before_script: - - mix deps.clean --all - - mix deps.get - - mix tz_world.update - - mix ecto.create - - mix ecto.migrate - script: - - mix coveralls - allow_failure: true - exunit: stage: test services: diff --git a/docker/tests/Dockerfile-legacy b/docker/tests/Dockerfile-legacy deleted file mode 100644 index 870b38375..000000000 --- a/docker/tests/Dockerfile-legacy +++ /dev/null @@ -1,33 +0,0 @@ -# We build Elixir manually to have the oldest acceptable version of OTP -FROM erlang:21 -LABEL maintainer="Thomas Citharel <tcit@tcit.fr>" - -# elixir expects utf8. -ENV ELIXIR_VERSION="v1.11.4" \ - LANG=C.UTF-8 - -RUN set -xe \ - && ELIXIR_DOWNLOAD_URL="https://github.com/elixir-lang/elixir/archive/${ELIXIR_VERSION}.tar.gz" \ - && ELIXIR_DOWNLOAD_SHA256="85c7118a0db6007507313db5bddf370216d9394ed7911fe80f21e2fbf7f54d29" \ - && curl -fSL -o elixir-src.tar.gz $ELIXIR_DOWNLOAD_URL \ - && echo "$ELIXIR_DOWNLOAD_SHA256 elixir-src.tar.gz" | sha256sum -c - \ - && mkdir -p /usr/local/src/elixir \ - && tar -xzC /usr/local/src/elixir --strip-components=1 -f elixir-src.tar.gz \ - && rm elixir-src.tar.gz \ - && cd /usr/local/src/elixir \ - && make install clean - -CMD ["iex"] - -ENV REFRESHED_AT=2021-10-11 -RUN apt-get update -yq && apt-get install -yq build-essential inotify-tools postgresql-client git curl gnupg xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 cmake exiftool python3-pip python3-setuptools -RUN curl -sL https://deb.nodesource.com/setup_12.x | bash && apt-get install nodejs -yq -RUN npm install -g yarn wait-on -RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* -RUN mix local.hex --force && mix local.rebar --force -# Weasyprint 53 requires pango >= 1.44.0, which is not available in Stretch. -# TODO: Remove the version requirement when elixir:latest is based on Bullseye -# https://github.com/erlang/docker-erlang-otp/issues/362 -# https://github.com/Kozea/WeasyPrint/issues/1384 -RUN pip3 install -Iv weasyprint==52 pyexcel_ods3 -RUN curl https://dbip.mirror.framasoft.org/files/dbip-city-lite-latest.mmdb --output GeoLite2-City.mmdb -s && mkdir -p /usr/share/GeoIP && mv GeoLite2-City.mmdb /usr/share/GeoIP/ diff --git a/mix.exs b/mix.exs index c1cb4d56f..555f0b984 100644 --- a/mix.exs +++ b/mix.exs @@ -7,7 +7,7 @@ defmodule Mobilizon.Mixfile do [ app: :mobilizon, version: @version, - elixir: "~> 1.11", + elixir: "~> 1.12", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:gettext] ++ Mix.compilers(), xref: [exclude: [:eldap]], From b383d11f51b3d45aef256465117ccece4609fef5 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Tue, 12 Oct 2021 08:49:12 +0200 Subject: [PATCH 9/9] Fix backend tests Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- lib/graphql/resolvers/event.ex | 2 +- lib/service/timezone_detector.ex | 4 +++- test/service/geospatial/addok_test.exs | 2 ++ test/service/geospatial/google_maps_test.exs | 2 ++ test/service/geospatial/map_quest_test.exs | 2 ++ test/service/geospatial/nominatim_test.exs | 2 ++ test/service/geospatial/photon_test.exs | 1 + 7 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/graphql/resolvers/event.ex b/lib/graphql/resolvers/event.ex index 86f56b564..1138b0bd8 100644 --- a/lib/graphql/resolvers/event.ex +++ b/lib/graphql/resolvers/event.ex @@ -496,7 +496,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do physical_address when is_map(physical_address) -> TimezoneDetector.detect( timezone, - physical_address.geom, + Map.get(physical_address, :geom), fallback_tz ) diff --git a/lib/service/timezone_detector.ex b/lib/service/timezone_detector.ex index fe0ad35e4..91d002b9f 100644 --- a/lib/service/timezone_detector.ex +++ b/lib/service/timezone_detector.ex @@ -8,7 +8,9 @@ defmodule Mobilizon.Service.TimezoneDetector do @doc """ Detect the most appropriate timezone from a value, a geographic set of coordinates and a fallback """ - @spec detect(String.t() | nil, detectable(), String.t()) :: String.t() + @spec detect(String.t() | nil, detectable() | nil, String.t()) :: String.t() + def detect(tz, nil, fallback), do: detect(tz, fallback) + def detect(nil, geo, fallback) do case TzWorld.timezone_at(geo) do {:ok, timezone} -> diff --git a/test/service/geospatial/addok_test.exs b/test/service/geospatial/addok_test.exs index bf698c9d8..d9f0778bd 100644 --- a/test/service/geospatial/addok_test.exs +++ b/test/service/geospatial/addok_test.exs @@ -28,6 +28,7 @@ defmodule Mobilizon.Service.Geospatial.AddokTest do region: "69, Rhône, Auvergne-Rhône-Alpes", locality: "Lyon", description: "10 Rue Jangot", + timezone: "Europe/Paris", postal_code: "69007", street: "10 Rue Jangot", geom: %Geo.Point{coordinates: {4.842569, 45.751718}, properties: %{}, srid: 4326} @@ -54,6 +55,7 @@ defmodule Mobilizon.Service.Geospatial.AddokTest do region: "69, Rhône, Auvergne-Rhône-Alpes", locality: "Lyon", description: "10 Rue Jangot", + timezone: "Europe/Paris", postal_code: "69007", street: "10 Rue Jangot", geom: %Geo.Point{coordinates: {4.842569, 45.751718}, properties: %{}, srid: 4326} diff --git a/test/service/geospatial/google_maps_test.exs b/test/service/geospatial/google_maps_test.exs index ab8833c6e..7f268c72c 100644 --- a/test/service/geospatial/google_maps_test.exs +++ b/test/service/geospatial/google_maps_test.exs @@ -69,6 +69,7 @@ defmodule Mobilizon.Service.Geospatial.GoogleMapsTest do country: "France", postal_code: "69007", street: "10 Rue Jangot", + timezone: "Europe/Paris", geom: %Geo.Point{ coordinates: {4.8424032, 45.75164940000001}, properties: %{}, @@ -116,6 +117,7 @@ defmodule Mobilizon.Service.Geospatial.GoogleMapsTest do country: "France", postal_code: "69007", street: "10bis Rue Jangot", + timezone: "Europe/Paris", geom: %Geo.Point{ coordinates: {4.8424966, 45.751725}, properties: %{}, diff --git a/test/service/geospatial/map_quest_test.exs b/test/service/geospatial/map_quest_test.exs index 4a1edf224..21464c494 100644 --- a/test/service/geospatial/map_quest_test.exs +++ b/test/service/geospatial/map_quest_test.exs @@ -55,6 +55,7 @@ defmodule Mobilizon.Service.Geospatial.MapQuestTest do country: "FR", postal_code: "69007", street: "10 Rue Jangot", + timezone: "Europe/Paris", geom: %Geo.Point{ coordinates: {4.842566, 45.751714}, properties: %{}, @@ -88,6 +89,7 @@ defmodule Mobilizon.Service.Geospatial.MapQuestTest do country: "FR", postal_code: "69007", street: "10 Rue Jangot", + timezone: "Europe/Paris", geom: %Geo.Point{ coordinates: {4.842569, 45.751718}, properties: %{}, diff --git a/test/service/geospatial/nominatim_test.exs b/test/service/geospatial/nominatim_test.exs index 40d2bd959..4177c0fee 100644 --- a/test/service/geospatial/nominatim_test.exs +++ b/test/service/geospatial/nominatim_test.exs @@ -31,6 +31,7 @@ defmodule Mobilizon.Service.Geospatial.NominatimTest do country: "France", postal_code: "69007", street: "10 Rue Jangot", + timezone: "Europe/Paris", geom: %Geo.Point{ coordinates: {4.8425657, 45.7517141}, properties: %{}, @@ -66,6 +67,7 @@ defmodule Mobilizon.Service.Geospatial.NominatimTest do country: "France", postal_code: "69007", street: "10 Rue Jangot", + timezone: "Europe/Paris", geom: %Geo.Point{ coordinates: {4.8425657, 45.7517141}, properties: %{}, diff --git a/test/service/geospatial/photon_test.exs b/test/service/geospatial/photon_test.exs index 7d3ba8221..48cfebc4c 100644 --- a/test/service/geospatial/photon_test.exs +++ b/test/service/geospatial/photon_test.exs @@ -30,6 +30,7 @@ defmodule Mobilizon.Service.Geospatial.PhotonTest do country: "France", postal_code: "69007", street: "10 Rue Jangot", + timezone: "Europe/Paris", geom: %Geo.Point{ coordinates: {4.8425657, 45.7517141}, properties: %{},