Merge branch 'improve-build-times' into 'master'

Improve build times

See merge request framasoft/mobilizon!608
This commit is contained in:
Thomas Citharel 2020-10-14 11:55:53 +02:00
commit b32e8f701e
94 changed files with 971 additions and 1114 deletions

View File

@ -30,7 +30,6 @@
"graphql": "^15.0.0",
"graphql-tag": "^2.10.3",
"intersection-observer": "^0.11.0",
"javascript-time-ago": "^2.0.4",
"leaflet": "^1.4.0",
"leaflet.locatecontrol": "^0.72.0",
"lodash": "^4.17.11",
@ -54,7 +53,6 @@
},
"devDependencies": {
"@types/chai": "^4.2.11",
"@types/javascript-time-ago": "^2.0.1",
"@types/leaflet": "^1.5.2",
"@types/leaflet.locatecontrol": "^0.60.7",
"@types/lodash": "^4.14.141",

View File

@ -1,5 +1,9 @@
@import "variables.scss";
@import "~bulma";
@import "~bulma-divider";
@import "~buefy/src/scss/buefy";
// a {
// color: $violet-2;
// }

View File

@ -46,8 +46,6 @@ export default class ActorCard extends Vue {
</style>
<style lang="scss">
@import "../../variables.scss";
.tooltip {
display: block !important;
z-index: 10000;

View File

@ -88,7 +88,6 @@ export default class ParticipantCard extends Vue {
</script>
<style lang="scss">
@import "../../variables.scss";
.card-footer-item {
height: $control-height;
}

View File

@ -51,7 +51,7 @@
<b-table-column field="targetActor.updatedAt" :label="$t('Date')" sortable v-slot="props">
<span :title="$options.filters.formatDateTimeString(props.row.updatedAt)">{{
timeago(props.row.updatedAt)
formatDistanceToNow(new Date(props.row.updatedAt), { locale: $dateFnsLocale })
}}</span></b-table-column
>
@ -102,6 +102,7 @@
<script lang="ts">
import { Component, Mixins } from "vue-property-decorator";
import { SnackbarProgrammatic as Snackbar } from "buefy";
import { formatDistanceToNow } from "date-fns";
import { ACCEPT_RELAY, REJECT_RELAY, RELAY_FOLLOWERS } from "../../graphql/admin";
import { Paginate } from "../../types/paginate";
import { IFollower } from "../../types/actor/follower.model";
@ -126,6 +127,8 @@ export default class Followers extends Mixins(RelayMixin) {
RelayMixin = RelayMixin;
formatDistanceToNow = formatDistanceToNow;
async acceptRelays(): Promise<void> {
await this.checkedRows.forEach((row: IFollower) => {
this.acceptRelay(`${row.actor.preferredUsername}@${row.actor.domain}`);

View File

@ -64,7 +64,7 @@
<b-table-column field="targetActor.updatedAt" :label="$t('Date')" sortable v-slot="props">
<span :title="$options.filters.formatDateTimeString(props.row.updatedAt)">{{
timeago(props.row.updatedAt)
formatDistanceToNow(new Date(props.row.updatedAt), { locale: $dateFnsLocale })
}}</span></b-table-column
>
@ -100,6 +100,7 @@
<script lang="ts">
import { Component, Mixins } from "vue-property-decorator";
import { SnackbarProgrammatic as Snackbar } from "buefy";
import { formatDistanceToNow } from "date-fns";
import { ADD_RELAY, RELAY_FOLLOWINGS, REMOVE_RELAY } from "../../graphql/admin";
import { IFollower } from "../../types/actor/follower.model";
import { Paginate } from "../../types/paginate";
@ -126,6 +127,8 @@ export default class Followings extends Mixins(RelayMixin) {
RelayMixin = RelayMixin;
formatDistanceToNow = formatDistanceToNow;
async followRelay(e: Event): Promise<void> {
e.preventDefault();
try {

View File

@ -24,7 +24,12 @@
<strong :class="{ organizer: commentFromOrganizer }">{{ comment.actor.name }}</strong>
<small>@{{ usernameWithDomain(comment.actor) }}</small>
<a class="comment-link has-text-grey" :href="commentURL">
<small>{{ timeago(new Date(comment.updatedAt)) }}</small>
<small>{{
formatDistanceToNow(new Date(comment.updatedAt), {
locale: $dateFnsLocale,
addSuffix: true,
})
}}</small>
</a>
</span>
<a v-else class="comment-link has-text-grey" :href="commentURL">
@ -130,8 +135,8 @@
<script lang="ts">
import { Component, Prop, Vue, Ref } from "vue-property-decorator";
import EditorComponent from "@/components/Editor.vue";
import TimeAgo from "javascript-time-ago";
import { SnackbarProgrammatic as Snackbar } from "buefy";
import { formatDistanceToNow } from "date-fns";
import { CommentModel, IComment } from "../../types/comment.model";
import { CURRENT_ACTOR_CLIENT } from "../../graphql/actor";
import { IPerson, usernameWithDomain } from "../../types/actor";
@ -171,18 +176,13 @@ export default class Comment extends Vue {
showReplies = false;
timeAgoInstance: TimeAgo | null = null;
CommentModeration = CommentModeration;
usernameWithDomain = usernameWithDomain;
async mounted(): Promise<void> {
const localeName = this.$i18n.locale;
const locale = await import(`javascript-time-ago/locale/${localeName}`);
TimeAgo.addLocale(locale);
this.timeAgoInstance = new TimeAgo(localeName);
formatDistanceToNow = formatDistanceToNow;
async mounted(): Promise<void> {
const { hash } = this.$route;
if (hash.includes(`#comment-${this.comment.uuid}`)) {
this.fetchReplies();
@ -243,13 +243,6 @@ export default class Comment extends Vue {
this.showReplies = true;
}
timeago(dateTime: Date): string {
if (this.timeAgoInstance != null) {
return this.timeAgoInstance.format(dateTime);
}
return "";
}
get commentSelected(): boolean {
return this.commentId === this.$route.hash;
}
@ -316,8 +309,6 @@ export default class Comment extends Vue {
}
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
form.reply {
padding-bottom: 1rem;
}

View File

@ -43,7 +43,10 @@
</span>
<div class="post-infos">
<span :title="comment.insertedAt | formatDateTimeString">
{{ $timeAgo.format(new Date(comment.updatedAt), "twitter") || $t("Right now") }}</span
{{
formatDistanceToNow(new Date(comment.updatedAt), { locale: $dateFnsLocale }) ||
$t("Right now")
}}</span
>
</div>
</div>
@ -53,7 +56,13 @@
v-if="comment.insertedAt.getTime() !== comment.updatedAt.getTime()"
:title="comment.updatedAt | formatDateTimeString"
>
{{ $t("Edited {ago}", { ago: $timeAgo.format(new Date(comment.updatedAt)) }) }}
{{
$t("Edited {ago}", {
ago: formatDistanceToNow(new Date(comment.updatedAt), {
locale: $dateFnsLocale,
}),
})
}}
</p>
</div>
<div class="comment-deleted" v-else-if="!editMode">
@ -76,7 +85,8 @@
</template>
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
import { IComment, CommentModel } from "../../types/comment.model";
import { formatDistanceToNow } from "date-fns";
import { IComment } from "../../types/comment.model";
import { usernameWithDomain, IPerson } from "../../types/actor";
import { CURRENT_ACTOR_CLIENT } from "../../graphql/actor";
@ -99,14 +109,16 @@ export default class DiscussionComment extends Vue {
usernameWithDomain = usernameWithDomain;
formatDistanceToNow = formatDistanceToNow;
// isReportModalActive: boolean = false;
toggleEditMode() {
toggleEditMode(): void {
this.updatedComment = this.comment.text;
this.editMode = !this.editMode;
}
updateComment() {
updateComment(): void {
this.comment.text = this.updatedComment;
this.$emit("update-comment", this.comment);
this.toggleEditMode();
@ -114,8 +126,6 @@ export default class DiscussionComment extends Vue {
}
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
article.comment {
display: flex;
border-top: 1px solid #e9e9e9;

View File

@ -16,7 +16,10 @@
<div class="title-and-date">
<p class="discussion-minimalist-title">{{ discussion.title }}</p>
<span :title="actualDate | formatDateTimeString">
{{ $timeAgo.format(new Date(actualDate), "twitter") || $t("Right now") }}</span
{{
formatDistanceToNowStrict(new Date(actualDate), { locale: $dateFnsLocale }) ||
$t("Right now")
}}</span
>
</div>
<div class="has-text-grey" v-if="!discussion.lastComment.deletedAt">
@ -28,6 +31,7 @@
</template>
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
import { formatDistanceToNowStrict } from "date-fns";
import { IDiscussion } from "../../types/discussions";
import RouteName from "../../router/name";
@ -37,7 +41,9 @@ export default class DiscussionListItem extends Vue {
RouteName = RouteName;
get htmlTextEllipsis() {
formatDistanceToNowStrict = formatDistanceToNowStrict;
get htmlTextEllipsis(): string {
const element = document.createElement("div");
if (this.discussion.lastComment && this.discussion.lastComment.text) {
element.innerHTML = this.discussion.lastComment.text
@ -47,7 +53,7 @@ export default class DiscussionListItem extends Vue {
return element.innerText;
}
get actualDate() {
get actualDate(): string | Date | undefined {
if (this.discussion.updatedAt === this.discussion.insertedAt && this.discussion.lastComment) {
return this.discussion.lastComment.publishedAt;
}

View File

@ -552,8 +552,6 @@ export default class EditorComponent extends Vue {
}
</script>
<style lang="scss">
@import "@/variables.scss";
$color-black: #000;
$color-white: #eee;

View File

@ -27,23 +27,21 @@ export default class DateCalendarIcon extends Vue {
*/
@Prop({ required: true }) date!: string;
get dateObj() {
get dateObj(): Date {
return new Date(this.$props.date);
}
get month() {
get month(): string {
return this.dateObj.toLocaleString(undefined, { month: "short" });
}
get day() {
get day(): string {
return this.dateObj.toLocaleString(undefined, { day: "numeric" });
}
}
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
time.datetime-container {
background: $backgrounds;
border: 1px solid $borders;

View File

@ -115,8 +115,6 @@ export default class EventCard extends Vue {
</script>
<style lang="scss" scoped>
@import "../../variables";
a.card {
display: block;
background: $secondary;

View File

@ -275,8 +275,6 @@ export default class EventListCard extends mixins(ActorMixin, EventMixin) {
</script>
<style lang="scss" scoped>
@import "../../variables";
article.box {
div.tag-container {
position: absolute;

View File

@ -104,8 +104,6 @@ export default class EventListViewCard extends mixins(ActorMixin, EventMixin) {
</script>
<style lang="scss" scoped>
@import "../../variables";
article.box {
div.content {
padding: 5px;

View File

@ -20,8 +20,6 @@ export default class EventMetadataBlock extends Vue {
}
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
h2 {
font-size: 1.8rem;
font-weight: 500;

View File

@ -44,8 +44,6 @@ export default class Footer extends Vue {
}
</script>
<style lang="scss" scoped>
@import "../variables.scss";
footer.footer {
color: $secondary;
display: flex;

View File

@ -32,8 +32,6 @@ export default class GroupSection extends Vue {
}
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
section {
display: flex;
flex-direction: column;

View File

@ -54,7 +54,7 @@
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
import { IGroup, IMember, usernameWithDomain } from "@/types/actor";
import { IMember, usernameWithDomain } from "@/types/actor";
import RouteName from "../../router/name";
@Component
@ -68,8 +68,6 @@ export default class InvitationCard extends Vue {
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
.media:not(.subfield) {
background: lighten($primary, 40%);
padding: 10px;

View File

@ -4,7 +4,7 @@
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
import MobilizonLogo from "../assets/mobilizon_logo.svg?inline";
@ -18,8 +18,6 @@ export default class Logo extends Vue {
}
</script>
<style lang="scss" scoped>
@import "../variables.scss";
svg {
fill: $background-color;

View File

@ -216,8 +216,6 @@ export default class NavBar extends Vue {
}
</script>
<style lang="scss" scoped>
@import "../variables.scss";
nav {
.navbar-item {
a.button {

View File

@ -5,11 +5,17 @@
>
<div class="title-info-wrapper">
<p class="post-minimalist-title">{{ post.title }}</p>
<small class="has-text-grey">{{ $timeAgo.format(new Date(post.insertedAt)) }}</small>
<small class="has-text-grey">{{
formatDistanceToNow(new Date(post.publishAt || post.insertedAt), {
locale: $dateFnsLocale,
addSuffix: true,
})
}}</small>
</div>
</router-link>
</template>
<script lang="ts">
import { formatDistanceToNow } from "date-fns";
import { Component, Prop, Vue } from "vue-property-decorator";
import RouteName from "../../router/name";
import { IPost } from "../../types/post.model";
@ -19,6 +25,8 @@ export default class PostListItem extends Vue {
@Prop({ required: true, type: Object }) post!: IPost;
RouteName = RouteName;
formatDistanceToNow = formatDistanceToNow;
}
</script>
<style lang="scss" scoped>

View File

@ -114,8 +114,6 @@ export default class FolderItem extends Mixins(ResourceMixin) {
}
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
.resource-wrapper {
display: flex;
flex: 1;

View File

@ -57,8 +57,6 @@ export default class ResourceItem extends Vue {
}
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
.resource-wrapper {
display: flex;
flex: 1;

View File

@ -111,8 +111,6 @@ export default class ResourceSelector extends Vue {
}
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
.panel {
a.panel-block {
cursor: default;

View File

@ -30,8 +30,6 @@ export default class SettingMenuItem extends Vue {
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
li.setting-menu-item {
font-size: 1.05rem;
background-color: #fff1de;

View File

@ -37,8 +37,6 @@ export default class SettingMenuSection extends Vue {
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
li {
font-size: 1.3rem;
background-color: $secondary;

View File

@ -13,8 +13,6 @@ export default class Tag extends Vue {}
</script>
<style lang="scss" scoped>
@import "../variables.scss";
span.tag {
background: $purple-3;
color: $violet-2;

View File

@ -1,7 +1,7 @@
<template>
<div class="card" v-if="todo">
<div class="card-content">
<b-field :label="$t('Statut')">
<b-field :label="$t('Status')">
<b-checkbox size="is-large" v-model="status" />
</b-field>
<b-field :label="$t('Title')">

View File

@ -12,8 +12,6 @@ import { Component, Vue } from "vue-property-decorator";
export default class Subtitle extends Vue {}
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
h2 {
display: block;
margin: 15px 0 30px;

View File

@ -8,14 +8,12 @@ import { Component, Prop, Vue } from "vue-property-decorator";
export default class VerticalDivider extends Vue {
@Prop({ default: "Or" }) content!: string;
get dataContent() {
get dataContent(): string {
return this.content.toLocaleUpperCase();
}
}
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
.is-divider-vertical[data-content]::after {
background-color: $body-background-color;
}

View File

@ -2,7 +2,7 @@ import nl2br from "@/filters/utils";
import { formatDateString, formatTimeString, formatDateTimeString } from "./datetime";
export default {
install(vue: any) {
install(vue: any): void {
vue.filter("formatDateString", formatDateString);
vue.filter("formatTimeString", formatTimeString);
vue.filter("formatDateTimeString", formatDateTimeString);

View File

@ -204,7 +204,7 @@
"Duplicate": "Dupliquer",
"Edit": "Modifier",
"Edit post": "Éditer le billet",
"Edited {ago}": "Édité {ago}",
"Edited {ago}": "Édité il y a {ago}",
"Eg: Stockholm, Dance, Chess…": "Par exemple : Lyon, Danse, Bridge…",
"Either on the {instance} instance or on another instance.": "Sur l'instance {instance} ou bien sur une autre instance.",
"Either the account is already validated, either the validation token is incorrect.": "Soit le compte est déjà validé, soit le jeton de validation est incorrect.",

View File

@ -1,43 +0,0 @@
/* eslint-disable @typescript-eslint/camelcase */
import ar from "./ar.json";
import be from "./be.json";
import ca from "./ca.json";
import cs from "./cs.json";
import de from "./de.json";
import en_US from "./en_US.json";
import es from "./es.json";
import fi from "./fi.json";
import fr_FR from "./fr_FR.json";
import it from "./it.json";
import ja from "./ja.json";
import nl from "./nl.json";
import oc from "./oc.json";
import pl from "./pl.json";
import pt from "./pt.json";
import pt_BR from "./pt_BR.json";
import ru from "./ru.json";
import sv from "./sv.json";
export default {
ar,
be,
ca,
cs,
de,
en: en_US,
en_US,
es,
fi,
fr: fr_FR,
fr_FR,
it,
ja,
nl,
oc,
pl,
pt,
pt_BR,
ru,
sv,
};

View File

@ -1,19 +1,14 @@
{
"ar": "العربية",
"bg": "Български",
"be": "Беларуская мова",
"br": "Brezhoneg",
"ca": "Català",
"co": "Corsu",
"cs": "čeština",
"de": "Deutsch",
"en": "English",
"eo": "Esperanto",
"es": "Español",
"fi": "suomi",
"fr": "Français",
"gl": "Galego",
"hu": "Magyar",
"it": "Italiano",
"ja": "日本語",
"nl": "Dutch",
@ -22,9 +17,5 @@
"pt": "Português",
"pt_PT": "Português (Portugal)",
"ru": "Русский",
"sq": "Shqip",
"sv": "Svenska",
"tr": "Türkçe",
"vi": "Tiếng Việt",
"zh_Hant_TW": "繁體中文(台灣)"
"sv": "Svenska"
}

View File

@ -6,33 +6,17 @@ import Component from "vue-class-component";
import VueScrollTo from "vue-scrollto";
import VueMeta from "vue-meta";
import VTooltip from "v-tooltip";
import TimeAgo from "javascript-time-ago";
import App from "./App.vue";
import router from "./router";
import { NotifierPlugin } from "./plugins/notifier";
import { DateFnsPlugin } from "./plugins/dateFns";
import filters from "./filters";
import { i18n } from "./utils/i18n";
import messages from "./i18n";
import apolloProvider from "./vue-apollo";
Vue.config.productionTip = false;
let language = document.documentElement.getAttribute("lang") as string;
language =
language ||
((window.navigator as any).userLanguage || window.navigator.language).replace(/-/, "_");
export const locale =
language && messages.hasOwnProperty(language) ? language : language.split("-")[0];
import(`javascript-time-ago/locale/${locale}`).then((localeFile) => {
TimeAgo.addLocale(localeFile);
Vue.prototype.$timeAgo = new TimeAgo(locale);
});
Vue.use(Buefy);
Vue.use(NotifierPlugin);
Vue.use(DateFnsPlugin, { locale });
Vue.use(filters);
Vue.use(VueMeta);
Vue.use(VueScrollTo);

View File

@ -1,7 +1,6 @@
import { Component, Vue, Ref } from "vue-property-decorator";
import { ActorType, IActor } from "@/types/actor";
import { IFollower } from "@/types/actor/follower.model";
import TimeAgo from "javascript-time-ago";
@Component
export default class RelayMixin extends Vue {
@ -13,20 +12,11 @@ export default class RelayMixin extends Vue {
perPage = 10;
timeAgoInstance: TimeAgo | null = null;
async mounted() {
const localeName = this.$i18n.locale;
const locale = await import(`javascript-time-ago/locale/${localeName}`);
TimeAgo.addLocale(locale);
this.timeAgoInstance = new TimeAgo(localeName);
}
toggle(row: object) {
toggle(row: Record<string, unknown>): void {
this.table.toggleDetails(row);
}
async onPageChange(page: number) {
async onPageChange(page: number): Promise<void> {
this.page = page;
await this.$apollo.queries.relayFollowings.fetchMore({
variables: {
@ -53,11 +43,4 @@ export default class RelayMixin extends Vue {
(actor.preferredUsername === "relay" || actor.preferredUsername === actor.domain)
);
}
timeago(dateTime: string): string {
if (this.timeAgoInstance != null) {
return this.timeAgoInstance.format(new Date(dateTime));
}
return "";
}
}

View File

@ -1,5 +1,5 @@
import Vue from "vue";
import Locale from "date-fns";
import VueInstance from "vue";
declare module "vue/types/vue" {
interface Vue {
@ -7,8 +7,8 @@ declare module "vue/types/vue" {
}
}
export function DateFnsPlugin(vue: typeof Vue, { locale }: { locale: string }): void {
export function DateFnsPlugin(vue: typeof VueInstance, { locale }: { locale: string }): void {
import(`date-fns/locale/${locale}/index.js`).then((localeEntity) => {
Vue.prototype.$dateFnsLocale = localeEntity;
VueInstance.prototype.$dateFnsLocale = localeEntity;
});
}

View File

@ -1,4 +1,5 @@
import Vue from "vue";
/* eslint-disable no-shadow */
import VueInstance from "vue";
import { ColorModifiers } from "buefy/types/helpers.d";
import { Route, RawLocation } from "vue-router";
@ -12,39 +13,39 @@ declare module "vue/types/vue" {
beforeRouteEnter?(
to: Route,
from: Route,
next: (to?: RawLocation | false | ((vm: Vue) => void)) => void
next: (to?: RawLocation | false | ((vm: VueInstance) => void)) => void
): void;
beforeRouteLeave?(
to: Route,
from: Route,
next: (to?: RawLocation | false | ((vm: Vue) => void)) => void
next: (to?: RawLocation | false | ((vm: VueInstance) => void)) => void
): void;
beforeRouteUpdate?(
to: Route,
from: Route,
next: (to?: RawLocation | false | ((vm: Vue) => void)) => void
next: (to?: RawLocation | false | ((vm: VueInstance) => void)) => void
): void;
}
}
export class Notifier {
private readonly vue: typeof Vue;
private readonly vue: typeof VueInstance;
constructor(vue: typeof Vue) {
constructor(vue: typeof VueInstance) {
this.vue = vue;
}
success(message: string) {
success(message: string): void {
this.notification(message, "is-success");
}
error(message: string) {
error(message: string): void {
this.notification(message, "is-danger");
}
info(message: string) {
info(message: string): void {
this.notification(message, "is-info");
}
@ -60,6 +61,6 @@ export class Notifier {
}
/* eslint-disable */
export function NotifierPlugin(vue: typeof Vue): void {
export function NotifierPlugin(vue: typeof VueInstance): void {
vue.prototype.$notifier = new Notifier(vue);
}

View File

@ -1,18 +1,70 @@
import Vue from "vue";
import VueI18n from "vue-i18n";
import messages from "../i18n/index";
import { DateFnsPlugin } from "@/plugins/dateFns";
import en from "../i18n/en_US.json";
import langs from "../i18n/langs.json";
const DEFAULT_LOCALE = "en";
let language = document.documentElement.getAttribute("lang") as string;
language = language || ((window.navigator as any).userLanguage || window.navigator.language).replace(/-/, "_");
export const locale = language && messages.hasOwnProperty(language) ? language : language.split("-")[0];
export const locale =
language && Object.prototype.hasOwnProperty.call(langs, language) ? language : language.split("-")[0];
Vue.use(VueI18n);
console.log(en);
console.log(locale);
export const i18n = new VueI18n({
locale, // set locale
messages, // set locale messages
fallbackLocale: "en_US",
locale: DEFAULT_LOCALE, // set locale
messages: (en as unknown) as VueI18n.LocaleMessages, // set locale messages
fallbackLocale: "en",
});
console.log(i18n);
Vue.use(DateFnsPlugin, { locale });
const loadedLanguages = ["en"];
function setI18nLanguage(lang: string): string {
i18n.locale = lang;
return lang;
}
function fileForLanguage(lang: string) {
const matches: Record<string, string> = {
fr: "fr_FR",
en: "en_US",
};
if (Object.prototype.hasOwnProperty.call(matches, lang)) {
return matches[lang];
}
return lang;
}
export async function loadLanguageAsync(lang: string): Promise<string> {
// If the same language
if (i18n.locale === lang) {
return Promise.resolve(setI18nLanguage(lang));
}
// If the language was already loaded
if (loadedLanguages.includes(lang)) {
return Promise.resolve(setI18nLanguage(lang));
}
console.log(fileForLanguage(lang));
// If the language hasn't been loaded yet
return import(/* webpackChunkName: "lang-[request]" */ `@/i18n/${fileForLanguage(lang)}.json`).then(
(newMessages: any) => {
i18n.setLocaleMessage(lang, newMessages.default);
loadedLanguages.push(lang);
return setI18nLanguage(lang);
}
);
}
loadLanguageAsync(locale);
export function formatList(list: string[]): string {
if (window.Intl && Intl.ListFormat) {

View File

@ -135,7 +135,3 @@ $subtitle-sup-size: 15px;
$breadcrumb-item-color: $primary;
$checkbox-background-color: #fff;
$title-color: $violet-3;
@import "~bulma";
@import "~bulma-divider";
@import "~buefy/src/scss/buefy";

View File

@ -119,8 +119,6 @@ export default class About extends Vue {
</script>
<style lang="scss" scoped>
@import "../variables.scss";
.hero.is-primary {
background: $background-color;

View File

@ -122,8 +122,6 @@ export default class AboutInstance extends Vue {
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
section {
&:not(:first-child) {
margin: 2rem auto;

View File

@ -166,8 +166,6 @@ export default class AboutMobilizon extends Vue {}
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
.hero.is-primary {
background: $background-color;
.subtitle {

View File

@ -51,8 +51,6 @@ export default class Privacy extends Vue {
}
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
main > .container {
background: $white;

View File

@ -27,8 +27,6 @@ export default class Rules extends Vue {
}
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
main > .container {
background: $white;
}

View File

@ -144,8 +144,3 @@ export default class Profile extends Vue {
}
}
</script>
<style lang="scss">
@import "../../variables";
@import "~bulma/sass/utilities/_all";
@import "~bulma/sass/components/dropdown.sass";
</style>

View File

@ -168,7 +168,6 @@ export default class Register extends mixins(identityEditionMixin) {
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
.avatar-enter-active {
transition: opacity 1s ease;
}

View File

@ -359,8 +359,6 @@ export default class Settings extends Vue {
}
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
.notification a {
color: $primary !important;
text-decoration: underline !important;

View File

@ -145,14 +145,13 @@ export default class Users extends Vue {
});
}
onFiltersChange({ email }: { email: string }) {
onFiltersChange({ email }: { email: string }): void {
this.email = email;
}
}
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
a.profile,
a.user-profile {
text-decoration: none;

View File

@ -296,8 +296,6 @@
</template>
<style lang="scss" scoped>
@import "@/variables.scss";
main section > .container {
background: $white;
}

View File

@ -1044,8 +1044,6 @@ export default class Event extends EventMixin {
}
</script>
<style lang="scss" scoped>
@import "../../variables";
.section {
padding: 1rem 2rem 4rem;
}

View File

@ -278,8 +278,6 @@ export default class MyEvents extends Vue {
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
@import "../../variables";
main > .container {
background: $white;
}

View File

@ -365,7 +365,7 @@ export default class Participants extends Vue {
nl2br = nl2br;
toggleQueueDetails(row: IParticipant) {
toggleQueueDetails(row: IParticipant): void {
if (row.metadata.message && row.metadata.message.length < MESSAGE_ELLIPSIS_LENGTH) return;
this.queueTable.toggleDetails(row);
}
@ -374,8 +374,6 @@ export default class Participants extends Vue {
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
@import "../../variables.scss";
section {
padding: 1rem 0;
}

View File

@ -546,8 +546,6 @@ export default class Group extends mixins(GroupMixin) {
}
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
div.container {
background: white;
margin-bottom: 3rem;

View File

@ -120,8 +120,6 @@ export default class MyEvents extends Vue {
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="scss" scoped>
@import "../../variables";
main > .container {
background: $white;
}

View File

@ -338,8 +338,6 @@ export default class Home extends Vue {
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
main > div > .container {
background: $white;
}

View File

@ -58,8 +58,6 @@ export default class Interact extends Vue {
}
</script>
<style lang="scss">
@import "@/variables.scss";
main > .container {
background: $white;
}

View File

@ -443,8 +443,6 @@ export default class Report extends Vue {
}
</script>
<style lang="scss" scoped>
@import "@/variables.scss";
tbody td img.image,
.note img.image {
display: inline;

View File

@ -129,8 +129,6 @@ export default class Post extends Vue {
}
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
article {
section.heading-section {
text-align: center;

View File

@ -366,8 +366,6 @@ export default class Search extends Vue {
</script>
<style scoped lang="scss">
@import "@/variables.scss";
main > .container {
background: $white;

View File

@ -323,8 +323,6 @@ export default class AccountSettings extends Vue {
}
</script>
<style lang="scss">
@import "@/variables.scss";
.setting-title {
margin-top: 2rem;
margin-bottom: 1rem;

View File

@ -155,8 +155,6 @@ export default class Notifications extends Vue {
</script>
<style lang="scss" scoped>
@import "../../variables.scss";
.field {
&:not(:last-child) {
margin-bottom: 1.5rem;

View File

@ -17,7 +17,7 @@
v-model="$i18n.locale"
:placeholder="$t('Select a language')"
>
<option v-for="(language, lang) in languages" :value="lang" :key="lang">
<option v-for="(language, lang) in langs" :value="lang" :key="lang">
{{ language }}
</option>
</b-select>
@ -73,8 +73,10 @@ export default class Preferences extends Vue {
RouteName = RouteName;
langs: Record<string, string> = langs;
@Watch("loggedUser")
setSavedTimezone(loggedUser: IUser) {
setSavedTimezone(loggedUser: IUser): void {
if (loggedUser && loggedUser.settings.timezone) {
this.selectedTimezone = loggedUser.settings.timezone;
} else {
@ -87,22 +89,24 @@ export default class Preferences extends Vue {
}
}
// eslint-disable-next-line class-methods-use-this
sanitize(timezone: string): string {
return timezone.split("_").join(" ").replace("St ", "St. ").split("/").join(" - ");
}
get timezones() {
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 = (
acc: { [key: string]: Array<string> },
prefix: string,
suffix: string
acc2: { [key: string]: Array<string> },
prefix2: string,
suffix2: string
) => {
(acc[prefix] = acc[prefix] || []).push(suffix);
return acc;
// eslint-disable-next-line no-param-reassign
(acc2[prefix2] = acc2[prefix2] || []).push(suffix2);
return acc2;
};
if (suffix) {
return pushOrCreate(acc, prefix, suffix);
@ -111,22 +115,8 @@ export default class Preferences extends Vue {
}, {});
}
get languages(): object {
return this.$i18n.availableLocales.reduce((acc: object, lang: string) => {
// @ts-ignore
if (langs[lang]) {
return {
...acc,
// @ts-ignore
[lang]: langs[lang],
};
}
return acc;
}, {} as object);
}
@Watch("selectedTimezone")
async updateTimezone() {
async updateTimezone(): Promise<void> {
if (this.selectedTimezone !== this.loggedUser.settings.timezone) {
await this.$apollo.mutate<{ setUserSetting: string }>({
mutation: SET_USER_SETTINGS,
@ -138,7 +128,7 @@ export default class Preferences extends Vue {
}
@Watch("$i18n.locale")
async updateLocale() {
async updateLocale(): Promise<void> {
await this.$apollo.mutate({
mutation: UPDATE_USER_LOCALE,
variables: {

View File

@ -212,9 +212,6 @@ export default class Register extends Vue {
</script>
<style lang="scss" scoped>
@import "../../variables";
@import "../../common.scss";
.avatar-enter-active {
transition: opacity 1s ease;
}

View File

@ -7,6 +7,7 @@
"importHelpers": true,
"moduleResolution": "node",
"experimentalDecorators": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true,

View File

@ -5,6 +5,7 @@ module.exports = {
runtimeCompiler: true,
lintOnSave: true,
filenameHashing: true,
productionSourceMap: false,
outputDir: path.resolve(__dirname, "../priv/static"),
configureWebpack: (config) => {
// Limit the used memory when building
@ -25,6 +26,17 @@ module.exports = {
config.plugins.push(new ForkTsCheckerWebpackPlugin(forkTsCheckerOptions));
},
chainWebpack: (config) => {
// remove the prefetch plugin
config.plugins.delete("prefetch");
},
css: {
loaderOptions: {
scss: {
additionalData: `@import "@/variables.scss";`,
},
},
},
// configureWebpack: {
// optimization: {
// splitChunks: {

View File

@ -1352,11 +1352,6 @@
dependencies:
"@types/node" "*"
"@types/javascript-time-ago@^2.0.1":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@types/javascript-time-ago/-/javascript-time-ago-2.0.1.tgz#819ec39b467409e2fd6acb42bc53ae7d631bbdb0"
integrity sha512-6QWXsuqzfUMfsg1DTJan/MfUi80LGS1TOohSqxlgpBZEHH344xpl3LzgANTp7PPWf7Z/9S0l14RMQPF0vH7MIg==
"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6":
version "7.0.6"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
@ -7988,13 +7983,6 @@ javascript-stringify@^2.0.0, javascript-stringify@^2.0.1:
resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz#6ef358035310e35d667c675ed63d3eb7c1aa19e5"
integrity sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow==
javascript-time-ago@^2.0.4:
version "2.2.8"
resolved "https://registry.yarnpkg.com/javascript-time-ago/-/javascript-time-ago-2.2.8.tgz#d2821816a648f4659f605e030418af7949f0564e"
integrity sha512-VU2GZ88QYl7zEfnKe2VecnPlXunr1awIAf21S13CRUUYlk6cVbmA81GApMXHIbDUfYfsJVcPjjB76KLEPO4fGA==
dependencies:
relative-time-format "^1.0.5"
jest-worker@^25.4.0:
version "25.5.0"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1"
@ -11941,11 +11929,6 @@ relateurl@0.2.x:
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
relative-time-format@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/relative-time-format/-/relative-time-format-1.0.5.tgz#3fb7c76ae39156afe0a3a7ff0cb7bf30aa0f0fb6"
integrity sha512-MAgx/YKcUQYJpIaWcfetPstElnWf26JxVis4PirdwVrrymFdbxyCSm6yENpfB1YuwFbtHSHksN3aBajVNxk10Q==
remark-parse@^7.0.0:
version "7.0.2"
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf"

View File

@ -17,8 +17,8 @@ defmodule Mobilizon.GraphQL.Schema.PostType do
field(:attributed_to, :actor, description: "The post's group")
field(:visibility, :post_visibility, description: "The post's visibility")
field(:publish_at, :datetime, description: "When the post was published")
field(:inserted_at, :naive_datetime, description: "The post's creation date")
field(:updated_at, :naive_datetime, description: "The post's last update date")
field(:inserted_at, :datetime, description: "The post's creation date")
field(:updated_at, :datetime, description: "The post's last update date")
field(:tags, list_of(:tag),
resolve: &Tag.list_tags_for_post/3,

View File

@ -1643,12 +1643,17 @@ defmodule Mobilizon.Events do
where(query, [q], q.local == true)
end
@spec filter_local_or_from_followed_instances_events(Ecto.Query.t()) :: Ecto.Query.t()
@spec filter_local_or_from_followed_instances_events(Ecto.Query.t()) ::
Ecto.Query.t()
defp filter_local_or_from_followed_instances_events(query) do
from(q in query,
left_join: s in Share,
on: s.uri == q.url,
where: q.local == true or not is_nil(s.uri)
follower_actor_id = Mobilizon.Config.relay_actor_id()
query
|> join(:left, [q], s in Share, on: s.uri == q.url)
|> join(:left, [_q, ..., s], f in Follower, on: f.target_actor_id == s.actor_id)
|> where(
[q, ..., s, f],
q.local == true or (f.actor_id == ^follower_actor_id and not is_nil(s.uri))
)
end

View File

@ -61,7 +61,7 @@ defmodule Mobilizon.Posts.Post do
belongs_to(:picture, Picture, on_replace: :update)
many_to_many(:tags, Tag, join_through: "posts_tags", on_replace: :delete)
timestamps()
timestamps(type: :utc_datetime)
end
@required_attrs [

View File

@ -42,7 +42,7 @@
<tr>
<td bgcolor="#ffffff" align="left" style="padding: 20px 30px 0px 30px; color: #474467; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<p style="margin: 0;">
<%= gettext("Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too.") %>
<%= gettext("Note: %{name} (%{domain}) following you doesn't necessarily imply that you follow this instance, but you can ask to follow them too.", name: @follower.name, domain: @follower.domain) %>
</p>
</td>
</tr>

View File

@ -139,13 +139,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -154,11 +154,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -254,7 +249,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -829,7 +824,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -113,13 +113,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -128,11 +128,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -228,7 +223,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -803,7 +798,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -107,13 +107,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -122,11 +122,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -222,7 +217,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -797,7 +792,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -113,13 +113,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -128,11 +128,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -228,7 +223,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -803,7 +798,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -107,13 +107,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -122,11 +122,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -222,7 +217,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -797,7 +792,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -117,13 +117,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -132,11 +132,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -232,7 +227,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -807,7 +802,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -114,13 +114,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -129,11 +129,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -229,7 +224,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -804,7 +799,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -93,75 +93,71 @@ 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:103
#, elixir-format
#: lib/graphql/resolvers/user.ex:103
msgid "Cannot refresh the token"
msgstr "No se puede actualizar el token"
#: lib/graphql/resolvers/group.ex:139
#, elixir-format
#: lib/graphql/resolvers/group.ex:139
msgid "Creator profile is not owned by the current user"
msgstr "El perfil del creador no es propiedad del usuario actual"
#: lib/graphql/resolvers/group.ex:203
#, elixir-format
#: lib/graphql/resolvers/group.ex:203
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:207
#, elixir-format
#: lib/graphql/resolvers/group.ex:207
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:514
#, elixir-format
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr "Error al guardar los parámetros del usuario"
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#, elixir-format
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr "Grupo no encontrado"
#: lib/graphql/resolvers/group.ex:69
#, elixir-format
#: lib/graphql/resolvers/group.ex:69
msgid "Group with ID %{id} not found"
msgstr "No se encontró el grupo con ID% {id}"
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
#, elixir-format
msgid "Group with name %{name} not found"
msgstr "No se encontró el grupo con el nombre% {name}"
#: lib/graphql/resolvers/user.ex:83
#, elixir-format
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:280
#, elixir-format
#: lib/graphql/resolvers/group.ex:280
msgid "Member not found"
msgstr "Miembro no encontrado"
#, elixir-format
#: lib/graphql/resolvers/actor.ex:58 lib/graphql/resolvers/actor.ex:88
#: lib/graphql/resolvers/user.ex:417
#, elixir-format
msgid "No profile found for the moderator user"
msgstr "No se encontró el perfil del usuario moderador"
#: lib/graphql/resolvers/user.ex:195
#, elixir-format
#: lib/graphql/resolvers/user.ex:195
msgid "No user to validate with this email was found"
msgstr "No se encontró ningún usuario para validar con este correo electrónico"
#, elixir-format
#: lib/graphql/resolvers/person.ex:232 lib/graphql/resolvers/user.ex:76
#: lib/graphql/resolvers/user.ex:219
#, elixir-format
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/comment.ex:50 lib/graphql/resolvers/comment.ex:112
#: lib/graphql/resolvers/event.ex:286 lib/graphql/resolvers/feed_token.ex:28 lib/graphql/resolvers/group.ex:245
#: lib/graphql/resolvers/member.ex:77 lib/graphql/resolvers/participant.ex:29
@ -169,707 +165,706 @@ msgstr "No se encontró ningún usuario con este correo electrónico"
#: lib/graphql/resolvers/person.ex:191 lib/graphql/resolvers/person.ex:256 lib/graphql/resolvers/person.ex:288
#: lib/graphql/resolvers/person.ex:301 lib/graphql/resolvers/picture.ex:75 lib/graphql/resolvers/report.ex:110
#: lib/graphql/resolvers/todos.ex:57
#, elixir-format
msgid "Profile is not owned by authenticated user"
msgstr "El perfil no es propiedad del usuario autenticado"
#: lib/graphql/resolvers/user.ex:125
#, elixir-format
#: lib/graphql/resolvers/user.ex:125
msgid "Registrations are not open"
msgstr "Las inscripciones no están abiertas"
#: lib/graphql/resolvers/user.ex:330
#, elixir-format
#: lib/graphql/resolvers/user.ex:330
msgid "The current password is invalid"
msgstr "La contraseña actual no es válida"
#: lib/graphql/resolvers/user.ex:382
#, elixir-format
#: lib/graphql/resolvers/user.ex:382
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:379
#, elixir-format
#: lib/graphql/resolvers/user.ex:379
msgid "The new email must be different"
msgstr "El nuevo correo electrónico debe ser diferente"
#: lib/graphql/resolvers/user.ex:333
#, elixir-format
#: lib/graphql/resolvers/user.ex:333
msgid "The new password must be different"
msgstr "La nueva contraseña debe ser diferente"
#, elixir-format
#: lib/graphql/resolvers/user.ex:376 lib/graphql/resolvers/user.ex:439
#: lib/graphql/resolvers/user.ex:442
#, elixir-format
msgid "The password provided is invalid"
msgstr "La contraseña proporcionada no es válida"
#: lib/graphql/resolvers/user.ex:337
#, elixir-format
#: lib/graphql/resolvers/user.ex:337
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:215
#, elixir-format
#: lib/graphql/resolvers/user.ex:215
msgid "This user can't reset their password"
msgstr "Este usuario no puede restablecer su contraseña"
#: lib/graphql/resolvers/user.ex:79
#, elixir-format
#: lib/graphql/resolvers/user.ex:79
msgid "This user has been disabled"
msgstr "Este usuario ha sido inhabilitado"
#: lib/graphql/resolvers/user.ex:179
#, elixir-format
#: lib/graphql/resolvers/user.ex:179
msgid "Unable to validate user"
msgstr "No se puede validar al usuario"
#: lib/graphql/resolvers/user.ex:420
#, elixir-format
#: lib/graphql/resolvers/user.ex:420
msgid "User already disabled"
msgstr "El usuario ya está inhabilitado"
#: lib/graphql/resolvers/user.ex:489
#, elixir-format
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr "El usuario solicitado no ha iniciado sesión"
#: lib/graphql/resolvers/group.ex:254
#, elixir-format
#: lib/graphql/resolvers/group.ex:254
msgid "You are already a member of this group"
msgstr "Ya eres miembro de este grupo"
#: lib/graphql/resolvers/group.ex:287
#, elixir-format
#: lib/graphql/resolvers/group.ex:287
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:251
#, elixir-format
#: lib/graphql/resolvers/group.ex:251
msgid "You cannot join this group"
msgstr "No puedes unirte a este grupo"
#: lib/graphql/resolvers/group.ex:97
#, elixir-format
#: lib/graphql/resolvers/group.ex:97
msgid "You may not list groups unless moderator."
msgstr "No puedes enumerar grupos a menos que seas moderador."
#: lib/graphql/resolvers/user.ex:387
#, elixir-format
#: lib/graphql/resolvers/user.ex:387
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:345
#, elixir-format
#: lib/graphql/resolvers/user.ex:345
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:212
#, elixir-format
#: lib/graphql/resolvers/group.ex:212
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:447
#, elixir-format
#: lib/graphql/resolvers/user.ex:447
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:259
#, elixir-format
#: lib/graphql/resolvers/group.ex:259
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:292
#, elixir-format
#: lib/graphql/resolvers/group.ex:292
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:177
#, elixir-format
#: lib/graphql/resolvers/group.ex:177
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:58
#, elixir-format
#: lib/graphql/resolvers/user.ex:58
msgid "You need to have admin access to list users"
msgstr "Necesitas tener acceso de administrador para listar usuarios"
#: lib/graphql/resolvers/user.ex:108
#, elixir-format
#: lib/graphql/resolvers/user.ex:108
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:198 lib/graphql/resolvers/user.ex:222
#, elixir-format
#: lib/graphql/resolvers/user.ex:198 lib/graphql/resolvers/user.ex:222
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:128
#, elixir-format
#: lib/graphql/resolvers/user.ex:128
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:64 lib/graphql/resolvers/actor.ex:94
#, elixir-format
#: lib/graphql/resolvers/actor.ex:64 lib/graphql/resolvers/actor.ex:94
msgid "Error while performing background task"
msgstr "Error al realizar la tarea en segundo plano"
#: lib/graphql/resolvers/actor.ex:27
#, elixir-format
#: lib/graphql/resolvers/actor.ex:27
msgid "No profile found with this ID"
msgstr "No se encontró ningún perfil con este ID"
#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91
#, elixir-format
#: lib/graphql/resolvers/actor.ex:54 lib/graphql/resolvers/actor.ex:91
msgid "No remote profile found with this ID"
msgstr "No se encontró ningún perfil remoto con este ID"
#: lib/graphql/resolvers/actor.ex:69
#, elixir-format
#: lib/graphql/resolvers/actor.ex:69
msgid "Only moderators and administrators can suspend a profile"
msgstr "Solo los moderadores y administradores pueden suspender un perfil"
#: lib/graphql/resolvers/actor.ex:99
#, elixir-format
#: lib/graphql/resolvers/actor.ex:99
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:24
#, elixir-format
#: lib/graphql/resolvers/actor.ex:24
msgid "Only remote profiles may be refreshed"
msgstr "Solo se pueden actualizar los perfiles remotos"
#: lib/graphql/resolvers/actor.ex:61
#, elixir-format
#: lib/graphql/resolvers/actor.ex:61
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"
#: lib/graphql/resolvers/participant.ex:90
#, elixir-format
#: lib/graphql/resolvers/participant.ex:90
msgid "Anonymous participation is not enabled"
msgstr "La participación anónima no está habilitada"
#: lib/graphql/resolvers/person.ex:188
#, elixir-format
#: lib/graphql/resolvers/person.ex:188
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:185
#, elixir-format
#: lib/graphql/resolvers/person.ex:185
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:109
#, elixir-format
#: lib/graphql/resolvers/comment.ex:109
msgid "Comment is already deleted"
msgstr "El comentario ya está eliminado"
#: lib/graphql/resolvers/discussion.ex:61
#, elixir-format
#: lib/graphql/resolvers/discussion.ex:61
msgid "Discussion not found"
msgstr "Discusión no encontrada"
#: lib/graphql/resolvers/report.ex:62 lib/graphql/resolvers/report.ex:87
#, elixir-format
#: lib/graphql/resolvers/report.ex:62 lib/graphql/resolvers/report.ex:87
msgid "Error while saving report"
msgstr "Error al guardar el informe"
#: lib/graphql/resolvers/report.ex:113
#, elixir-format
#: lib/graphql/resolvers/report.ex:113
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"
#, elixir-format
#: lib/graphql/error.ex:89 lib/graphql/resolvers/event.ex:238
#: lib/graphql/resolvers/event.ex:283
#, elixir-format
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:160
#, elixir-format
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/event.ex:100 lib/graphql/resolvers/participant.ex:234
#, elixir-format
#: lib/graphql/resolvers/event.ex:100 lib/graphql/resolvers/participant.ex:234
msgid "Moderator profile is not owned by authenticated user"
msgstr "El perfil del moderador no es propiedad del usuario autenticado"
#: lib/graphql/resolvers/discussion.ex:181
#, elixir-format
#: lib/graphql/resolvers/discussion.ex:181
msgid "No discussion with ID %{id}"
msgstr "Sin discusión con ID%{id}"
#: lib/graphql/resolvers/todos.ex:81 lib/graphql/resolvers/todos.ex:171
#, elixir-format
#: lib/graphql/resolvers/todos.ex:81 lib/graphql/resolvers/todos.ex:171
msgid "No profile found for user"
msgstr "No se encontró perfil para el usuario"
#: lib/graphql/resolvers/feed_token.ex:66
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:66
msgid "No such feed token"
msgstr "No existe tal token de alimentación"
#: lib/graphql/resolvers/resource.ex:87
#, elixir-format
#: lib/graphql/resolvers/resource.ex:87
msgid "No such resource"
msgstr "No existe tal recurso"
#: lib/graphql/resolvers/event.ex:202
#, elixir-format
#: lib/graphql/resolvers/event.ex:202
msgid "Organizer profile is not owned by the user"
msgstr "El perfil del organizador no es propiedad del usuario"
#: lib/graphql/resolvers/participant.ex:244
#, elixir-format
#: lib/graphql/resolvers/participant.ex:244
msgid "Participant already has role %{role}"
msgstr "El participante ya tiene el rol%{role}"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:173
#: lib/graphql/resolvers/participant.ex:202 lib/graphql/resolvers/participant.ex:237
#: lib/graphql/resolvers/participant.ex:247
#, elixir-format
msgid "Participant not found"
msgstr "Participante no encontrado"
#: lib/graphql/resolvers/person.ex:31
#, elixir-format
#: lib/graphql/resolvers/person.ex:31
msgid "Person with ID %{id} not found"
msgstr "Persona con ID%{id} no encontrada"
#: lib/graphql/resolvers/person.ex:52
#, elixir-format
#: lib/graphql/resolvers/person.ex:52
msgid "Person with username %{username} not found"
msgstr "Persona con nombre de usuario %{username} no encontrada"
#: lib/graphql/resolvers/picture.ex:45
#, elixir-format
#: lib/graphql/resolvers/picture.ex:45
msgid "Picture with ID %{id} was not found"
msgstr "No se encontró la foto con ID %{id}"
#: lib/graphql/resolvers/post.ex:165 lib/graphql/resolvers/post.ex:198
#, elixir-format
#: lib/graphql/resolvers/post.ex:165 lib/graphql/resolvers/post.ex:198
msgid "Post ID is not a valid ID"
msgstr "La ID de publicación no es válida"
#: lib/graphql/resolvers/post.ex:168 lib/graphql/resolvers/post.ex:201
#, elixir-format
#: lib/graphql/resolvers/post.ex:168 lib/graphql/resolvers/post.ex:201
msgid "Post doesn't exist"
msgstr "La publicación no existe"
#: lib/graphql/resolvers/member.ex:83
#, elixir-format
#: lib/graphql/resolvers/member.ex:83
msgid "Profile invited doesn't exist"
msgstr "El perfil invitado no existe"
#: lib/graphql/resolvers/member.ex:92
#, elixir-format
#: lib/graphql/resolvers/member.ex:92
msgid "Profile is already a member of this group"
msgstr "Perfil ya es miembro de este grupo"
#, elixir-format
#: lib/graphql/resolvers/post.ex:131 lib/graphql/resolvers/post.ex:171
#: lib/graphql/resolvers/post.ex:204 lib/graphql/resolvers/resource.ex:86 lib/graphql/resolvers/resource.ex:123
#: lib/graphql/resolvers/resource.ex:152 lib/graphql/resolvers/resource.ex:181 lib/graphql/resolvers/todos.ex:60
#: lib/graphql/resolvers/todos.ex:84 lib/graphql/resolvers/todos.ex:102 lib/graphql/resolvers/todos.ex:174
#: lib/graphql/resolvers/todos.ex:197 lib/graphql/resolvers/todos.ex:225
#, elixir-format
msgid "Profile is not member of group"
msgstr "El perfil no es miembro del grupo"
#: lib/graphql/resolvers/person.ex:154 lib/graphql/resolvers/person.ex:182
#, elixir-format
#: lib/graphql/resolvers/person.ex:154 lib/graphql/resolvers/person.ex:182
msgid "Profile not found"
msgstr "Perfil no encontrado"
#: lib/graphql/resolvers/event.ex:104 lib/graphql/resolvers/participant.ex:241
#, elixir-format
#: lib/graphql/resolvers/event.ex:104 lib/graphql/resolvers/participant.ex:241
msgid "Provided moderator profile doesn't have permission on this event"
msgstr "El perfil de moderador proporcionado no tiene permiso para este evento"
#: lib/graphql/resolvers/report.ex:38
#, elixir-format
#: lib/graphql/resolvers/report.ex:38
msgid "Report not found"
msgstr "Informe no encontrado"
#: lib/graphql/resolvers/resource.ex:149 lib/graphql/resolvers/resource.ex:178
#, elixir-format
#: lib/graphql/resolvers/resource.ex:149 lib/graphql/resolvers/resource.ex:178
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:267
#, elixir-format
#: lib/graphql/resolvers/participant.ex:267
msgid "This token is invalid"
msgstr "Este token no es válido"
#: lib/graphql/resolvers/todos.ex:168 lib/graphql/resolvers/todos.ex:222
#, elixir-format
#: lib/graphql/resolvers/todos.ex:168 lib/graphql/resolvers/todos.ex:222
msgid "Todo doesn't exist"
msgstr "Todo no existe"
#, elixir-format
#: lib/graphql/resolvers/todos.ex:78 lib/graphql/resolvers/todos.ex:194
#: lib/graphql/resolvers/todos.ex:219
#, elixir-format
msgid "Todo list doesn't exist"
msgstr "La lista de tareas pendientes no existe"
#: lib/graphql/resolvers/feed_token.ex:72
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:72
msgid "Token does not exist"
msgstr "El token no existe"
#: lib/graphql/resolvers/feed_token.ex:69
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:69
msgid "Token is not a valid UUID"
msgstr "El token no es un UUID válido"
#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:323
#, elixir-format
#: lib/graphql/error.ex:87 lib/graphql/resolvers/person.ex:323
msgid "User not found"
msgstr "Usuario no encontrado"
#: lib/graphql/resolvers/person.ex:235
#, elixir-format
#: lib/graphql/resolvers/person.ex:235
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/discussion.ex:185
#, elixir-format
#: lib/graphql/resolvers/discussion.ex:185
msgid "You are not a member of the group the discussion belongs to"
msgstr "No eres miembro del grupo al que pertenece la discusión"
#: lib/graphql/resolvers/member.ex:86
#, elixir-format
#: lib/graphql/resolvers/member.ex:86
msgid "You are not a member of this group"
msgstr "no eres un miembro de este grupo"
#: lib/graphql/resolvers/member.ex:143
#, elixir-format
#: lib/graphql/resolvers/member.ex:143
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:55
#, elixir-format
#: lib/graphql/resolvers/comment.ex:55
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:44
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:44
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:117
#, elixir-format
#: lib/graphql/resolvers/comment.ex:117
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:81
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:81
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:77
#, elixir-format
#: lib/graphql/resolvers/comment.ex:77
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:167
#: lib/graphql/resolvers/participant.ex:196
#, 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:147
#, elixir-format
#: lib/graphql/resolvers/member.ex:147
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:105
#, elixir-format
#: lib/graphql/resolvers/comment.ex:105
msgid "You cannot delete this comment"
msgstr "No puedes borrar este comentario"
#: lib/graphql/resolvers/event.ex:279
#, elixir-format
#: lib/graphql/resolvers/event.ex:279
msgid "You cannot delete this event"
msgstr "No puedes borrar este evento"
#: lib/graphql/resolvers/member.ex:89
#, elixir-format
#: lib/graphql/resolvers/member.ex:89
msgid "You cannot invite to this group"
msgstr "No puedes invitar a este grupo"
#: lib/graphql/resolvers/feed_token.ex:75
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:75
msgid "You don't have permission to delete this token"
msgstr "No tienes permiso para eliminar este token"
#: lib/graphql/resolvers/admin.ex:52
#, elixir-format
#: lib/graphql/resolvers/admin.ex:52
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:118
#, elixir-format
#: lib/graphql/resolvers/report.ex:118
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:43
#, elixir-format
#: lib/graphql/resolvers/report.ex:43
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:208
#, elixir-format
#: lib/graphql/resolvers/admin.ex:208
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:193
#, elixir-format
#: lib/graphql/resolvers/admin.ex:193
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:232
#, elixir-format
#: lib/graphql/resolvers/admin.ex:232
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:66
#, elixir-format
#: lib/graphql/resolvers/discussion.ex:66
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:92
#, elixir-format
#: lib/graphql/resolvers/resource.ex:92
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:213
#, elixir-format
#: lib/graphql/resolvers/event.ex:213
msgid "You need to be logged-in to create events"
msgstr "Debes iniciar sesión para crear eventos"
#: lib/graphql/resolvers/post.ex:139
#, elixir-format
#: lib/graphql/resolvers/post.ex:139
msgid "You need to be logged-in to create posts"
msgstr "Debes iniciar sesión para crear publicaciones"
#: lib/graphql/resolvers/report.ex:81 lib/graphql/resolvers/report.ex:92
#, elixir-format
#: lib/graphql/resolvers/report.ex:81 lib/graphql/resolvers/report.ex:92
msgid "You need to be logged-in to create reports"
msgstr "Debe iniciar sesión para crear informes"
#: lib/graphql/resolvers/resource.ex:128
#, elixir-format
#: lib/graphql/resolvers/resource.ex:128
msgid "You need to be logged-in to create resources"
msgstr "Debe iniciar sesión para crear recursos"
#: lib/graphql/resolvers/event.ex:291
#, elixir-format
#: lib/graphql/resolvers/event.ex:291
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:209
#, elixir-format
#: lib/graphql/resolvers/post.ex:209
msgid "You need to be logged-in to delete posts"
msgstr "Debes iniciar sesión para eliminar publicaciones"
#: lib/graphql/resolvers/resource.ex:186
#, elixir-format
#: lib/graphql/resolvers/resource.ex:186
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:207
#, elixir-format
#: lib/graphql/resolvers/participant.ex:207
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:252
#, elixir-format
#: lib/graphql/resolvers/event.ex:252
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:176
#, elixir-format
#: lib/graphql/resolvers/post.ex:176
msgid "You need to be logged-in to update posts"
msgstr "Debes iniciar sesión para actualizar las publicaciones"
#: lib/graphql/resolvers/resource.ex:157
#, elixir-format
#: lib/graphql/resolvers/resource.ex:157
msgid "You need to be logged-in to update resources"
msgstr "Debes iniciar sesión para actualizar los recursos"
#: lib/graphql/resolvers/resource.ex:204
#, elixir-format
#: lib/graphql/resolvers/resource.ex:204
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/picture.ex:86
#, elixir-format
#: lib/graphql/resolvers/picture.ex:86
msgid "You need to login to upload a picture"
msgstr "Debes iniciar sesión para subir una imagen"
#: lib/graphql/resolvers/report.ex:84
#, elixir-format
#: lib/graphql/resolvers/report.ex:84
msgid "Reporter ID does not match the anonymous profile id"
msgstr ""
"La identificación del informante no coincide con la identificación del "
"perfil anónimo"
#: lib/graphql/resolvers/report.ex:59
#, elixir-format
#: lib/graphql/resolvers/report.ex:59
msgid "Reporter profile is not owned by authenticated user"
msgstr "El perfil del denunciante no es propiedad de un usuario autenticado"
#: lib/graphql/resolvers/resource.ex:120
#, elixir-format
#: lib/graphql/resolvers/resource.ex:120
msgid "Parent resource doesn't belong to this group"
msgstr "El recurso principal no pertenece a este grupo"
#: 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/mobilizon/users/user.ex:109
#, elixir-format
#: lib/mobilizon/users/user.ex:109
msgid "The chosen password is too short."
msgstr "La contraseña elegida es demasiado corta."
#: lib/mobilizon/users/user.ex:138
#, elixir-format
#: lib/mobilizon/users/user.ex:138
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:104
#, elixir-format
#: lib/mobilizon/users/user.ex:104
msgid "This email is already used."
msgstr "Este correo electrónico ya está en uso."
#: lib/graphql/error.ex:88
#, elixir-format
#: lib/graphql/error.ex:88
msgid "Post not found"
msgstr "Informe no encontrado"
#: lib/graphql/error.ex:75
#, elixir-format
#: lib/graphql/error.ex:75
msgid "Invalid arguments passed"
msgstr "Se pasaron argumentos no válidos"
#: lib/graphql/error.ex:81
#, elixir-format
#: lib/graphql/error.ex:81
msgid "Invalid credentials"
msgstr "Credenciales no válidas"
#: lib/graphql/error.ex:79
#, elixir-format
#: lib/graphql/error.ex:79
msgid "Reset your password to login"
msgstr "Restablezca su contraseña para iniciar sesión"
#: lib/graphql/error.ex:86
#, elixir-format
#: lib/graphql/error.ex:86
msgid "Resource not found"
msgstr "Recurso no encontrado"
#: lib/graphql/error.ex:90
#, elixir-format
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr "Algo salió mal"
#: lib/graphql/error.ex:74
#, elixir-format
#: lib/graphql/error.ex:74
msgid "Unknown Resource"
msgstr "Recurso desconocido"
#: lib/graphql/error.ex:84
#, elixir-format
#: lib/graphql/error.ex:84
msgid "You don't have permission to do this"
msgstr "No tienes permiso para hacer esto"
#: lib/graphql/error.ex:76
#, elixir-format
#: lib/graphql/error.ex:76
msgid "You need to be logged in"
msgstr "Debes iniciar sesión"
#: lib/graphql/resolvers/member.ex:112
#, elixir-format
#: lib/graphql/resolvers/member.ex:112
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:129
#, elixir-format
#: lib/graphql/resolvers/member.ex:129
msgid "You can't reject this invitation with this profile."
msgstr "No puedes rechazar esta invitación con este perfil."
#: lib/graphql/resolvers/picture.ex:78
#, elixir-format
#: lib/graphql/resolvers/picture.ex:78
msgid "File doesn't have an allowed MIME type."
msgstr "El archivo no tiene un tipo MIME permitido."
#: lib/graphql/resolvers/group.ex:172
#, elixir-format
#: lib/graphql/resolvers/group.ex:172
msgid "Profile is not administrator for the group"
msgstr "El perfil no es miembro del grupo"
#: lib/graphql/resolvers/event.ex:241
#, elixir-format
#: lib/graphql/resolvers/event.ex:241
msgid "You can't edit this event."
msgstr "No puedes borrar este evento."
#: lib/graphql/resolvers/event.ex:244
#, elixir-format
#: lib/graphql/resolvers/event.ex:244
msgid "You can't attribute this event to this profile."
msgstr "No puedes rechazar esta invitación con este perfil."

View File

@ -114,13 +114,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -129,11 +129,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -229,7 +224,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -804,7 +799,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -116,13 +116,13 @@ 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é"
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr "Erreur lors de la sauvegarde des paramètres utilisateur"
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr "Groupe non trouvé"
@ -131,11 +131,6 @@ msgstr "Groupe non trouvé"
msgid "Group with ID %{id} not found"
msgstr "Groupe avec l'ID %{id} non trouvé"
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr "Groupe avec le nom %{name} non trouvé"
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -233,7 +228,7 @@ msgid "User already disabled"
msgstr "L'utilisateur·ice est déjà désactivé·e"
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr "L'utilisateur·ice demandé·e n'est pas connecté·e"
@ -810,7 +805,7 @@ msgid "Resource not found"
msgstr "Ressource non trouvée"
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr "Quelque chose s'est mal passé"

File diff suppressed because it is too large Load Diff

View File

@ -114,13 +114,13 @@ 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:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr "Errore nel salvare le preferenze utente"
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr "Gruppo non trovato"
@ -129,11 +129,6 @@ msgstr "Gruppo non trovato"
msgid "Group with ID %{id} not found"
msgstr "Gruppo con ID %{id} non trovato"
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr "Gruppo con nome %{name} non trovato"
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -229,7 +224,7 @@ msgid "User already disabled"
msgstr "Utente già disabilitato"
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr "L'utente richiesto non è loggato"
@ -804,7 +799,7 @@ msgid "Resource not found"
msgstr "Segnalazione non trovata"
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -101,13 +101,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -116,11 +116,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -216,7 +211,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -791,7 +786,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -107,13 +107,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -122,11 +122,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -222,7 +217,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -797,7 +792,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -114,13 +114,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -129,11 +129,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -229,7 +224,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -804,7 +799,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -121,13 +121,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -136,11 +136,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -236,7 +231,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -811,7 +806,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -107,13 +107,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -122,11 +122,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -222,7 +217,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -797,7 +792,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -107,13 +107,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -122,11 +122,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -222,7 +217,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -797,7 +792,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -113,13 +113,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr ""
@ -128,11 +128,6 @@ msgstr ""
msgid "Group with ID %{id} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -228,7 +223,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -803,7 +798,7 @@ msgid "Resource not found"
msgstr ""
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -114,13 +114,13 @@ msgid "Current profile is not an administrator of the selected group"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:514
#: lib/graphql/resolvers/user.ex:512
msgid "Error while saving user settings"
msgstr "Ett fel uppstod när användarinställningarna skulle sparas"
#, elixir-format
#: lib/graphql/resolvers/group.ex:200 lib/graphql/resolvers/group.ex:248
#: lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
#: lib/graphql/error.ex:90 lib/graphql/resolvers/group.ex:200
#: lib/graphql/resolvers/group.ex:248 lib/graphql/resolvers/group.ex:283 lib/graphql/resolvers/member.ex:80
msgid "Group not found"
msgstr "Gruppen kunde inte hittas"
@ -129,11 +129,6 @@ msgstr "Gruppen kunde inte hittas"
msgid "Group with ID %{id} not found"
msgstr "Gruppen med %{id} kunde inte hittas"
#, elixir-format
#: lib/graphql/resolvers/group.ex:41 lib/graphql/resolvers/group.ex:55
msgid "Group with name %{name} not found"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:83
msgid "Impossible to authenticate, either your email or password are invalid."
@ -229,7 +224,7 @@ msgid "User already disabled"
msgstr ""
#, elixir-format
#: lib/graphql/resolvers/user.ex:489
#: lib/graphql/resolvers/user.ex:487
msgid "User requested is not logged-in"
msgstr ""
@ -804,7 +799,7 @@ msgid "Resource not found"
msgstr "Resursen kunde inte hittas"
#, elixir-format
#: lib/graphql/error.ex:90
#: lib/graphql/error.ex:91
msgid "Something went wrong"
msgstr ""

View File

@ -6,6 +6,7 @@ defmodule Mobilizon.EventsTest do
alias Mobilizon.Actors.Actor
alias Mobilizon.Events
alias Mobilizon.Events.{Event, Participant, Session, Tag, TagRelation, Track}
alias Mobilizon.Federation.ActivityPub.Relay
alias Mobilizon.Service.Workers
alias Mobilizon.Storage.Page
@ -19,10 +20,54 @@ defmodule Mobilizon.EventsTest do
category: "meeting"
}
describe "list_events/5" do
setup do
actor = insert(:actor)
event = insert(:event, organizer_actor: actor, visibility: :public, local: true)
Mobilizon.Config.clear_config_cache()
{:ok, actor: actor, event: event}
end
test "list_events/0 returns all events", %{event: event} do
assert event.title == hd(Events.list_events()).title
end
test "list_events/5 returns events from other instances if we follow them",
%{event: _event} do
events = Events.list_events()
assert length(events) == 1
%Actor{id: remote_instance_actor_id} = remote_instance_actor = insert(:instance_actor)
%Actor{id: remote_actor_id} = insert(:actor, domain: "somedomain.tld", user: nil)
%Event{url: remote_event_url} = insert(:event, local: false, title: "My Remote event")
Mobilizon.Share.create(remote_event_url, remote_instance_actor_id, remote_actor_id)
%Actor{} = own_instance_actor = Relay.get_actor()
insert(:follower, target_actor: remote_instance_actor, actor: own_instance_actor)
events = Events.list_events()
assert length(events) == 2
assert events |> Enum.any?(fn event -> event.title == "My Remote event" end)
end
test "list_events/5 doesn't return events from other instances if we don't follow them anymore",
%{event: _event} do
%Actor{id: remote_instance_actor_id} = insert(:instance_actor)
%Actor{id: remote_actor_id} = insert(:actor, domain: "somedomain.tld", user: nil)
%Event{url: remote_event_url} = insert(:event, local: false, title: "My Remote event")
Mobilizon.Share.create(remote_event_url, remote_instance_actor_id, remote_actor_id)
events = Events.list_events()
assert length(events) == 1
assert events |> Enum.all?(fn event -> event.title != "My Remote event" end)
end
end
describe "events" do
setup do
actor = insert(:actor)
event = insert(:event, organizer_actor: actor, visibility: :public)
event = insert(:event, organizer_actor: actor, visibility: :public, local: true)
Workers.BuildSearch.insert_search_event(event)
{:ok, actor: actor, event: event}
end
@ -41,10 +86,6 @@ defmodule Mobilizon.EventsTest do
}
@invalid_attrs %{begins_on: nil, description: nil, ends_on: nil, title: nil}
test "list_events/0 returns all events", %{event: event} do
assert event.title == hd(Events.list_events()).title
end
test "get_event!/1 returns the event with given id", %{event: event} do
assert Events.get_event!(event.id).title == event.title
refute Ecto.assoc_loaded?(Events.get_event!(event.id).organizer_actor)

View File

@ -78,6 +78,28 @@ defmodule Mobilizon.Factory do
)
end
def instance_actor_factory do
preferred_username = "relay"
domain = "#{sequence("mydomain")}.com"
struct!(
actor_factory(),
%{
preferred_username: preferred_username,
type: :Application,
url: "http://#{domain}/#{preferred_username}",
followers_url: Actor.build_url(preferred_username, :followers),
following_url: Actor.build_url(preferred_username, :following),
members_url: Actor.build_url(preferred_username, :members),
resources_url: Actor.build_url(preferred_username, :resources),
inbox_url: Actor.build_url(preferred_username, :inbox),
outbox_url: Actor.build_url(preferred_username, :outbox),
user: nil,
domain: domain
}
)
end
def follower_factory do
uuid = Ecto.UUID.generate()