Merge pull request #2841 from ClearlyClaire/glitch-soc/merge-upstream

Merge upstream changes up to a021dee642
pull/2842/head
Claire 2024-09-12 08:51:21 +02:00 committed by GitHub
commit 7cfa8bb782
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
64 changed files with 501 additions and 163 deletions

View File

@ -458,7 +458,7 @@ GEM
nokogiri (1.16.7)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oj (3.16.5)
oj (3.16.6)
bigdecimal (>= 3.0)
ostruct (>= 0.2)
omniauth (2.1.2)

View File

@ -150,11 +150,13 @@ export default class StatusPrepend extends PureComponent {
return !type ? null : (
<aside className={type === 'reblogged_by' || type === 'featured' ? 'status__prepend' : 'notification__message'}>
<div className='status__prepend__icon'>
<Icon
className={`status__prepend-icon ${type === 'favourite' ? 'star-icon' : ''}`}
className={type === 'favourite' ? 'star-icon' : null}
id={iconId}
icon={iconComponent}
/>
</div>
<Message />
{children}
</aside>

View File

@ -0,0 +1,50 @@
import { FormattedMessage } from 'react-intl';
import ReplyIcon from '@/material-icons/400-24px/reply.svg?react';
import { Icon } from 'flavours/glitch/components/icon';
import { DisplayedName } from 'flavours/glitch/features/notifications_v2/components/displayed_name';
import { useAppSelector } from 'flavours/glitch/store';
export const StatusThreadLabel: React.FC<{
accountId: string;
inReplyToAccountId: string;
}> = ({ accountId, inReplyToAccountId }) => {
const inReplyToAccount = useAppSelector((state) =>
state.accounts.get(inReplyToAccountId),
);
let label;
if (accountId === inReplyToAccountId) {
label = (
<FormattedMessage
id='status.continued_thread'
defaultMessage='Continued thread'
/>
);
} else if (inReplyToAccount) {
label = (
<FormattedMessage
id='status.replied_to'
defaultMessage='Replied to {name}'
values={{ name: <DisplayedName accountIds={[inReplyToAccountId]} /> }}
/>
);
} else {
label = (
<FormattedMessage
id='status.replied_in_thread'
defaultMessage='Replied in thread'
/>
);
}
return (
<div className='status__prepend'>
<div className='status__prepend__icon'>
<Icon id='reply' icon={ReplyIcon} />
</div>
{label}
</div>
);
};

View File

@ -1776,15 +1776,29 @@ body > [data-popper-placement] {
.status__prepend {
padding: 8px 14px; // glitch: reduced padding
padding-bottom: 0;
display: inline-flex;
gap: 10px;
display: flex;
align-items: center;
gap: 8px;
font-size: 14px;
line-height: 22px;
font-weight: 500;
color: $dark-text-color;
.status__display-name strong {
color: $dark-text-color;
&__icon {
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 auto;
.icon {
width: 16px;
height: 16px;
}
}
a {
color: inherit;
text-decoration: none;
}
> span {

View File

@ -12,7 +12,6 @@ import { HotKeys } from 'react-hotkeys';
import AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';
import PushPinIcon from '@/material-icons/400-24px/push_pin.svg?react';
import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react';
import ReplyIcon from '@/material-icons/400-24px/reply.svg?react';
import { ContentWarning } from 'mastodon/components/content_warning';
import { FilterWarning } from 'mastodon/components/filter_warning';
import { Icon } from 'mastodon/components/icon';
@ -34,6 +33,7 @@ import { getHashtagBarForStatus } from './hashtag_bar';
import { RelativeTimestamp } from './relative_timestamp';
import StatusActionBar from './status_action_bar';
import StatusContent from './status_content';
import { StatusThreadLabel } from './status_thread_label';
import { VisibilityIcon } from './visibility_icon';
const domParser = new DOMParser();
@ -413,7 +413,7 @@ class Status extends ImmutablePureComponent {
if (featured) {
prepend = (
<div className='status__prepend'>
<div className='status__prepend-icon-wrapper'><Icon id='thumb-tack' icon={PushPinIcon} className='status__prepend-icon' /></div>
<div className='status__prepend__icon'><Icon id='thumb-tack' icon={PushPinIcon} /></div>
<FormattedMessage id='status.pinned' defaultMessage='Pinned post' />
</div>
);
@ -422,7 +422,7 @@ class Status extends ImmutablePureComponent {
prepend = (
<div className='status__prepend'>
<div className='status__prepend-icon-wrapper'><Icon id='retweet' icon={RepeatIcon} className='status__prepend-icon' /></div>
<div className='status__prepend__icon'><Icon id='retweet' icon={RepeatIcon} /></div>
<FormattedMessage id='status.reblogged_by' defaultMessage='{name} boosted' values={{ name: <a onClick={this.handlePrependAccountClick} data-id={status.getIn(['account', 'id'])} data-hover-card-account={status.getIn(['account', 'id'])} href={`/@${status.getIn(['account', 'acct'])}`} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />
</div>
);
@ -434,18 +434,13 @@ class Status extends ImmutablePureComponent {
} else if (status.get('visibility') === 'direct') {
prepend = (
<div className='status__prepend'>
<div className='status__prepend-icon-wrapper'><Icon id='at' icon={AlternateEmailIcon} className='status__prepend-icon' /></div>
<div className='status__prepend__icon'><Icon id='at' icon={AlternateEmailIcon} /></div>
<FormattedMessage id='status.direct_indicator' defaultMessage='Private mention' />
</div>
);
} else if (showThread && status.get('in_reply_to_id') && status.get('in_reply_to_account_id') === status.getIn(['account', 'id'])) {
const display_name_html = { __html: status.getIn(['account', 'display_name_html']) };
} else if (showThread && status.get('in_reply_to_id')) {
prepend = (
<div className='status__prepend'>
<div className='status__prepend-icon-wrapper'><Icon id='reply' icon={ReplyIcon} className='status__prepend-icon' /></div>
<FormattedMessage id='status.replied_to' defaultMessage='Replied to {name}' values={{ name: <a onClick={this.handlePrependAccountClick} data-id={status.getIn(['account', 'id'])} data-hover-card-account={status.getIn(['account', 'id'])} href={`/@${status.getIn(['account', 'acct'])}`} className='status__display-name muted'><bdi><strong dangerouslySetInnerHTML={display_name_html} /></bdi></a> }} />
</div>
<StatusThreadLabel accountId={status.getIn(['account', 'id'])} inReplyToAccountId={status.get('in_reply_to_account_id')} />
);
}

View File

@ -0,0 +1,50 @@
import { FormattedMessage } from 'react-intl';
import ReplyIcon from '@/material-icons/400-24px/reply.svg?react';
import { Icon } from 'mastodon/components/icon';
import { DisplayedName } from 'mastodon/features/notifications_v2/components/displayed_name';
import { useAppSelector } from 'mastodon/store';
export const StatusThreadLabel: React.FC<{
accountId: string;
inReplyToAccountId: string;
}> = ({ accountId, inReplyToAccountId }) => {
const inReplyToAccount = useAppSelector((state) =>
state.accounts.get(inReplyToAccountId),
);
let label;
if (accountId === inReplyToAccountId) {
label = (
<FormattedMessage
id='status.continued_thread'
defaultMessage='Continued thread'
/>
);
} else if (inReplyToAccount) {
label = (
<FormattedMessage
id='status.replied_to'
defaultMessage='Replied to {name}'
values={{ name: <DisplayedName accountIds={[inReplyToAccountId]} /> }}
/>
);
} else {
label = (
<FormattedMessage
id='status.replied_in_thread'
defaultMessage='Replied in thread'
/>
);
}
return (
<div className='status__prepend'>
<div className='status__prepend__icon'>
<Icon id='reply' icon={ReplyIcon} />
</div>
{label}
</div>
);
};

View File

@ -780,6 +780,7 @@
"status.bookmark": "Marca",
"status.cancel_reblog_private": "Desfés l'impuls",
"status.cannot_reblog": "No es pot impulsar aquest tut",
"status.continued_thread": "Continuació del fil",
"status.copy": "Copia l'enllaç al tut",
"status.delete": "Elimina",
"status.detailed_status": "Vista detallada de la conversa",
@ -813,6 +814,7 @@
"status.reblogs.empty": "Encara no ha impulsat ningú aquest tut. Quan algú ho faci, apareixerà aquí.",
"status.redraft": "Esborra i reescriu",
"status.remove_bookmark": "Elimina el marcador",
"status.replied_in_thread": "Respost al fil",
"status.replied_to": "En resposta a {name}",
"status.reply": "Respon",
"status.replyAll": "Respon al fil",

View File

@ -780,6 +780,7 @@
"status.bookmark": "Bogmærk",
"status.cancel_reblog_private": "Fjern boost",
"status.cannot_reblog": "Dette indlæg kan ikke fremhæves",
"status.continued_thread": "Fortsat tråd",
"status.copy": "Kopiér link til indlæg",
"status.delete": "Slet",
"status.detailed_status": "Detaljeret samtalevisning",
@ -813,6 +814,7 @@
"status.reblogs.empty": "Ingen har endnu fremhævet dette indlæg. Når nogen gør, vil det fremgå hér.",
"status.redraft": "Slet og omformulér",
"status.remove_bookmark": "Fjern bogmærke",
"status.replied_in_thread": "Svaret i tråd",
"status.replied_to": "Besvarede {name}",
"status.reply": "Besvar",
"status.replyAll": "Besvar alle",

View File

@ -780,6 +780,7 @@
"status.bookmark": "Beitrag als Lesezeichen setzen",
"status.cancel_reblog_private": "Beitrag nicht mehr teilen",
"status.cannot_reblog": "Dieser Beitrag kann nicht geteilt werden",
"status.continued_thread": "Fortgeführter Thread",
"status.copy": "Link zum Beitrag kopieren",
"status.delete": "Beitrag löschen",
"status.detailed_status": "Detaillierte Ansicht der Unterhaltung",
@ -813,6 +814,7 @@
"status.reblogs.empty": "Diesen Beitrag hat bisher noch niemand geteilt. Sobald es jemand tut, wird das Profil hier erscheinen.",
"status.redraft": "Löschen und neu erstellen",
"status.remove_bookmark": "Lesezeichen entfernen",
"status.replied_in_thread": "Antwortete im Thread",
"status.replied_to": "Antwortete {name}",
"status.reply": "Antworten",
"status.replyAll": "Allen antworten",

View File

@ -780,6 +780,7 @@
"status.bookmark": "Bookmark",
"status.cancel_reblog_private": "Unboost",
"status.cannot_reblog": "This post cannot be boosted",
"status.continued_thread": "Continued thread",
"status.copy": "Copy link to post",
"status.delete": "Delete",
"status.detailed_status": "Detailed conversation view",
@ -813,6 +814,7 @@
"status.reblogs.empty": "No one has boosted this post yet. When someone does, they will show up here.",
"status.redraft": "Delete & re-draft",
"status.remove_bookmark": "Remove bookmark",
"status.replied_in_thread": "Replied in thread",
"status.replied_to": "Replied to {name}",
"status.reply": "Reply",
"status.replyAll": "Reply to thread",

View File

@ -780,6 +780,7 @@
"status.bookmark": "Marcar",
"status.cancel_reblog_private": "Quitar adhesión",
"status.cannot_reblog": "No se puede adherir a este mensaje",
"status.continued_thread": "Continuación de hilo",
"status.copy": "Copiar enlace al mensaje",
"status.delete": "Eliminar",
"status.detailed_status": "Vista de conversación detallada",
@ -813,6 +814,7 @@
"status.reblogs.empty": "Todavía nadie adhirió a este mensaje. Cuando alguien lo haga, se mostrará acá.",
"status.redraft": "Eliminar mensaje original y editarlo",
"status.remove_bookmark": "Quitar marcador",
"status.replied_in_thread": "Respuesta en hilo",
"status.replied_to": "Respondió a {name}",
"status.reply": "Responder",
"status.replyAll": "Responder al hilo",

View File

@ -1,6 +1,6 @@
{
"about.blocks": "Moderoidut palvelimet",
"about.contact": "Yhteystiedot:",
"about.contact": "Yhteydenotto:",
"about.disclaimer": "Mastodon on vapaa avoimen lähdekoodin ohjelmisto ja Mastodon gGmbH:n tavaramerkki.",
"about.domain_blocks.no_reason_available": "Syy ei ole tiedossa",
"about.domain_blocks.preamble": "Mastodonin avulla voi yleensä tarkastella minkä tahansa fediversumiin kuuluvan palvelimen sisältöä ja olla yhteyksissä eri palvelinten käyttäjien kanssa. Nämä poikkeukset koskevat yksin tätä palvelinta.",
@ -780,6 +780,7 @@
"status.bookmark": "Lisää kirjanmerkki",
"status.cancel_reblog_private": "Peru tehostus",
"status.cannot_reblog": "Tätä julkaisua ei voi tehostaa",
"status.continued_thread": "Jatkoi ketjua",
"status.copy": "Kopioi linkki julkaisuun",
"status.delete": "Poista",
"status.detailed_status": "Yksityiskohtainen keskustelunäkymä",
@ -813,6 +814,7 @@
"status.reblogs.empty": "Kukaan ei ole vielä tehostanut tätä julkaisua. Kun joku tekee niin, tulee hän tähän näkyviin.",
"status.redraft": "Poista ja palauta muokattavaksi",
"status.remove_bookmark": "Poista kirjanmerkki",
"status.replied_in_thread": "Vastasi ketjuun",
"status.replied_to": "Vastaus käyttäjälle {name}",
"status.reply": "Vastaa",
"status.replyAll": "Vastaa ketjuun",

View File

@ -223,7 +223,7 @@
"domain_block_modal.title": "Bloquear dominio?",
"domain_block_modal.you_will_lose_followers": "Vanse eliminar todas as túas seguidoras deste servidor.",
"domain_block_modal.you_wont_see_posts": "Non verás publicacións ou notificacións das usuarias deste servidor.",
"domain_pill.activitypub_lets_connect": "Permíteche conectar e interactuar con persoas non só de Mastodon, se non tamén con outras apps sociais.",
"domain_pill.activitypub_lets_connect": "Permíteche conectar e interactuar con persoas non só de Mastodon, se non tamén con outras sociais.",
"domain_pill.activitypub_like_language": "ActivityPub é algo así como o idioma que Mastodon fala con outras redes sociais.",
"domain_pill.server": "Servidor",
"domain_pill.their_handle": "O seu alcume:",
@ -231,8 +231,8 @@
"domain_pill.their_username": "O seu identificador único no seu servidor. É posible atopar usuarias co mesmo nome de usuaria en diferentes servidores.",
"domain_pill.username": "Nome de usuaria",
"domain_pill.whats_in_a_handle": "As partes do alcume?",
"domain_pill.who_they_are": "O alcume dinos quen é esa persoa e onde está, para que poidas interactuar con ela en toda a web social de <button>plataformas ActivityPub</button>.",
"domain_pill.who_you_are": "Como o teu alcume informa de quen es e onde estás, as persoas poden interactuar contigo desde toda a web social de <button>plataformas ActivityPub</button>.",
"domain_pill.who_they_are": "O alcume dinos quen é esa persoa e onde está, para que poidas interactuar con ela en toda a web social das <button>plataformas ActivityPub</button>.",
"domain_pill.who_you_are": "Como o teu alcume informa de quen es e onde estás, as persoas poden interactuar contigo desde toda a web social das <button>plataformas ActivityPub</button>.",
"domain_pill.your_handle": "O teu alcume:",
"domain_pill.your_server": "O teu fogar dixital, onde están as túas publicacións. Non é do teu agrado? Podes cambiar de servidor cando queiras levando as túas seguidoras contigo.",
"domain_pill.your_username": "O teu identificador único neste servidor. É posible que atopes usuarias co mesmo nome de usuaria en outros servidores.",
@ -272,7 +272,7 @@
"empty_column.list": "Aínda non hai nada nesta listaxe. Cando as usuarias incluídas na listaxe publiquen mensaxes, amosaranse aquí.",
"empty_column.lists": "Aínda non tes listaxes. Cando crees unha, amosarase aquí.",
"empty_column.mutes": "Aínda non silenciaches a ningúnha usuaria.",
"empty_column.notification_requests": "Todo ben! Nada por aquí. Cando recibas novas notificación aparecerán aquí seguindo o criterio dos teus axustes.",
"empty_column.notification_requests": "Todo ben! Nada por aquí. Cando recibas novas notificacións aparecerán aquí seguindo o criterio dos teus axustes.",
"empty_column.notifications": "Aínda non tes notificacións. Aparecerán cando outras persoas interactúen contigo.",
"empty_column.public": "Nada por aquí! Escribe algo de xeito público, ou segue de xeito manual usuarias doutros servidores para ir enchéndoo",
"error.unexpected_crash.explanation": "Debido a un erro no noso código ou a unha compatilidade co teu navegador, esta páxina non pode ser amosada correctamente.",
@ -641,7 +641,7 @@
"onboarding.steps.publish_status.title": "Escribe a túa primeira publicación",
"onboarding.steps.setup_profile.body": "Ao engadir información ao teu perfil é máis probable que teñas máis interaccións.",
"onboarding.steps.setup_profile.title": "Personaliza o perfil",
"onboarding.steps.share_profile.body": "Dille ás amizades como poden atoparte en Mastodon!",
"onboarding.steps.share_profile.body": "Dille ás amizades como poden atoparte en Mastodon.",
"onboarding.steps.share_profile.title": "Comparte o teu perfil en Mastodon",
"onboarding.tips.2fa": "<strong>Sabes que?</strong> Podes protexer a túa conta configurando un segundo factor de autenticación nos axustes. Funciona con calquera app TOTP, non precisas un número de teléfono!",
"onboarding.tips.accounts_from_other_servers": "<strong>Sabes que?</strong> Como Mastodon é descentralizado, algúns perfís que atopes estarán en servidores diferentes ao teu. Pero podes interactuar igualmente con eles! O seu servidor é o que ven despois da @ no seu identificador!",
@ -780,6 +780,7 @@
"status.bookmark": "Marcar",
"status.cancel_reblog_private": "Desfacer compartido",
"status.cannot_reblog": "Esta publicación non pode ser promovida",
"status.continued_thread": "Continua co fío",
"status.copy": "Copiar ligazón á publicación",
"status.delete": "Eliminar",
"status.detailed_status": "Vista detallada da conversa",
@ -813,6 +814,7 @@
"status.reblogs.empty": "Aínda ninguén promoveu esta publicación. Cando alguén o faga, amosarase aquí.",
"status.redraft": "Eliminar e reescribir",
"status.remove_bookmark": "Eliminar marcador",
"status.replied_in_thread": "Respondeu nun fío",
"status.replied_to": "Respondeu a {name}",
"status.reply": "Responder",
"status.replyAll": "Responder ao tema",

View File

@ -780,6 +780,7 @@
"status.bookmark": "סימניה",
"status.cancel_reblog_private": "הסרת הדהוד",
"status.cannot_reblog": "לא ניתן להדהד חצרוץ זה",
"status.continued_thread": "שרשור מתמשך",
"status.copy": "העתק/י קישור להודעה זו",
"status.delete": "מחיקה",
"status.detailed_status": "תצוגת שיחה מפורטת",
@ -813,6 +814,7 @@
"status.reblogs.empty": "עוד לא הידהדו את ההודעה הזו. כאשר זה יקרה, ההדהודים יופיעו כאן.",
"status.redraft": "מחיקה ועריכה מחדש",
"status.remove_bookmark": "הסרת סימניה",
"status.replied_in_thread": "תגובה לשרשור",
"status.replied_to": "בתגובה לחשבון {name}",
"status.reply": "תגובה",
"status.replyAll": "תגובה לשרשור",

View File

@ -780,6 +780,7 @@
"status.bookmark": "Könyvjelzőzés",
"status.cancel_reblog_private": "Megtolás visszavonása",
"status.cannot_reblog": "Ezt a bejegyzést nem lehet megtolni",
"status.continued_thread": "Folytatott szál",
"status.copy": "Link másolása bejegyzésbe",
"status.delete": "Törlés",
"status.detailed_status": "Részletes beszélgetési nézet",
@ -813,6 +814,7 @@
"status.reblogs.empty": "Senki sem tolta még meg ezt a bejegyzést. Ha valaki megteszi, itt fog megjelenni.",
"status.redraft": "Törlés és újraírás",
"status.remove_bookmark": "Könyvjelző eltávolítása",
"status.replied_in_thread": "Válaszolva a szálban",
"status.replied_to": "Megválaszolva {name} számára",
"status.reply": "Válasz",
"status.replyAll": "Válasz a beszélgetésre",

View File

@ -770,6 +770,7 @@
"status.bookmark": "Pridėti į žymės",
"status.cancel_reblog_private": "Nebepakelti",
"status.cannot_reblog": "Šis įrašas negali būti pakeltas.",
"status.continued_thread": "Tęsiama gijoje",
"status.copy": "Kopijuoti nuorodą į įrašą",
"status.delete": "Ištrinti",
"status.detailed_status": "Išsami pokalbio peržiūra",
@ -802,6 +803,7 @@
"status.reblogs.empty": "Šio įrašo dar niekas nepakėlė. Kai kas nors tai padarys, jie bus rodomi čia.",
"status.redraft": "Ištrinti ir parengti iš naujo",
"status.remove_bookmark": "Pašalinti žymę",
"status.replied_in_thread": "Atsakyta gijoje",
"status.replied_to": "Atsakyta į {name}",
"status.reply": "Atsakyti",
"status.replyAll": "Atsakyti į giją",

View File

@ -780,6 +780,7 @@
"status.bookmark": "Bladwijzer toevoegen",
"status.cancel_reblog_private": "Niet langer boosten",
"status.cannot_reblog": "Dit bericht kan niet geboost worden",
"status.continued_thread": "Vervolgt het gesprek",
"status.copy": "Link naar bericht kopiëren",
"status.delete": "Verwijderen",
"status.detailed_status": "Uitgebreide gespreksweergave",
@ -813,6 +814,7 @@
"status.reblogs.empty": "Niemand heeft dit bericht nog geboost. Wanneer iemand dit doet, valt dat hier te zien.",
"status.redraft": "Verwijderen en herschrijven",
"status.remove_bookmark": "Bladwijzer verwijderen",
"status.replied_in_thread": "Reageerde in gesprek",
"status.replied_to": "Reageerde op {name}",
"status.reply": "Reageren",
"status.replyAll": "Op iedereen reageren",

View File

@ -780,6 +780,7 @@
"status.bookmark": "Dodaj zakładkę",
"status.cancel_reblog_private": "Cofnij podbicie",
"status.cannot_reblog": "Ten wpis nie może zostać podbity",
"status.continued_thread": "Ciąg dalszy wątku",
"status.copy": "Skopiuj odnośnik do wpisu",
"status.delete": "Usuń",
"status.detailed_status": "Szczegółowy widok konwersacji",
@ -813,6 +814,7 @@
"status.reblogs.empty": "Nikt nie podbił jeszcze tego wpisu. Gdy ktoś to zrobi, pojawi się tutaj.",
"status.redraft": "Usuń i przeredaguj",
"status.remove_bookmark": "Usuń zakładkę",
"status.replied_in_thread": "Odpowiedź w wątku",
"status.replied_to": "Odpowiedź do wpisu użytkownika {name}",
"status.reply": "Odpowiedz",
"status.replyAll": "Odpowiedz na wątek",

View File

@ -278,7 +278,7 @@
"error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a um problema de compatibilidade do navegador, esta página não pôde ser apresentada corretamente.",
"error.unexpected_crash.explanation_addons": "Esta página não pôde ser exibida corretamente. Este erro provavelmente é causado por um complemento do navegador ou ferramentas de tradução automática.",
"error.unexpected_crash.next_steps": "Tente atualizar a página. Se isso não ajudar, pode usar o Mastodon através de um navegador diferente ou uma aplicação nativa.",
"error.unexpected_crash.next_steps_addons": "Tente desabilitá-los e atualizar a página. Se isso não ajudar, você ainda poderá usar o Mastodon por meio de um navegador diferente ou de um aplicativo nativo.",
"error.unexpected_crash.next_steps_addons": "Tente desativá-los e atualizar a página. Se isso não ajudar, poderá ainda ser possível utilizar o Mastodon através de um navegador diferente ou de uma aplicação nativa.",
"errors.unexpected_crash.copy_stacktrace": "Copiar a stacktrace para o clipboard",
"errors.unexpected_crash.report_issue": "Reportar problema",
"explore.search_results": "Resultados da pesquisa",

View File

@ -780,6 +780,7 @@
"status.bookmark": "Yer işareti ekle",
"status.cancel_reblog_private": "Yeniden paylaşımı geri al",
"status.cannot_reblog": "Bu gönderi yeniden paylaşılamaz",
"status.continued_thread": "Devam eden akış",
"status.copy": "Gönderi bağlantısını kopyala",
"status.delete": "Sil",
"status.detailed_status": "Ayrıntılı sohbet görünümü",
@ -813,6 +814,7 @@
"status.reblogs.empty": "Henüz hiç kimse bu gönderiyi yeniden paylaşmadı. Herhangi bir kullanıcı yeniden paylaştığında burada görüntülenecek.",
"status.redraft": "Sil,Düzenle ve Yeniden paylaş",
"status.remove_bookmark": "Yer işaretini kaldır",
"status.replied_in_thread": "Akışta yanıtlandı",
"status.replied_to": "{name} kullanıcısına yanıt verdi",
"status.reply": "Yanıtla",
"status.replyAll": "Konuyu yanıtla",

View File

@ -780,6 +780,7 @@
"status.bookmark": "Додати до закладок",
"status.cancel_reblog_private": "Скасувати поширення",
"status.cannot_reblog": "Цей допис не може бути поширений",
"status.continued_thread": "Continued thread",
"status.copy": "Копіювати посилання на допис",
"status.delete": "Видалити",
"status.detailed_status": "Детальний вигляд бесіди",

View File

@ -95,7 +95,7 @@
"block_modal.they_cant_see_posts": "他们看不到你的嘟文,你也看不到他们的嘟文。",
"block_modal.they_will_know": "他们将能看到他们被屏蔽。",
"block_modal.title": "是否屏蔽该用户?",
"block_modal.you_wont_see_mentions": "你将无法看到提及他们的嘟文。",
"block_modal.you_wont_see_mentions": "你将不会看到提及他们的嘟文。",
"boost_modal.combo": "下次按住 {combo} 即可跳过此提示",
"boost_modal.reblog": "是否转嘟?",
"boost_modal.undo_reblog": "是否取消转嘟?",
@ -780,6 +780,7 @@
"status.bookmark": "添加到书签",
"status.cancel_reblog_private": "取消转贴",
"status.cannot_reblog": "这条嘟文不允许被转嘟",
"status.continued_thread": "继续线程",
"status.copy": "复制嘟文链接",
"status.delete": "删除",
"status.detailed_status": "详细的对话视图",
@ -813,6 +814,7 @@
"status.reblogs.empty": "没有人转嘟过此条嘟文。如果有人转嘟了,就会显示在这里。",
"status.redraft": "删除并重新编辑",
"status.remove_bookmark": "移除书签",
"status.replied_in_thread": "已在线程中回复",
"status.replied_to": "回复给 {name}",
"status.reply": "回复",
"status.replyAll": "回复所有人",

View File

@ -780,6 +780,7 @@
"status.bookmark": "書籤",
"status.cancel_reblog_private": "取消轉嘟",
"status.cannot_reblog": "這則嘟文無法被轉嘟",
"status.continued_thread": "接續討論串",
"status.copy": "複製嘟文連結",
"status.delete": "刪除",
"status.detailed_status": "詳細的對話內容",
@ -813,6 +814,7 @@
"status.reblogs.empty": "還沒有人轉嘟過這則嘟文。當有人轉嘟時,它將於此顯示。",
"status.redraft": "刪除並重新編輯",
"status.remove_bookmark": "移除書籤",
"status.replied_in_thread": "於討論串中回覆",
"status.replied_to": "回覆 {name}",
"status.reply": "回覆",
"status.replyAll": "回覆討論串",

View File

@ -1607,15 +1607,29 @@ body > [data-popper-placement] {
.status__prepend {
padding: 16px;
padding-bottom: 0;
display: inline-flex;
gap: 10px;
display: flex;
align-items: center;
gap: 8px;
font-size: 15px;
line-height: 22px;
font-weight: 500;
color: $dark-text-color;
.status__display-name strong {
color: $dark-text-color;
&__icon {
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 auto;
.icon {
width: 16px;
height: 16px;
}
}
a {
color: inherit;
text-decoration: none;
}
> span {

View File

@ -111,10 +111,12 @@ class Account < ApplicationRecord
validates :display_name, length: { maximum: DISPLAY_NAME_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_display_name? }
validates :note, note_length: { maximum: NOTE_LENGTH_LIMIT }, if: -> { local? && will_save_change_to_note? }
validates :fields, length: { maximum: DEFAULT_FIELDS_SIZE }, if: -> { local? && will_save_change_to_fields? }
validates :uri, absence: true, if: :local?, on: :create
validates :inbox_url, absence: true, if: :local?, on: :create
validates :shared_inbox_url, absence: true, if: :local?, on: :create
validates :followers_url, absence: true, if: :local?, on: :create
with_options on: :create do
validates :uri, absence: true, if: :local?
validates :inbox_url, absence: true, if: :local?
validates :shared_inbox_url, absence: true, if: :local?
validates :followers_url, absence: true, if: :local?
end
normalizes :username, with: ->(username) { username.squish }

View File

@ -45,7 +45,7 @@ class FeaturedTag < ApplicationRecord
end
def decrement(deleted_status_id)
update(statuses_count: [0, statuses_count - 1].max, last_status_at: visible_tagged_account_statuses.where.not(id: deleted_status_id).select(:created_at).first&.created_at)
update(statuses_count: [0, statuses_count - 1].max, last_status_at: visible_tagged_account_statuses.where.not(id: deleted_status_id).pick(:created_at))
end
private
@ -56,7 +56,7 @@ class FeaturedTag < ApplicationRecord
def reset_data
self.statuses_count = visible_tagged_account_statuses.count
self.last_status_at = visible_tagged_account_statuses.select(:created_at).first&.created_at
self.last_status_at = visible_tagged_account_statuses.pick(:created_at)
end
def validate_featured_tags_limit

View File

@ -25,7 +25,7 @@ ca:
admin:
account_actions:
action: Realitza l'acció
already_silenced: Aquest compte ja s'ha silenciat.
already_silenced: Aquest compte ja s'ha limitat.
already_suspended: Aquest compte ja s'ha suspès.
title: Fer l'acció de moderació a %{acct}
account_moderation_notes:
@ -61,6 +61,7 @@ ca:
demote: Degrada
destroyed_msg: Les dades de %{username} son a la cua per a ser esborrades en breu
disable: Inhabilita
disable_sign_in_token_auth: Desactivar l'autenticació de token per correu-e
disable_two_factor_authentication: Desactiva 2FA
disabled: Inhabilitat
display_name: Nom visible
@ -69,6 +70,7 @@ ca:
email: Adreça electrònica
email_status: Estat de l'adreça electrònica
enable: Habilita
enable_sign_in_token_auth: Activar l'autenticació de token per correu-e
enabled: Habilitat
enabled_msg: El compte de %{username} sha descongelat amb èxit
followers: Seguidors
@ -201,8 +203,10 @@ ca:
destroy_user_role: Destrueix Rol
disable_2fa_user: Desactiva 2FA
disable_custom_emoji: Desactiva l'emoji personalitzat
disable_sign_in_token_auth_user: Desactivar l'autenticació de token per correu-e per a l'usuari
disable_user: Deshabilita l'usuari
enable_custom_emoji: Activa l'emoji personalitzat
enable_sign_in_token_auth_user: Activar l'autenticació de token per correu-e per a l'usuari
enable_user: Activa l'usuari
memorialize_account: Memoritza el compte
promote_user: Promou l'usuari
@ -237,17 +241,21 @@ ca:
confirm_user_html: "%{name} ha confirmat l'adreça del correu electrònic de l'usuari %{target}"
create_account_warning_html: "%{name} ha enviat un avís a %{target}"
create_announcement_html: "%{name} ha creat un nou anunci %{target}"
create_canonical_email_block_html: "%{name} ha blocat l'adreça de correu electrònic amb el hash %{target}"
create_custom_emoji_html: "%{name} ha pujat un emoji nou %{target}"
create_domain_allow_html: "%{name} ha permès la federació amb el domini %{target}"
create_domain_block_html: "%{name} ha bloquejat el domini %{target}"
create_email_domain_block_html: "%{name} ha blocat el domini de correu electrònic %{target}"
create_ip_block_html: "%{name} ha creat una regla per a l'IP %{target}"
create_unavailable_domain_html: "%{name} ha aturat el lliurament al domini %{target}"
create_user_role_html: "%{name} ha creat el rol %{target}"
demote_user_html: "%{name} ha degradat l'usuari %{target}"
destroy_announcement_html: "%{name} ha eliminat l'anunci %{target}"
destroy_canonical_email_block_html: "%{name} ha desblocat el correu electrònic amb el hash %{target}"
destroy_custom_emoji_html: "%{name} ha esborrat l'emoji %{target}"
destroy_domain_allow_html: "%{name} no permet la federació amb el domini %{target}"
destroy_domain_block_html: "%{name} ha desbloquejat el domini %{target}"
destroy_email_domain_block_html: "%{name} ha desblocat el domini de correu electrònic %{target}"
destroy_instance_html: "%{name} ha purgat el domini %{target}"
destroy_ip_block_html: "%{name} ha esborrat la regla per a l'IP %{target}"
destroy_status_html: "%{name} ha eliminat el tut de %{target}"
@ -255,8 +263,10 @@ ca:
destroy_user_role_html: "%{name} ha esborrat el rol %{target}"
disable_2fa_user_html: "%{name} ha desactivat el requisit de dos factors per a l'usuari %{target}"
disable_custom_emoji_html: "%{name} ha desactivat l'emoji %{target}"
disable_sign_in_token_auth_user_html: "%{name} ha desactivat l'autenticació de token per correu-e per a %{target}"
disable_user_html: "%{name} ha desactivat l'accés del usuari %{target}"
enable_custom_emoji_html: "%{name} ha activat l'emoji %{target}"
enable_sign_in_token_auth_user_html: "%{name} ha activat l'autenticació de token per correu-e per a %{target}"
enable_user_html: "%{name} ha activat l'accés del usuari %{target}"
memorialize_account_html: "%{name} ha convertit el compte %{target} en una pàgina de memorial"
promote_user_html: "%{name} ha promogut l'usuari %{target}"
@ -264,6 +274,7 @@ ca:
reject_user_html: "%{name} ha rebutjat el registre de %{target}"
remove_avatar_user_html: "%{name} ha eliminat l'avatar de %{target}"
reopen_report_html: "%{name} ha reobert l'informe %{target}"
resend_user_html: "%{name} ha reenviat el correu-e de confirmació per %{target}"
reset_password_user_html: "%{name} ha restablert la contrasenya de l'usuari %{target}"
resolve_report_html: "%{name} ha resolt l'informe %{target}"
sensitive_account_html: "%{name} ha marcat els mèdia de %{target} com a sensibles"
@ -432,6 +443,7 @@ ca:
new:
create: Afegir un domini
resolve: Resol domini
title: Blocar el nou domini de correu-e
not_permitted: No permés
resolved_through_html: Resolt mitjançant %{domain}
export_domain_allows:
@ -1402,6 +1414,7 @@ ca:
authentication_methods:
otp: aplicació d'autenticació de dos factors
password: contrasenya
sign_in_token: codi de seguretat per correu electrònic
webauthn: claus de seguretat
description_html: Si veus activitat que no reconeixes, considera canviar la teva contrasenya i activar l'autenticació de dos factors.
empty: Historial d'autenticació no disponible
@ -1412,6 +1425,16 @@ ca:
unsubscribe:
action: Sí, canceŀla la subscripció
complete: Subscripció cancel·lada
confirmation_html: Segur que vols donar-te de baixa de rebre %{type} de Mastodon a %{domain} a %{email}? Sempre pots subscriure't de nou des de la <a href="%{settings_path}">configuració de les notificacions per correu electrònic</a>.
emails:
notification_emails:
favourite: notificacions dels favorits per correu electrònic
follow: notificacions dels seguiments per correu electrònic
follow_request: correus electrònics de peticions de seguiment
mention: correus electrònics de notificacions de mencions
reblog: correus electrònics de notificacions d'impulsos
resubscribe_html: Si ets dones de baixa per error pots donar-te d'alta des de la <a href="%{settings_path}">configuració de les notificacions per correu electrònic</a>.
success_html: Ja no rebràs %{type} de Mastodon a %{domain} a %{email}.
title: Cancel·la la subscripció
media_attachments:
validations:
@ -1493,6 +1516,8 @@ ca:
update:
subject: "%{name} ha editat una publicació"
notifications:
administration_emails: Notificacions per correu-e de l'administrador
email_events: Esdeveniments per a notificacions de correu electrònic
email_events_hint: 'Selecciona els esdeveniments per als quals vols rebre notificacions:'
number:
human:
@ -1651,6 +1676,7 @@ ca:
import: Importació
import_and_export: Importació i exportació
migrate: Migració del compte
notifications: Notificacions per correu electrònic
preferences: Preferències
profile: Perfil
relationships: Seguits i seguidors
@ -1897,6 +1923,7 @@ ca:
invalid_otp_token: El codi de dos factors no és correcte
otp_lost_help_html: Si has perdut l'accés a tots dos pots contactar per %{email}
rate_limited: Excessius intents d'autenticació, torneu-hi més tard.
seamless_external_login: Has iniciat sessió via un servei extern. Així, els ajustos de contrasenya i correu electrònic no estan disponibles.
signed_in_as: 'Sessió iniciada com a:'
verification:
extra_instructions_html: <strong>Consell:</strong> l'enllaç al vostre lloc web pot ser invisible. La part important és <code>rel="me"</code> que evita que us suplantin la identitat a llocs web amb contingut generat pels usuaris. Fins i tot podeu generar una etiqueta <code>link</code> a la capçalera de la pàgina en comptes d'una <code>a</code>, però el codi HTML ha de ser accessible sense requerir executar JavaScript.

View File

@ -33,7 +33,6 @@ cy:
admin:
account_actions:
action: Cyflawni gweithred
already_silenced: Mae'r cyfrif hwn eisoes wedi'i dewi.
already_suspended: Mae'r cyfrif hwn eisoes wedi'i atal.
title: Cyflawni gweithred cymedroli ar %{acct}
account_moderation_notes:

View File

@ -25,7 +25,7 @@ da:
admin:
account_actions:
action: Udfør handling
already_silenced: Denne konto er allerede gjort tavs.
already_silenced: Denne konto er allerede blevet begrænset.
already_suspended: Denne konto er allerede suspenderet.
title: Udfør moderatorhandling på %{acct}
account_moderation_notes:

View File

@ -25,7 +25,6 @@ de:
admin:
account_actions:
action: Aktion ausführen
already_silenced: Dieses Konto wurde bereits stummgeschaltet.
already_suspended: Dieses Konto wurde bereits gesperrt.
title: "@%{acct} moderieren"
account_moderation_notes:

View File

@ -25,7 +25,7 @@ en:
admin:
account_actions:
action: Perform action
already_silenced: This account has already been silenced.
already_silenced: This account has already been limited.
already_suspended: This account has already been suspended.
title: Perform moderation action on %{acct}
account_moderation_notes:

View File

@ -25,7 +25,7 @@ es-AR:
admin:
account_actions:
action: Ejecutar acción
already_silenced: Esta cuenta ya ha sido limitada.
already_silenced: Esta cuenta ya fue limitada.
already_suspended: Esta cuenta ya ha sido suspendida.
title: Ejecutar acción de moderación en %{acct}
account_moderation_notes:

View File

@ -25,7 +25,6 @@ et:
admin:
account_actions:
action: Täida tegevus
already_silenced: See konto on juba vaigistatud.
already_suspended: See konto on juba peatatud.
title: Rakenda moderaatori tegevus kasutajale %{acct}
account_moderation_notes:

View File

@ -981,7 +981,7 @@ fi:
used_by_over_week:
one: Käyttänyt yksi käyttäjä viimeisen viikon aikana
other: Käyttänyt %{count} käyttäjää viimeisen viikon aikana
title: Suositukset ja suuntaukset
title: Suositukset ja trendit
trending: Trendaus
warning_presets:
add_new: Lisää uusi

View File

@ -25,7 +25,6 @@ fo:
admin:
account_actions:
action: Frem atgerð
already_silenced: Hendan kontan er longu gjørd kvirr.
already_suspended: Hendan kontan er longu ógildað.
title: Frem umsjónaratgerð á %{acct}
account_moderation_notes:

View File

@ -25,7 +25,6 @@ fr-CA:
admin:
account_actions:
action: Effectuer l'action
already_silenced: Ce compte est déjà limité.
already_suspended: Ce compte est déjà suspendu.
title: Effectuer une action de modération sur %{acct}
account_moderation_notes:

View File

@ -25,7 +25,6 @@ fr:
admin:
account_actions:
action: Effectuer l'action
already_silenced: Ce compte est déjà limité.
already_suspended: Ce compte est déjà suspendu.
title: Effectuer une action de modération sur %{acct}
account_moderation_notes:

View File

@ -31,7 +31,6 @@ ga:
admin:
account_actions:
action: Déan gníomh
already_silenced: Tá an cuntas seo ina thost cheana féin.
already_suspended: Tá an cuntas seo curtha ar fionraí cheana féin.
title: Dean gníomh modhnóireachta ar %{acct}
account_moderation_notes:

View File

@ -29,7 +29,6 @@ gd:
admin:
account_actions:
action: Gabh an gnìomh
already_silenced: Chaidh an cunntas seo a chuingeachadh mu thràth.
already_suspended: Chaidh an cunntas seo a chur à rèim mu thràth.
title: Gabh gnìomh maorsainneachd air %{acct}
account_moderation_notes:

View File

@ -25,7 +25,7 @@ gl:
admin:
account_actions:
action: Executar acción
already_silenced: Esta conta xa está silenciada.
already_silenced: A conta xa está limitada
already_suspended: Esta conta xa está suspendida.
title: Executar acción de moderación a %{acct}
account_moderation_notes:
@ -1854,7 +1854,7 @@ gl:
failed_2fa:
details: 'Detalles do intento de acceso:'
explanation: Alguén intentou acceder á túa conta mais fíxoo cun segundo factor de autenticación non válido.
further_actions_html: Se non foches ti, recomendámosche %{action} inmediatamente xa que a conta podería estar en risco.
further_actions_html: Se non foches ti, recomendámosche %{action} inmediatamente porque a conta podería estar en risco.
subject: Fallo co segundo factor de autenticación
title: Fallou o segundo factor de autenticación
suspicious_sign_in:

View File

@ -29,6 +29,7 @@ he:
admin:
account_actions:
action: בצע/י פעולה
already_suspended: חשבון זה הושעה.
title: ביצוע פעולות הנהלה על %{acct}
account_moderation_notes:
create: ליצור
@ -50,6 +51,7 @@ he:
title: שינוי כתובת דוא"ל עבור המשתמש.ת %{username}
change_role:
changed_msg: התפקיד שונה בהצלחה!
edit_roles: נהל תפקידי משתמש
label: שינוי תפקיד
no_role: ללא תפקיד
title: שינוי תפקיד עבור %{username}
@ -626,6 +628,7 @@ he:
suspend_description_html: חשבון זה על כל תכניו יחסמו וברבות הימים ימחקו, כל פעילות מולו לא תתאפשר. הפעולה ניתנת לביטול תוך 30 ימים, והיא תסגור כל דיווח התלוי ועומד נגד החשבון.
actions_description_html: בחר/י איזו פעולה לבצע על מנת לפתור את הדו"ח. אם תופעל פעולת ענישה כנגד החשבון המדווח, הודעת דוא"ל תשלח אליהם, אלא אם נבחרה קטגוריית ה<strong>ספאם</strong>.
actions_description_remote_html: בחרו איזו פעולה לבצע כדי לפתור את הדיווח שהוגש. פעולה זו תשפיע רק על התקשורת מול השרת <strong>שלך</strong> עם החשבון המרוחק ותוכנו.
actions_no_posts: דווח זה לא כולל הודעות למחיקה
add_to_report: הוספת פרטים לדיווח
already_suspended_badges:
local: כבר הודח בשרת זה

View File

@ -25,7 +25,6 @@ hu:
admin:
account_actions:
action: Művelet végrehajtása
already_silenced: Ezt a fiókot már elnémították.
already_suspended: Ezt a fiókot már felfüggesztették.
title: 'Moderálási művelet végrehajtása ezen: %{acct}'
account_moderation_notes:

View File

@ -25,7 +25,6 @@ ia:
admin:
account_actions:
action: Exequer action
already_silenced: Iste conto jam ha essite silentiate.
already_suspended: Iste conto jam ha essite suspendite.
title: Exequer action de moderation sur %{acct}
account_moderation_notes:

View File

@ -25,7 +25,6 @@ is:
admin:
account_actions:
action: Framkvæma aðgerð
already_silenced: Þessi aðgangur hefur þegar verið þaggaður.
already_suspended: Þessi aðgangur hefur þegar verið settur í frysti.
title: Framkvæma umsjónaraðgerð á %{acct}
account_moderation_notes:

View File

@ -25,7 +25,7 @@ it:
admin:
account_actions:
action: Esegui azione
already_silenced: Questo account è già stato silenziato.
already_silenced: Questo account è già stato limitato.
already_suspended: Questo account è già stato sospeso.
title: Esegui l'azione di moderazione su %{acct}
account_moderation_notes:

View File

@ -23,7 +23,6 @@ ko:
admin:
account_actions:
action: 조치 취하기
already_silenced: 이 계정은 이미 침묵되었습니다.
already_suspended: 이 계정은 이미 정지되었습니다.
title: "%{acct} 계정에 중재 취하기"
account_moderation_notes:

View File

@ -29,6 +29,7 @@ lt:
admin:
account_actions:
action: Atlikti veiksmą
already_suspended: Ši paskyra jau sustabdyta.
title: Atlikti prižiūrėjimo veiksmą %{acct}
account_moderation_notes:
create: Palikti pastabą
@ -49,6 +50,7 @@ lt:
title: Keisti el. paštą %{username}
change_role:
changed_msg: Vaidmuo sėkmingai pakeistas.
edit_roles: Tvarkyti naudotojų vaidmenis
label: Keisti vaidmenį
no_role: Jokios vaidmenį
title: Keisti vaidmenį %{username}
@ -485,6 +487,7 @@ lt:
destroyed_msg: Skundo žinutė sekmingai ištrinta!
reports:
action_taken_by: Veiksmo ėmėsi
actions_no_posts: Ši ataskaita neturi jokių susijusių įrašų ištrinti
already_suspended_badges:
local: Jau sustabdytas šiame serveryje
remote: Jau sustabdytas jų serveryje

View File

@ -25,6 +25,7 @@ nn:
admin:
account_actions:
action: Utfør
already_silenced: Denne kontoen har allereie vorte avgrensa.
title: Utfør moderatorhandling på %{acct}
account_moderation_notes:
create: Legg igjen merknad

View File

@ -29,7 +29,6 @@ pl:
admin:
account_actions:
action: Wykonaj działanie
already_silenced: To konto zostało już wyciszone.
already_suspended: To konto zostało już zawieszone.
title: Wykonaj działanie moderacyjne na %{acct}
account_moderation_notes:

View File

@ -4,8 +4,8 @@ pt-PT:
about_mastodon_html: 'A rede social do futuro: sem publicidade, e sem vigilância empresarial; desenho ético, e descentralizado! Tome posse dos seus dados com o Mastodon!'
contact_missing: Por definir
contact_unavailable: n.d.
hosted_on: Mastodon em %{domain}
title: Acerca de
hosted_on: Mastodon alojado em %{domain}
title: Sobre
accounts:
follow: Seguir
followers:
@ -25,15 +25,17 @@ pt-PT:
admin:
account_actions:
action: Executar acção
already_suspended: Esta conta já foi suspensa.
title: Executar ação de moderação em %{acct}
account_moderation_notes:
create: Deixar uma nota
created_msg: Nota de moderação criada com sucesso!
destroyed_msg: Nota de moderação destruída!
accounts:
add_email_domain_block: Bloquear domínio de e-mail
approve: Aprovar
approved_msg: Inscrição de %{username} aprovada com sucesso
are_you_sure: Tens a certeza?
are_you_sure: Tem a certeza?
avatar: Imagem de perfil
by_domain: Domínio
change_email:
@ -45,18 +47,20 @@ pt-PT:
title: Alterar e-mail para %{username}
change_role:
changed_msg: Função alterada com sucesso!
edit_roles: Gerir funções de utilizador
label: Alterar função
no_role: Nenhuma função
title: Alterar a função de %{username}
confirm: Confirmar
confirmed: Confirmado
confirming: A confirmar
custom: Personalizar
custom: Personalizado
delete: Eliminar dados
deleted: Eliminada
demote: Despromoveu
demote: Despromovida
destroyed_msg: Os dados de %{username} estão agora em fila de espera para serem eliminados de imediato
disable: Congelar
disable_sign_in_token_auth: Desativar token de autenticação por e-mail
disable_two_factor_authentication: Desativar autenticação por dois fatores (2FA)
disabled: Congelada
display_name: Nome a mostrar
@ -65,6 +69,7 @@ pt-PT:
email: E-mail
email_status: Estado do e-mail
enable: Descongelar
enable_sign_in_token_auth: Ativar token de autenticação por e-mail
enabled: Ativado
enabled_msg: Descongelou a conta %{username}
followers: Seguidores
@ -100,8 +105,8 @@ pt-PT:
no_limits_imposed: Sem limites impostos
no_role_assigned: Nenhuma função atribuída
not_subscribed: Não inscrito
pending: Pendente de revisão
perform_full_suspension: Fazer suspensão completa
pending: Revisão pendente
perform_full_suspension: Suspender
previous_strikes: Reprimendas anteriores
previous_strikes_description_html:
one: Esta conta tem <strong>1</strong> reprimenda.
@ -109,7 +114,7 @@ pt-PT:
promote: Promover
protocol: Protocolo
public: Público
push_subscription_expires: A Inscrição PuSH expira
push_subscription_expires: A inscrição PuSH expira
redownload: Atualizar perfil
redownloaded_msg: Perfil de %{username} atualizado a partir da origem com sucesso
reject: Rejeitar
@ -122,13 +127,14 @@ pt-PT:
removed_header_msg: Imagem de cabeçalho de %{username} removida
resend_confirmation:
already_confirmed: Este utilizador já está confirmado
send: Reenviar link de confirmação
success: Link de confirmação enviado com sucesso!
reset: Reiniciar
send: Reenviar hiperligação de confirmação
success: Hiperligação de confirmação enviada com sucesso!
reset: Repor
reset_password: Criar nova palavra-passe
resubscribe: Reinscrever
role: Função
search: Pesquisar
search_same_email_domain: Outros utilizadores com o mesmo domínio de e-mail
search_same_ip: Outros utilizadores com o mesmo IP
security: Segurança
security_measures:
@ -136,7 +142,7 @@ pt-PT:
password_and_2fa: Palavra-passe e 2FA
sensitive: Marcar como problemático
sensitized: Marcada como problemática
shared_inbox_url: URL da caixa de entrada compartilhada
shared_inbox_url: URL da caixa de entrada partilhada
show:
created_reports: Denúncias realizadas
targeted_reports: Denunciada por outros
@ -151,101 +157,116 @@ pt-PT:
suspension_reversible_hint_html: A conta foi suspensa e os dados serão totalmente eliminados em %{date}. Até lá, a conta poderá ser recuperada sem quaisquer efeitos negativos. Se deseja eliminar todos os dados desta conta imediatamente, pode fazê-lo em baixo.
title: Contas
unblock_email: Desbloquear endereço de e-mail
unblocked_email_msg: Endereço de e-mail de %{username} desbloqueado
unblocked_email_msg: Endereço de e-mail de %{username} desbloqueado com sucesso
unconfirmed_email: E-mail por confirmar
undo_sensitized: Desmarcar como problemático
undo_silenced: Desfazer silenciar
undo_suspension: Desfazer supensão
unsilenced_msg: Removeu as limitações da conta %{username}
unsilenced_msg: Limitações da conta %{username} removidas com sucesso
unsubscribe: Cancelar inscrição
unsuspended_msg: Removeu a suspensão da conta %{username}
username: Nome de utilizador
view_domain: Ver resumo do domínio
warn: Advertir
web: Teia
web: Web
whitelisted: Permitido para a federação
action_logs:
action_types:
approve_appeal: Aprovar recurso
approve_user: Aprovar utilizador
assigned_to_self_report: Atribuir Denúncia
change_role_user: Alterar Função do Utilizador
confirm_user: Confirmar Utilizador
create_account_warning: Criar Aviso
assigned_to_self_report: Atribuir denúncia
change_email_user: Alterar e-mail do utilizador
change_role_user: Alterar função do utilizador
confirm_user: Confirmar utilizador
create_account_warning: Criar aviso
create_announcement: Criar comunicado
create_custom_emoji: Criar Emoji Personalizado
create_domain_allow: Criar Permissão de Domínio
create_domain_block: Criar Bloqueio de Domínio
create_canonical_email_block: Criar bloqueio de e-mail
create_custom_emoji: Criar emoji personalizado
create_domain_allow: Criar permissão de domínio
create_domain_block: Criar bloqueio de domínio
create_email_domain_block: Criar bloqueio de domínio de e-mail
create_ip_block: Criar regra de IP
create_unavailable_domain: Criar Domínio Indisponível
create_user_role: Criar Função
demote_user: Despromover Utilizador
destroy_announcement: Apagar comunicado
destroy_custom_emoji: Eliminar Emoji Personalizado
destroy_domain_allow: Eliminar Permissão de Domínio
destroy_domain_block: Eliminar Bloqueio de Domínio
destroy_instance: Purgar Domínio
create_unavailable_domain: Criar domínio indisponível
create_user_role: Criar função
demote_user: Despromover utilizador
destroy_announcement: Eliminar comunicado
destroy_canonical_email_block: Eliminar bloqueio de e-mail
destroy_custom_emoji: Eliminar emoji personalizado
destroy_domain_allow: Eliminar permissão de domínio
destroy_domain_block: Eliminar bloqueio de domínio
destroy_email_domain_block: Eliminar bloqueio de domínio de e-mail
destroy_instance: Purgar domínio
destroy_ip_block: Eliminar regra de IP
destroy_status: Eliminar Publicação
destroy_unavailable_domain: Eliminar Domínio Indisponível
destroy_user_role: Eliminar Função
destroy_status: Eliminar publicação
destroy_unavailable_domain: Eliminar domínio indisponível
destroy_user_role: Eliminar função
disable_2fa_user: Desativar 2FA
disable_custom_emoji: Desativar Emoji Personalizado
disable_user: Desativar Utilizador
enable_custom_emoji: Ativar Emoji Personalizado
enable_user: Ativar Utilizador
memorialize_account: Tornar conta num memorial
promote_user: Promover Utilizador
reject_appeal: Rejeitar Recurso
reject_user: Rejeitar Utilizador
remove_avatar_user: Remover Imagem de Perfil
reopen_report: Reabrir Denúncia
resend_user: Reenviar E-mail de Confirmação
reset_password_user: Repor Password
resolve_report: Resolver Denúncia
disable_custom_emoji: Desativar emoji personalizado
disable_sign_in_token_auth_user: Desativar token de autenticação por e-mail para o utilizador
disable_user: Desativar utilizador
enable_custom_emoji: Ativar emoji personalizado
enable_sign_in_token_auth_user: Ativar token de autenticação por e-mail para o utilizador
enable_user: Ativar utilizador
memorialize_account: Transformar conta num memorial
promote_user: Promover utilizador
reject_appeal: Rejeitar recurso
reject_user: Rejeitar utilizador
remove_avatar_user: Remover imagem de perfil
reopen_report: Reabrir denúncia
resend_user: Reenviar e-mail de confirmação
reset_password_user: Repor palavra-passe
resolve_report: Resolver denúncia
sensitive_account: Marcar a media na sua conta como problemática
silence_account: Limitar conta
suspend_account: Suspender conta
unassigned_report: Desatribuir Denúncia
unassigned_report: Anular atribuição desta denúncia
unblock_email_account: Desbloquear endereço de e-mail
unsensitive_account: Desmarcar a conta como problemática
unsilence_account: Deixar de Silenciar Conta
unsuspend_account: Retirar Suspensão à Conta
unsilence_account: Deixar de silenciar conta
unsuspend_account: Retirar suspensão da conta
update_announcement: Atualizar comunicado
update_custom_emoji: Atualizar Emoji Personalizado
update_domain_block: Atualizar Bloqueio de Domínio
update_custom_emoji: Atualizar emoji personalizado
update_domain_block: Atualizar bloqueio de domínio
update_ip_block: Atualizar regra de IP
update_report: Atualizar Relatório
update_status: Atualizar Estado
update_user_role: Atualizar Função
update_report: Atualizar denúncia
update_status: Atualizar publicação
update_user_role: Atualizar função
actions:
approve_appeal_html: "%{name} aprovou recurso da decisão de moderação de %{target}"
approve_user_html: "%{name} aprovou a inscrição de %{target}"
assigned_to_self_report_html: "%{name} atribuiu a denúncia %{target} a si próprio"
change_email_user_html: "%{name} alterou o endereço de e-mail do utilizador %{target}"
change_role_user_html: "%{name} alterou a função de %{target}"
confirm_user_html: "%{name} confirmou o endereço de e-mail do utilizador %{target}"
create_account_warning_html: "%{name} enviou um aviso para %{target}"
create_announcement_html: "%{name} criou o novo anúncio %{target}"
create_custom_emoji_html: "%{name} carregou o novo emoji %{target}"
create_canonical_email_block_html: "%{name} bloqueou o e-mail com a hash %{target}"
create_custom_emoji_html: "%{name} enviou o novo emoji %{target}"
create_domain_allow_html: "%{name} permitiu a federação com o domínio %{target}"
create_domain_block_html: "%{name} bloqueou o domínio %{target}"
create_ip_block_html: "%{name} criou regra para o IP %{target}"
create_unavailable_domain_html: "%{name} parou a entrega ao domínio %{target}"
create_email_domain_block_html: "%{name} bloqueou o domínio de e-mail %{target}"
create_ip_block_html: "%{name} criou uma regra para o IP %{target}"
create_unavailable_domain_html: "%{name} parou as entregas ao domínio %{target}"
create_user_role_html: "%{name} criou a função %{target}"
demote_user_html: "%{name} despromoveu o utilizador %{target}"
destroy_announcement_html: "%{name} eliminou o anúncio %{target}"
destroy_canonical_email_block_html: "%{name} desbloqueou o e-mail com a hash %{target}"
destroy_custom_emoji_html: "%{name} eliminou o emoji %{target}"
destroy_domain_allow_html: "%{name} desabilitou a federação com o domínio %{target}"
destroy_domain_allow_html: "%{name} bloqueou a federação com o domínio %{target}"
destroy_domain_block_html: "%{name} desbloqueou o domínio %{target}"
destroy_email_domain_block_html: "%{name} desbloqueou o domínio de e-mail %{target}"
destroy_instance_html: "%{name} purgou o domínio %{target}"
destroy_ip_block_html: "%{name} eliminou regra para o IP %{target}"
destroy_ip_block_html: "%{name} eliminou a regra para o IP %{target}"
destroy_status_html: "%{name} removeu a publicação de %{target}"
destroy_unavailable_domain_html: "%{name} retomou a entrega ao domínio %{target}"
destroy_unavailable_domain_html: "%{name} retomou as entregas ao domínio %{target}"
destroy_user_role_html: "%{name} eliminou a função %{target}"
disable_2fa_user_html: "%{name} desativou o requerimento de autenticação em dois passos para o utilizador %{target}"
disable_custom_emoji_html: "%{name} desabilitou o emoji %{target}"
disable_user_html: "%{name} desativou o acesso para o utilizador %{target}"
disable_custom_emoji_html: "%{name} desativou o emoji %{target}"
disable_sign_in_token_auth_user_html: "%{name} desativou o token de autenticação por e-mail para %{target}"
disable_user_html: "%{name} desativou o início de sessão para o utilizador %{target}"
enable_custom_emoji_html: "%{name} ativou o emoji %{target}"
enable_user_html: "%{name} ativou o acesso para o utilizador %{target}"
enable_sign_in_token_auth_user_html: "%{name} ativou o token de autenticação por e-mail para %{target}"
enable_user_html: "%{name} ativou o início de sessão para o utilizador %{target}"
memorialize_account_html: "%{name} transformou a conta de %{target} em um memorial"
promote_user_html: "%{name} promoveu o utilizador %{target}"
reject_appeal_html: "%{name} rejeitou recurso da decisão de moderação de %{target}"
@ -352,7 +373,7 @@ pt-PT:
title: Painel de controlo
top_languages: Principais idiomas ativos
top_servers: Servidores mais ativos
website: Página na teia
website: Website
disputes:
appeals:
empty: Nenhum recurso encontrado.
@ -669,39 +690,39 @@ pt-PT:
privileges:
administrator: Administrador
administrator_description: Utilizadores com esta permissão irão contornar todas as permissões
delete_user_data: Eliminar Dados de Utilizador
delete_user_data: Eliminar dados de utilizador
delete_user_data_description: Permite que os utilizadores eliminem os dados doutros utilizadores sem tempo de espera
invite_users: Convidar Utilizadores
invite_users: Convidar utilizadores
invite_users_description: Permite aos utilizadores convidar pessoas novas para o servidor
manage_announcements: Gerir comunicados
manage_announcements_description: Permite aos utilizadores gerirem os comunicados no servidor
manage_appeals: Gerir apelos
manage_appeals_description: Permite aos utilizadores rever recursos de moderação
manage_blocks: Gerir Bloqueios
manage_custom_emojis: Gerir Emojis Personalizados
manage_blocks: Gerir bloqueios
manage_custom_emojis: Gerir emojis personalizados
manage_custom_emojis_description: Permite aos utilizadores gerirem os emojis personalizados do servidor
manage_federation: Gerir Federação
manage_federation: Gerir federação
manage_federation_description: Permite aos utilizadores bloquear ou permitir federação com outros domínios e controlar a entregabilidade
manage_invites: Gerir Convites
manage_invites: Gerir convites
manage_invites_description: Permite aos utilizadores pesquisarem e desativarem ligações de convite
manage_reports: Gerir Relatórios
manage_reports_description: Permite aos utilizadores rever relatórios e executar ações de moderação contra eles
manage_roles: Gerir Funções
manage_reports: Gerir denúncias
manage_reports_description: Permite aos utilizadores rever denúncias e executar ações de moderação contra eles
manage_roles: Gerir funções
manage_roles_description: Permite aos utilizadores a gestão e atribuição de funções abaixo dos seus
manage_rules: Gerir Regras
manage_rules: Gerir regras
manage_rules_description: Permite aos utilizadores alterar as regras do servidor
manage_settings: Gerir Configurações
manage_settings_description: Permite aos utilizadores alterar as configurações do sítio na teia
manage_taxonomies: Gerir Taxonomias
manage_settings: Gerir configurações
manage_settings_description: Permite aos utilizadores alterar as configurações do site
manage_taxonomies: Gerir taxonomias
manage_taxonomies_description: Permite aos utilizadores rever o conteúdo em tendência e atualizar as configurações de hashtag
manage_user_access: Gerir Acesso de Utilizador
manage_users: Gerir Utilizadores
manage_user_access: Gerir acesso de utilizador
manage_users: Gerir utilizadores
manage_users_description: Permite aos utilizadores ver os detalhes de outros utilizadores e executar ações de moderação contra eles
manage_webhooks: Gerir Webhooks
manage_webhooks: Gerir webhooks
manage_webhooks_description: Permite aos utilizadores configurar webhooks para eventos administrativos
view_audit_log: Ver Registo de Auditoria
view_audit_log: Ver registo de auditoria
view_audit_log_description: Permite aos utilizadores ver um histórico de ações administrativas no servidor
view_dashboard: Ver Painel de Controlo
view_dashboard: Ver painel de controlo
view_dashboard_description: Permite aos utilizadores acederem ao painel de controlo e a várias estatísticas
view_devops: DevOps
view_devops_description: Permite aos utilizadores aceder aos painéis de controlo do Sidekiq e pgHero
@ -723,14 +744,14 @@ pt-PT:
preamble: Personalize a interface web do Mastodon.
title: Aspeto
branding:
preamble: A marca do seu servidor diferencia-a doutros servidores na rede. Essa informação pode ser exibida em vários contexos, como a interface na teia do Mastodon, aplicações nativas, visualizações de hiperligações noutros sites, em aplicações de mensagens, etc. Por esta razão, é melhor manter esta informação clara, curta e concisa.
preamble: A marca do seu servidor diferencia-a de outros servidores na rede. Essa informação pode ser mostrada em vários ambientes, como a interface web do Mastodon, aplicações nativas, visualizações de hiperligações em outros sites e dentro de aplicações de mensagens, etc. Por esta razão, é melhor manter esta informação clara, curta e concisa.
title: Marca
captcha_enabled:
desc_html: Isto depende de scripts externos da hCaptcha, o que pode ser uma preocupação de segurança e privacidade. Além disso, <strong>isto pode tornar o processo de registo menos acessível para algumas pessoas (especialmente as com limitações físicas)</strong>. Por isso, considere medidas alternativas tais como registo mediante aprovação ou sob convite.
title: Requerer que novos utilizadores resolvam um CAPTCHA para confirmar a sua conta
content_retention:
danger_zone: Zona de perigo
preamble: Controle como o conteúdo gerado pelos utilizadores é armazenado no Mastodon.
preamble: Controle a forma como o conteúdo gerado pelo utilizador é armazenado no Mastodon.
title: Retenção de conteúdo
default_noindex:
desc_html: Afeta todos os utilizadores que não alteraram esta configuração
@ -1198,7 +1219,7 @@ pt-PT:
content: Desculpe, mas algo correu mal da nossa parte.
title: Esta página não está correta
'503': A página não pôde ser apresentada devido a uma falha temporária do servidor.
noscript_html: Para usar a aplicação da teia do Mastodon, por favor active o JavaScript. Em alternativa, experimenta uma das <a href="%{apps_path}">aplicações nativas</a> do Mastodon para a sua plataforma.
noscript_html: Para usar a aplicação web do Mastodon, ative o JavaScript. Alternativamente, experimente uma das <a href="%{apps_path}">aplicações nativas</a> para o Mastodon na sua plataforma.
existing_username_validator:
not_found: não foi possível encontrar um utilizador local com esse nome
not_found_multiple: não foi possível encontrar %{usernames}
@ -1236,7 +1257,7 @@ pt-PT:
statuses_hint_html: Este filtro aplica-se a publicações individuais selecionadas independentemente de estas corresponderem às palavras-chave abaixo. <a href="%{path}">Reveja ou remova publicações do filtro</a>.
title: Editar filtros
errors:
deprecated_api_multiple_keywords: Estes parâmetros não podem ser alterados a partir desta aplicação porque se aplicam a mais que um filtro de palavra-chave. Use uma aplicação mais recente ou a interface na teia.
deprecated_api_multiple_keywords: Estes parâmetros não podem ser alterados a partir desta aplicação porque se aplicam a mais de um filtro de palavra-chave. Use uma aplicação mais recente ou a interface web.
invalid_context: Inválido ou nenhum contexto fornecido
index:
contexts: Filtros em %{contexts}
@ -1664,7 +1685,7 @@ pt-PT:
edited_at_html: Editado em %{date}
errors:
in_reply_not_found: A publicação a que está a tentar responder parece não existir.
open_in_web: Abrir na Teia
open_in_web: Abrir na web
over_character_limit: limite de caracter excedeu %{max}
pin_errors:
direct: Publicações visíveis apenas para utilizadores mencionados não podem ser afixadas
@ -1826,7 +1847,7 @@ pt-PT:
welcome:
apps_android_action: Baixe no Google Play
apps_ios_action: Baixar na App Store
apps_step: Baixe nossos aplicativos oficiais.
apps_step: Descarregue as nossas aplicações oficiais.
apps_title: Apps Mastodon
checklist_subtitle: 'Vamos começar nesta nova fronteira social:'
checklist_title: Checklist de Boas-vindas
@ -1835,11 +1856,11 @@ pt-PT:
edit_profile_title: Personalize seu perfil
explanation: Aqui estão algumas dicas para começar
feature_action: Mais informações
feature_audience: Mastodon oferece uma possibilidade única de gerenciar seu público sem intermediários. O Mastodon implantado em sua própria infraestrutura permite que você siga e seja seguido de qualquer outro servidor Mastodon online e não esteja sob o controle de ninguém além do seu.
feature_audience: O Mastodon oferece-lhe uma possibilidade única de gerir a sua audiência sem intermediários. O Mastodon implantado na sua própria infraestrutura permite-lhe seguir e ser seguido a partir de qualquer outro servidor Mastodon online e não está sob o controlo de ninguém a não ser o seu.
feature_audience_title: Construa seu público em confiança
feature_control: Você sabe melhor o que deseja ver no feed da sua casa. Sem algoritmos ou anúncios para desperdiçar seu tempo. Siga qualquer pessoa em qualquer servidor Mastodon a partir de uma única conta e receba suas postagens em ordem cronológica, deixando seu canto da internet um pouco mais parecido com você.
feature_control_title: Fique no controle da sua própria linha do tempo
feature_creativity: Mastodon suporta postagens de áudio, vídeo e imagens, descrições de acessibilidade, enquetes, avisos de conteúdo, avatares animados, emojis personalizados, controle de corte de miniaturas e muito mais, para ajudá-lo a se expressar online. Esteja você publicando sua arte, sua música ou seu podcast, o Mastodon está lá para você.
feature_control: Você sabe melhor o que quer ver no seu feed. Não há algoritmos ou anúncios que o façam perder tempo. Siga qualquer pessoa em qualquer servidor Mastodon a partir de uma única conta e receba as suas mensagens por ordem cronológica e torne o seu canto da Internet um pouco mais parecido consigo.
feature_control_title: Mantenha o controlo da sua própria cronologia
feature_creativity: O Mastodon suporta publicações de áudio, vídeo e imagens, descrições de acessibilidade, sondagens, avisos de conteúdo, avatares animados, emojis personalizados, controlo de corte de miniaturas e muito mais, para o ajudar a expressar-se online. Quer esteja a publicar a sua arte, a sua música ou o seu podcast, o Mastodon está lá para si.
feature_creativity_title: Criatividade inigualável
feature_moderation: Mastodon coloca a tomada de decisões de volta em suas mãos. Cada servidor cria as suas próprias regras e regulamentos, que são aplicados localmente e não de cima para baixo como as redes sociais corporativas, tornando-o mais flexível na resposta às necessidades de diferentes grupos de pessoas. Junte-se a um servidor com as regras com as quais você concorda ou hospede as suas próprias.
feature_moderation_title: Moderando como deve ser
@ -1856,7 +1877,7 @@ pt-PT:
hashtags_title: Etiquetas em tendência
hashtags_view_more: Ver mais etiquetas em tendência
post_action: Compor
post_step: Diga olá para o mundo com texto, fotos, vídeos ou enquetes.
post_step: Diga olá para o mundo com texto, fotos, vídeos ou sondagens.
post_title: Faça a sua primeira publicação
share_action: Compartilhar
share_step: Diga aos seus amigos como te encontrar no Mastodon.

View File

@ -130,6 +130,7 @@ he:
name: ניתן רק להחליף בין אותיות קטנות וגדולות, למשל כדי לשפר את הקריאות
user:
chosen_languages: אם פעיל, רק הודעות בשפות הנבחרות יוצגו לפידים הפומביים
role: התפקיד שולט על אילו הרשאות יש למשתמש.
user_role:
color: צבע לתפקיד בממשק המשתמש, כ RGB בפורמט הקסדצימלי
highlighted: מאפשר נראות ציבורית של התפקיד

View File

@ -101,6 +101,7 @@ lt:
show_application: Neatsižvelgiant į tai, visada galėsi matyti, kuri programėlė paskelbė tavo įrašą.
user:
chosen_languages: Kai pažymėta, viešose laiko skalėse bus rodomi tik įrašai pasirinktomis kalbomis.
role: Vaidmuo valdo, kokius leidimus naudotojas turi.
labels:
account:
discoverable: Rekomenduoti profilį ir įrašus į atradimo algoritmus

View File

@ -130,6 +130,7 @@ pl:
name: Możesz zmieniać tylko wielkość liter, np. aby były bardziej widoczne
user:
chosen_languages: Jeżeli zaznaczone, tylko wpisy w wybranych językach będą wyświetlane na publicznych osiach czasu
role: Rola kontroluje uprawnienia użytkownika.
user_role:
color: Kolor używany dla roli w całym interfejsie użytkownika, wyrażony jako RGB w formacie szesnastkowym
highlighted: To sprawia, że rola jest widoczna publicznie

View File

@ -77,7 +77,7 @@ pt-PT:
warn: Ocultar o conteúdo filtrado por trás de um aviso mencionando o título do filtro
form_admin_settings:
activity_api_enabled: Contagem, em blocos semanais, de publicações locais, utilizadores ativos e novos registos
app_icon: WEBP, PNG, GIF ou JPG. Substitui o ícone padrão do aplicativo em dispositivos móveis por um ícone personalizado.
app_icon: WEBP, PNG, GIF ou JPG. Substitui o ícone padrão da aplicação em dispositivos móveis por um ícone personalizado.
backups_retention_period: Os utilizadores têm a possibilidade de gerar arquivos das suas mensagens para descarregar mais tarde. Quando definido para um valor positivo, estes arquivos serão automaticamente eliminados do seu armazenamento após o número de dias especificado.
bootstrap_timeline_accounts: Estas contas serão destacadas no topo das recomendações aos novos utilizadores.
closed_registrations_message: Apresentado quando as inscrições estiverem encerradas
@ -130,12 +130,13 @@ pt-PT:
name: Só pode alterar a capitalização das letras, por exemplo, para torná-las mais legíveis
user:
chosen_languages: Quando selecionado, só serão mostradas nas cronologias públicas as publicações nos idiomas escolhidos
role: A função controla as permissões que o utilizador tem.
user_role:
color: Cor a ser utilizada para a função em toda a interface de utilizador, como RGB no formato hexadecimal
highlighted: Isto torna a função visível publicamente
name: Nome público do cargo, se este estiver definido para ser apresentada com um emblema
name: Nome público da função, se esta estiver definida para ser apresentada com um emblema
permissions_as_keys: Utilizadores com esta função terão acesso a...
position: Cargos mais altos decidem a resolução de conflitos em certas situações. Certas ações só podem ser executadas em cargos com uma menor prioridade
position: Funções mais altas decidem a resolução de conflitos em certas situações. Certas ações só podem ser executadas com certas funções com uma menor prioridade
webhook:
events: Selecione os eventos a enviar
template: Componha o seu próprio conteúdo JSON utilizando a interpolação de variáveis. Deixar em branco para o JSON predefinido.
@ -315,7 +316,7 @@ pt-PT:
trendable: Permitir que esta etiqueta apareça nas tendências
usable: Permitir que as publicações usem esta hashtag localmente
user:
role: Cargo
role: Função
time_zone: Fuso horário
user_role:
color: Cor do emblema

View File

@ -130,6 +130,7 @@ tr:
name: Harflerin, örneğin daha okunabilir yapmak için, sadece büyük/küçük harf durumlarını değiştirebilirsiniz
user:
chosen_languages: İşaretlendiğinde, yalnızca seçilen dillerdeki gönderiler genel zaman çizelgelerinde görüntülenir
role: Rol, kullanıcıların sahip olduğu izinleri denetler.
user_role:
color: Arayüz boyunca rol için kullanılacak olan renk, hex biçiminde RGB
highlighted: Bu rolü herkese açık hale getirir

View File

@ -25,7 +25,6 @@ sq:
admin:
account_actions:
action: Kryeje veprimin
already_silenced: Kjo llogari është heshtuar tashmë.
already_suspended: Kjo llogari është pezulluar tashmë.
title: Kryeni veprim moderimi te %{acct}
account_moderation_notes:

View File

@ -25,6 +25,7 @@ sv:
admin:
account_actions:
action: Utför åtgärd
already_silenced: Detta konto är redan begränsat.
title: Utför aktivitet för moderering på %{acct}
account_moderation_notes:
create: Lämna kommentar

View File

@ -23,7 +23,6 @@ th:
admin:
account_actions:
action: ทำการกระทำ
already_silenced: มีการทำให้บัญชีนี้เงียบไปแล้ว
already_suspended: มีการระงับบัญชีนี้ไปแล้ว
title: ทำการกระทำการกลั่นกรองต่อ %{acct}
account_moderation_notes:

View File

@ -25,6 +25,8 @@ tr:
admin:
account_actions:
action: Eylemi gerçekleştir
already_silenced: Bu hesap zaten askıya alınmış.
already_suspended: Bu hesap zaten askıya alınmış.
title: "%{acct} üzerinde denetleme eylemi gerçekleştir"
account_moderation_notes:
create: Not bırak
@ -46,6 +48,7 @@ tr:
title: "%{username} için e-postayı değiştir"
change_role:
changed_msg: Rol başarıyla değiştirildi!
edit_roles: Kullanıcı rollerini yönetin
label: Rolü değiştir
no_role: Rol yok
title: "%{username} için rolü değiştir"
@ -602,6 +605,7 @@ tr:
suspend_description_html: Bu hesap ve tüm içeriği erişilmez olacak ve nihayetinde silinecek ve bu hesapla etkileşim mümkün olmayacaktır. 30 gün içinde geri alınabilir. Bu hesaba yönelik tüm bildiriimleri kapatır.
actions_description_html: Bu bildirimi çözmek için ne yapılması gerektiğine karar verin. Bildirilen hesap için ceza işlemi yaparsanız, <strong>İstenmeyen</strong> kategorisi seçilmemişse, onlara bir e-posta duyurusu gönderilecektir.
actions_description_remote_html: Bu bildirimi çözmek için hangi eylemi yapmak istediğinize karar verin. Bu yalnızca <strong>sizin</strong> sunucunuzun bu uzak hesapla nasıl etkileşeğini ve içeriğiyle ne yapacağını etkiler.
actions_no_posts: Bu raporun ilişkili olduğu silinecek gönderi yok
add_to_report: Bildirime daha fazlasını ekle
already_suspended_badges:
local: Bu sunucuda zaten askıya alınmış

View File

@ -628,6 +628,7 @@ uk:
suspend_description_html: Обліковий запис і весь його вміст будуть недоступними й врешті-решт видалені, і взаємодіяти з ним буде неможливо. Відновлення можливе протягом 30 днів. Закриває всі скарги на цей обліковий запис.
actions_description_html: Визначте, які дії слід вжити для розв'язання цієї скарги. Якщо ви оберете каральні дії проти зареєстрованого облікового запису, про них буде надіслано сповіщення електронним листом, крім випадків, коли вибрано категорію <strong>Спам</strong>.
actions_description_remote_html: Визначте, які дії слід вжити для розв'язання цього звіту. Це вплине тільки на те, як <strong>ваш</strong> сервер з'єднується з цим віддаленим обліковим записом і обробляє його вміст.
actions_no_posts: Ця скарга не має жодних пов'язаних дописів для видалення
add_to_report: Додати ще подробиць до скарги
already_suspended_badges:
local: Вже призупинено на цьому сервері

View File

@ -23,7 +23,6 @@ vi:
admin:
account_actions:
action: Thực hiện hành động
already_silenced: Tài khoản này đã bị hạn chế.
already_suspended: Tài khoản này đã bị vô hiệu hóa.
title: Áp đặt kiểm duyệt với %{acct}
account_moderation_notes:

View File

@ -23,7 +23,7 @@ zh-CN:
admin:
account_actions:
action: 执行操作
already_silenced: 户已受限。
already_silenced: 户已受限。
already_suspended: 此帐户已被封禁。
title: 在 %{acct} 上执行管理操作
account_moderation_notes:

View File

@ -23,7 +23,7 @@ zh-TW:
admin:
account_actions:
action: 執行動作
already_silenced: 此帳號已被靜音
already_silenced: 此帳號已被限制
already_suspended: 此帳號已被停權。
title: 對 %{acct} 執行站務動作
account_moderation_notes:
@ -1269,7 +1269,7 @@ zh-TW:
home: 首頁時間軸
notifications: 通知
public: 公開時間軸
thread: 對話
thread: 討論串
edit:
add_keyword: 新增關鍵字
keywords: 關鍵字

View File

@ -8,4 +8,134 @@ RSpec.describe FeaturedTag do
it { is_expected.to normalize(:name).from(' #hashtag ').to('hashtag') }
end
end
describe 'Validations' do
context 'when account already has a featured tag' do
subject { Fabricate.build :featured_tag, account: account }
before { Fabricate :featured_tag, account: account, name: 'Test' }
let(:account) { Fabricate :account }
it { is_expected.to_not allow_value('Test').for(:name) }
context 'when account has hit limit' do
before { stub_const 'FeaturedTag::LIMIT', 1 }
context 'with a local account' do
let(:account) { Fabricate :account, domain: nil }
it { is_expected.to_not allow_value(account).for(:account).against(:base).with_message(I18n.t('featured_tags.errors.limit')) }
end
context 'with a remote account' do
let(:account) { Fabricate :account, domain: 'host.example' }
it { is_expected.to allow_value(account).for(:account) }
end
end
end
end
describe 'Callback to set the tag' do
context 'with no matching tag' do
it 'creates a new tag' do
expect { Fabricate :featured_tag, name: 'tag' }
.to change(Tag, :count).by(1)
end
end
context 'with a matching tag' do
it 'creates a new tag' do
tag = Fabricate :tag, name: 'tag'
expect { Fabricate :featured_tag, name: 'tag' }
.to_not change(Tag, :count)
expect(described_class.last.tag)
.to eq(tag)
end
end
end
describe 'Callback to set the stats' do
context 'when no statuses are relevant' do
it 'sets values to nil' do
featured_tag = Fabricate :featured_tag
expect(featured_tag)
.to have_attributes(
statuses_count: 0,
last_status_at: be_nil
)
end
end
context 'when some statuses are relevant' do
it 'sets values to nil' do
tag = Fabricate :tag, name: 'test'
status = Fabricate :status, visibility: :public, created_at: 10.days.ago
status.tags << tag
featured_tag = Fabricate :featured_tag, name: 'test', account: status.account
expect(featured_tag)
.to have_attributes(
statuses_count: 1,
last_status_at: be_within(0.1).of(status.created_at)
)
end
end
end
describe '#sign?' do
it { is_expected.to be_sign }
end
describe '#display_name' do
subject { Fabricate.build :featured_tag, name: name, tag: tag }
context 'with a name value present' do
let(:name) { 'Test' }
let(:tag) { nil }
it 'uses name value' do
expect(subject.display_name).to eq('Test')
end
end
context 'with a missing name value but a present tag' do
let(:name) { nil }
let(:tag) { Fabricate.build :tag, name: 'Tester' }
it 'uses name value' do
expect(subject.display_name).to eq('Tester')
end
end
end
describe '#increment' do
it 'increases the count and updates the last_status_at timestamp' do
featured_tag = Fabricate :featured_tag
timestamp = 5.days.ago
expect { featured_tag.increment(timestamp) }
.to change(featured_tag, :statuses_count).from(0).to(1)
.and change(featured_tag, :last_status_at).from(nil).to(be_within(0.1).of(timestamp))
end
end
describe '#decrement' do
it 'decreases the count and updates the last_status_at timestamp' do
tag = Fabricate :tag, name: 'test'
status = Fabricate :status, visibility: :public, created_at: 10.days.ago
status.tags << tag
featured_tag = Fabricate :featured_tag, name: 'test', account: status.account
expect { featured_tag.decrement(status.id) }
.to change(featured_tag, :statuses_count).from(1).to(0)
.and change(featured_tag, :last_status_at).to(nil)
end
end
end