mirror of
https://git.kescher.at/CatCatNya/catstodon.git
synced 2024-11-25 15:38:06 +01:00
Merge remote-tracking branch 'upstream/main'
This commit is contained in:
commit
782e568329
95 changed files with 967 additions and 687 deletions
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
module Admin
|
module Admin
|
||||||
class DashboardController < BaseController
|
class DashboardController < BaseController
|
||||||
|
include Redisable
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@system_checks = Admin::SystemCheck.perform
|
@system_checks = Admin::SystemCheck.perform
|
||||||
@time_period = (29.days.ago.to_date...Time.now.utc.to_date)
|
@time_period = (29.days.ago.to_date...Time.now.utc.to_date)
|
||||||
|
@ -15,10 +17,10 @@ module Admin
|
||||||
|
|
||||||
def redis_info
|
def redis_info
|
||||||
@redis_info ||= begin
|
@redis_info ||= begin
|
||||||
if Redis.current.is_a?(Redis::Namespace)
|
if redis.is_a?(Redis::Namespace)
|
||||||
Redis.current.redis.info
|
redis.redis.info
|
||||||
else
|
else
|
||||||
Redis.current.info
|
redis.info
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -21,7 +21,7 @@ class Api::V1::BookmarksController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def results
|
def results
|
||||||
@_results ||= account_bookmarks.eager_load(:status).to_a_paginated_by_id(
|
@_results ||= account_bookmarks.joins(:status).eager_load(:status).to_a_paginated_by_id(
|
||||||
limit_param(DEFAULT_STATUSES_LIMIT),
|
limit_param(DEFAULT_STATUSES_LIMIT),
|
||||||
params_slice(:max_id, :since_id, :min_id)
|
params_slice(:max_id, :since_id, :min_id)
|
||||||
)
|
)
|
||||||
|
|
|
@ -21,7 +21,7 @@ class Api::V1::FavouritesController < Api::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def results
|
def results
|
||||||
@_results ||= account_favourites.eager_load(:status).to_a_paginated_by_id(
|
@_results ||= account_favourites.joins(:status).eager_load(:status).to_a_paginated_by_id(
|
||||||
limit_param(DEFAULT_STATUSES_LIMIT),
|
limit_param(DEFAULT_STATUSES_LIMIT),
|
||||||
params_slice(:max_id, :since_id, :min_id)
|
params_slice(:max_id, :since_id, :min_id)
|
||||||
)
|
)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
class MediaProxyController < ApplicationController
|
class MediaProxyController < ApplicationController
|
||||||
include RoutingHelper
|
include RoutingHelper
|
||||||
include Authorization
|
include Authorization
|
||||||
|
include Redisable
|
||||||
|
|
||||||
skip_before_action :store_current_location
|
skip_before_action :store_current_location
|
||||||
skip_before_action :require_functional!
|
skip_before_action :require_functional!
|
||||||
|
@ -45,7 +46,7 @@ class MediaProxyController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
def lock_options
|
||||||
{ redis: Redis.current, key: "media_download:#{params[:id]}", autorelease: 15.minutes.seconds }
|
{ redis: redis, key: "media_download:#{params[:id]}", autorelease: 15.minutes.seconds }
|
||||||
end
|
end
|
||||||
|
|
||||||
def reject_media?
|
def reject_media?
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
class Settings::ExportsController < Settings::BaseController
|
class Settings::ExportsController < Settings::BaseController
|
||||||
include Authorization
|
include Authorization
|
||||||
|
include Redisable
|
||||||
|
|
||||||
skip_before_action :require_functional!
|
skip_before_action :require_functional!
|
||||||
|
|
||||||
|
@ -28,6 +29,6 @@ class Settings::ExportsController < Settings::BaseController
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
def lock_options
|
||||||
{ redis: Redis.current, key: "backup:#{current_user.id}" }
|
{ redis: redis, key: "backup:#{current_user.id}" }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||||
import Button from 'flavours/glitch/components/button';
|
import Button from 'flavours/glitch/components/button';
|
||||||
import Option from './components/option';
|
import Option from './components/option';
|
||||||
|
@ -17,11 +19,17 @@ const messages = defineMessages({
|
||||||
account: { id: 'report.category.title_account', defaultMessage: 'profile' },
|
account: { id: 'report.category.title_account', defaultMessage: 'profile' },
|
||||||
});
|
});
|
||||||
|
|
||||||
export default @injectIntl
|
const mapStateToProps = state => ({
|
||||||
|
rules: state.get('rules'),
|
||||||
|
});
|
||||||
|
|
||||||
|
export default @connect(mapStateToProps)
|
||||||
|
@injectIntl
|
||||||
class Category extends React.PureComponent {
|
class Category extends React.PureComponent {
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
onNextStep: PropTypes.func.isRequired,
|
onNextStep: PropTypes.func.isRequired,
|
||||||
|
rules: ImmutablePropTypes.list,
|
||||||
category: PropTypes.string,
|
category: PropTypes.string,
|
||||||
onChangeCategory: PropTypes.func.isRequired,
|
onChangeCategory: PropTypes.func.isRequired,
|
||||||
startedFrom: PropTypes.oneOf(['status', 'account']),
|
startedFrom: PropTypes.oneOf(['status', 'account']),
|
||||||
|
@ -53,13 +61,17 @@ class Category extends React.PureComponent {
|
||||||
};
|
};
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { category, startedFrom, intl } = this.props;
|
const { category, startedFrom, rules, intl } = this.props;
|
||||||
|
|
||||||
const options = [
|
const options = rules.size > 0 ? [
|
||||||
'dislike',
|
'dislike',
|
||||||
'spam',
|
'spam',
|
||||||
'violation',
|
'violation',
|
||||||
'other',
|
'other',
|
||||||
|
] : [
|
||||||
|
'dislike',
|
||||||
|
'spam',
|
||||||
|
'other',
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -11,6 +11,7 @@ import { uploadCompose, resetCompose, changeComposeSpoilerness } from 'flavours/
|
||||||
import { expandHomeTimeline } from 'flavours/glitch/actions/timelines';
|
import { expandHomeTimeline } from 'flavours/glitch/actions/timelines';
|
||||||
import { expandNotifications, notificationsSetVisibility } from 'flavours/glitch/actions/notifications';
|
import { expandNotifications, notificationsSetVisibility } from 'flavours/glitch/actions/notifications';
|
||||||
import { fetchFilters } from 'flavours/glitch/actions/filters';
|
import { fetchFilters } from 'flavours/glitch/actions/filters';
|
||||||
|
import { fetchRules } from 'flavours/glitch/actions/rules';
|
||||||
import { clearHeight } from 'flavours/glitch/actions/height_cache';
|
import { clearHeight } from 'flavours/glitch/actions/height_cache';
|
||||||
import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'flavours/glitch/actions/markers';
|
import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'flavours/glitch/actions/markers';
|
||||||
import { WrappedSwitch, WrappedRoute } from 'flavours/glitch/util/react_router_helpers';
|
import { WrappedSwitch, WrappedRoute } from 'flavours/glitch/util/react_router_helpers';
|
||||||
|
@ -402,6 +403,7 @@ class UI extends React.Component {
|
||||||
this.props.dispatch(expandHomeTimeline());
|
this.props.dispatch(expandHomeTimeline());
|
||||||
this.props.dispatch(expandNotifications());
|
this.props.dispatch(expandNotifications());
|
||||||
setTimeout(() => this.props.dispatch(fetchFilters()), 500);
|
setTimeout(() => this.props.dispatch(fetchFilters()), 500);
|
||||||
|
setTimeout(() => this.props.dispatch(fetchRules()), 3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount () {
|
componentDidMount () {
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||||
import Button from 'mastodon/components/button';
|
import Button from 'mastodon/components/button';
|
||||||
import Option from './components/option';
|
import Option from './components/option';
|
||||||
|
@ -17,11 +19,17 @@ const messages = defineMessages({
|
||||||
account: { id: 'report.category.title_account', defaultMessage: 'profile' },
|
account: { id: 'report.category.title_account', defaultMessage: 'profile' },
|
||||||
});
|
});
|
||||||
|
|
||||||
export default @injectIntl
|
const mapStateToProps = state => ({
|
||||||
|
rules: state.get('rules'),
|
||||||
|
});
|
||||||
|
|
||||||
|
export default @connect(mapStateToProps)
|
||||||
|
@injectIntl
|
||||||
class Category extends React.PureComponent {
|
class Category extends React.PureComponent {
|
||||||
|
|
||||||
static propTypes = {
|
static propTypes = {
|
||||||
onNextStep: PropTypes.func.isRequired,
|
onNextStep: PropTypes.func.isRequired,
|
||||||
|
rules: ImmutablePropTypes.list,
|
||||||
category: PropTypes.string,
|
category: PropTypes.string,
|
||||||
onChangeCategory: PropTypes.func.isRequired,
|
onChangeCategory: PropTypes.func.isRequired,
|
||||||
startedFrom: PropTypes.oneOf(['status', 'account']),
|
startedFrom: PropTypes.oneOf(['status', 'account']),
|
||||||
|
@ -53,13 +61,17 @@ class Category extends React.PureComponent {
|
||||||
};
|
};
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
const { category, startedFrom, intl } = this.props;
|
const { category, startedFrom, rules, intl } = this.props;
|
||||||
|
|
||||||
const options = [
|
const options = rules.size > 0 ? [
|
||||||
'dislike',
|
'dislike',
|
||||||
'spam',
|
'spam',
|
||||||
'violation',
|
'violation',
|
||||||
'other',
|
'other',
|
||||||
|
] : [
|
||||||
|
'dislike',
|
||||||
|
'spam',
|
||||||
|
'other',
|
||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -14,6 +14,7 @@ import { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../act
|
||||||
import { expandHomeTimeline } from '../../actions/timelines';
|
import { expandHomeTimeline } from '../../actions/timelines';
|
||||||
import { expandNotifications } from '../../actions/notifications';
|
import { expandNotifications } from '../../actions/notifications';
|
||||||
import { fetchFilters } from '../../actions/filters';
|
import { fetchFilters } from '../../actions/filters';
|
||||||
|
import { fetchRules } from '../../actions/rules';
|
||||||
import { clearHeight } from '../../actions/height_cache';
|
import { clearHeight } from '../../actions/height_cache';
|
||||||
import { focusApp, unfocusApp, changeLayout } from 'mastodon/actions/app';
|
import { focusApp, unfocusApp, changeLayout } from 'mastodon/actions/app';
|
||||||
import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodon/actions/markers';
|
import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodon/actions/markers';
|
||||||
|
@ -368,6 +369,7 @@ class UI extends React.PureComponent {
|
||||||
this.props.dispatch(expandHomeTimeline());
|
this.props.dispatch(expandHomeTimeline());
|
||||||
this.props.dispatch(expandNotifications());
|
this.props.dispatch(expandNotifications());
|
||||||
setTimeout(() => this.props.dispatch(fetchFilters()), 500);
|
setTimeout(() => this.props.dispatch(fetchFilters()), 500);
|
||||||
|
setTimeout(() => this.props.dispatch(fetchRules()), 3000);
|
||||||
|
|
||||||
this.hotkeys.__mousetrap__.stopCallback = (e, element) => {
|
this.hotkeys.__mousetrap__.stopCallback = (e, element) => {
|
||||||
return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName);
|
return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName);
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"account.account_note_header": "Nota",
|
"account.account_note_header": "Nota",
|
||||||
"account.add_or_remove_from_list": "Afegir o Treure de les llistes",
|
"account.add_or_remove_from_list": "Afegeix o treu de les llistes",
|
||||||
"account.badges.bot": "Bot",
|
"account.badges.bot": "Bot",
|
||||||
"account.badges.group": "Grup",
|
"account.badges.group": "Grup",
|
||||||
"account.block": "Bloqueja @{name}",
|
"account.block": "Bloqueja @{name}",
|
||||||
|
@ -8,43 +8,43 @@
|
||||||
"account.blocked": "Bloquejat",
|
"account.blocked": "Bloquejat",
|
||||||
"account.browse_more_on_origin_server": "Navega més en el perfil original",
|
"account.browse_more_on_origin_server": "Navega més en el perfil original",
|
||||||
"account.cancel_follow_request": "Anul·la la sol·licitud de seguiment",
|
"account.cancel_follow_request": "Anul·la la sol·licitud de seguiment",
|
||||||
"account.direct": "Enviar missatge directe a @{name}",
|
"account.direct": "Envia missatge directe a @{name}",
|
||||||
"account.disable_notifications": "Deixa de notificar-me les publicacions de @{name}",
|
"account.disable_notifications": "Deixa de notificar-me les publicacions de @{name}",
|
||||||
"account.domain_blocked": "Domini bloquejat",
|
"account.domain_blocked": "Domini bloquejat",
|
||||||
"account.edit_profile": "Editar el perfil",
|
"account.edit_profile": "Edita el perfil",
|
||||||
"account.enable_notifications": "Notifica’m les publicacions de @{name}",
|
"account.enable_notifications": "Notifica’m les publicacions de @{name}",
|
||||||
"account.endorse": "Recomana en el teu perfil",
|
"account.endorse": "Recomana en el teu perfil",
|
||||||
"account.follow": "Segueix",
|
"account.follow": "Segueix",
|
||||||
"account.followers": "Seguidors",
|
"account.followers": "Seguidors",
|
||||||
"account.followers.empty": "Encara ningú no segueix aquest usuari.",
|
"account.followers.empty": "Encara ningú no segueix aquest usuari.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidors}}",
|
"account.followers_counter": "{count, plural, one {{counter} Seguidor} other {{counter} Seguidors}}",
|
||||||
"account.following": "Seguint",
|
"account.following": "Seguits",
|
||||||
"account.following_counter": "{count, plural, other {{counter} Seguint}}",
|
"account.following_counter": "{count, plural, other {{counter} Seguint}}",
|
||||||
"account.follows.empty": "Aquest usuari encara no segueix a ningú.",
|
"account.follows.empty": "Aquest usuari encara no segueix ningú.",
|
||||||
"account.follows_you": "Et segueix",
|
"account.follows_you": "Et segueix",
|
||||||
"account.hide_reblogs": "Amaga els impulsos de @{name}",
|
"account.hide_reblogs": "Amaga els impulsos de @{name}",
|
||||||
"account.joined": "Unit des de {date}",
|
"account.joined": "Membre des de {date}",
|
||||||
"account.link_verified_on": "La propietat d'aquest enllaç es va verificar el dia {date}",
|
"account.link_verified_on": "La propietat d'aquest enllaç es va verificar el dia {date}",
|
||||||
"account.locked_info": "Aquest estat de privadesa del compte està definit com a bloquejat. El propietari revisa manualment qui pot seguir-lo.",
|
"account.locked_info": "Aquest estat de privadesa del compte està definit com a bloquejat. El propietari revisa manualment qui pot seguir-lo.",
|
||||||
"account.media": "Mèdia",
|
"account.media": "Mèdia",
|
||||||
"account.mention": "Esmenta @{name}",
|
"account.mention": "Esmenta @{name}",
|
||||||
"account.moved_to": "{name} s'ha mogut a:",
|
"account.moved_to": "{name} s'ha traslladat a:",
|
||||||
"account.mute": "Silencia @{name}",
|
"account.mute": "Silencia @{name}",
|
||||||
"account.mute_notifications": "Notificacions silenciades de @{name}",
|
"account.mute_notifications": "Silencia les notificacions de @{name}",
|
||||||
"account.muted": "Silenciat",
|
"account.muted": "Silenciat",
|
||||||
"account.posts": "Publicacions",
|
"account.posts": "Publicacions",
|
||||||
"account.posts_with_replies": "Publicacions i respostes",
|
"account.posts_with_replies": "Publicacions i respostes",
|
||||||
"account.report": "Informar sobre @{name}",
|
"account.report": "Informa sobre @{name}",
|
||||||
"account.requested": "Esperant aprovació. Clic per a cancel·lar la petició de seguiment",
|
"account.requested": "Esperant aprovació. Fes clic per cancel·lar la petició de seguiment",
|
||||||
"account.share": "Comparteix el perfil de @{name}",
|
"account.share": "Comparteix el perfil de @{name}",
|
||||||
"account.show_reblogs": "Mostra els impulsos de @{name}",
|
"account.show_reblogs": "Mostra els impulsos de @{name}",
|
||||||
"account.statuses_counter": "{count, plural, one {{counter} Publicació} other {{counter} Publicacions}}",
|
"account.statuses_counter": "{count, plural, one {{counter} Publicació} other {{counter} Publicacions}}",
|
||||||
"account.unblock": "Desbloqueja @{name}",
|
"account.unblock": "Desbloqueja @{name}",
|
||||||
"account.unblock_domain": "Desbloqueja el domini {domain}",
|
"account.unblock_domain": "Desbloqueja el domini {domain}",
|
||||||
"account.unblock_short": "Desbloqueja",
|
"account.unblock_short": "Desbloqueja",
|
||||||
"account.unendorse": "No recomanar en el perfil",
|
"account.unendorse": "No recomanis en el perfil",
|
||||||
"account.unfollow": "Deixa de seguir",
|
"account.unfollow": "Deixa de seguir",
|
||||||
"account.unmute": "Treure silenci de @{name}",
|
"account.unmute": "Deixa de silenciar @{name}",
|
||||||
"account.unmute_notifications": "Activar notificacions de @{name}",
|
"account.unmute_notifications": "Activar notificacions de @{name}",
|
||||||
"account.unmute_short": "Deixa de silenciar",
|
"account.unmute_short": "Deixa de silenciar",
|
||||||
"account_note.placeholder": "Fes clic per afegir una nota",
|
"account_note.placeholder": "Fes clic per afegir una nota",
|
||||||
|
@ -53,14 +53,14 @@
|
||||||
"admin.dashboard.retention.average": "Mitjana",
|
"admin.dashboard.retention.average": "Mitjana",
|
||||||
"admin.dashboard.retention.cohort": "Mes del registre",
|
"admin.dashboard.retention.cohort": "Mes del registre",
|
||||||
"admin.dashboard.retention.cohort_size": "Nous usuaris",
|
"admin.dashboard.retention.cohort_size": "Nous usuaris",
|
||||||
"alert.rate_limited.message": "Si us plau prova-ho després de {retry_time, time, medium}.",
|
"alert.rate_limited.message": "Si us plau, torna-ho a provar després de {retry_time, time, medium}.",
|
||||||
"alert.rate_limited.title": "Límit de freqüència",
|
"alert.rate_limited.title": "Límit de freqüència",
|
||||||
"alert.unexpected.message": "S'ha produït un error inesperat.",
|
"alert.unexpected.message": "S'ha produït un error inesperat.",
|
||||||
"alert.unexpected.title": "Vaja!",
|
"alert.unexpected.title": "Vaja!",
|
||||||
"announcement.announcement": "Anunci",
|
"announcement.announcement": "Anunci",
|
||||||
"attachments_list.unprocessed": "(sense processar)",
|
"attachments_list.unprocessed": "(sense processar)",
|
||||||
"autosuggest_hashtag.per_week": "{count} per setmana",
|
"autosuggest_hashtag.per_week": "{count} per setmana",
|
||||||
"boost_modal.combo": "Pots prémer {combo} per saltar-te això el proper cop",
|
"boost_modal.combo": "Pots prémer {combo} per evitar-ho el pròxim cop",
|
||||||
"bundle_column_error.body": "S'ha produït un error en carregar aquest component.",
|
"bundle_column_error.body": "S'ha produït un error en carregar aquest component.",
|
||||||
"bundle_column_error.retry": "Torna-ho a provar",
|
"bundle_column_error.retry": "Torna-ho a provar",
|
||||||
"bundle_column_error.title": "Error de connexió",
|
"bundle_column_error.title": "Error de connexió",
|
||||||
|
@ -71,7 +71,7 @@
|
||||||
"column.bookmarks": "Marcadors",
|
"column.bookmarks": "Marcadors",
|
||||||
"column.community": "Línia de temps local",
|
"column.community": "Línia de temps local",
|
||||||
"column.direct": "Missatges directes",
|
"column.direct": "Missatges directes",
|
||||||
"column.directory": "Navega els perfils",
|
"column.directory": "Navega pels perfils",
|
||||||
"column.domain_blocks": "Dominis bloquejats",
|
"column.domain_blocks": "Dominis bloquejats",
|
||||||
"column.favourites": "Favorits",
|
"column.favourites": "Favorits",
|
||||||
"column.follow_requests": "Peticions per a seguir-te",
|
"column.follow_requests": "Peticions per a seguir-te",
|
||||||
|
@ -92,50 +92,50 @@
|
||||||
"community.column_settings.local_only": "Només local",
|
"community.column_settings.local_only": "Només local",
|
||||||
"community.column_settings.media_only": "Només multimèdia",
|
"community.column_settings.media_only": "Només multimèdia",
|
||||||
"community.column_settings.remote_only": "Només remot",
|
"community.column_settings.remote_only": "Només remot",
|
||||||
"compose_form.direct_message_warning": "Aquesta publicació només serà enviat als usuaris esmentats.",
|
"compose_form.direct_message_warning": "Aquesta publicació només s'enviarà als usuaris esmentats.",
|
||||||
"compose_form.direct_message_warning_learn_more": "Aprèn més",
|
"compose_form.direct_message_warning_learn_more": "Més informació",
|
||||||
"compose_form.hashtag_warning": "Aquesta publicació no es mostrarà en cap etiqueta ja que no està llistada. Només les publicacions públiques poden ser cercades per etiqueta.",
|
"compose_form.hashtag_warning": "Aquesta publicació no es mostrarà en cap etiqueta, ja que no està llistada. Només les publicacions públiques es poden cercar per etiqueta.",
|
||||||
"compose_form.lock_disclaimer": "El teu compte no està bloquejat {locked}. Tothom pot seguir-te i veure els teus missatges només a seguidors.",
|
"compose_form.lock_disclaimer": "El teu compte no està bloquejat {locked}. Tothom pot seguir-te i veure els teus missatges només per a seguidors.",
|
||||||
"compose_form.lock_disclaimer.lock": "bloquejat",
|
"compose_form.lock_disclaimer.lock": "bloquejat",
|
||||||
"compose_form.placeholder": "En què penses?",
|
"compose_form.placeholder": "Què et passa pel cap?",
|
||||||
"compose_form.poll.add_option": "Afegir una opció",
|
"compose_form.poll.add_option": "Afegeix una opció",
|
||||||
"compose_form.poll.duration": "Durada de l'enquesta",
|
"compose_form.poll.duration": "Durada de l'enquesta",
|
||||||
"compose_form.poll.option_placeholder": "Opció {number}",
|
"compose_form.poll.option_placeholder": "Opció {number}",
|
||||||
"compose_form.poll.remove_option": "Elimina aquesta opció",
|
"compose_form.poll.remove_option": "Elimina aquesta opció",
|
||||||
"compose_form.poll.switch_to_multiple": "Canvia l’enquesta per a permetre diverses opcions",
|
"compose_form.poll.switch_to_multiple": "Canvia l’enquesta per a permetre diverses opcions",
|
||||||
"compose_form.poll.switch_to_single": "Canvia l’enquesta per a permetre una única opció",
|
"compose_form.poll.switch_to_single": "Canvia l’enquesta per permetre una única opció",
|
||||||
"compose_form.publish": "Publicar",
|
"compose_form.publish": "Publica",
|
||||||
"compose_form.publish_loud": "{publish}!",
|
"compose_form.publish_loud": "{publish}!",
|
||||||
"compose_form.save_changes": "Desa els canvis",
|
"compose_form.save_changes": "Desa els canvis",
|
||||||
"compose_form.sensitive.hide": "{count, plural, one {Marca mèdia com a sensible} other {Marca mèdia com a sensible}}",
|
"compose_form.sensitive.hide": "{count, plural, one {Marca contingut com a sensible} other {Marca contingut com a sensible}}",
|
||||||
"compose_form.sensitive.marked": "{count, plural, one {Mèdia està marcat com a sensible} other {Mèdia estan marcats com a sensible}}",
|
"compose_form.sensitive.marked": "{count, plural, one {Contingut marcat com a sensible} other {Contingut marcat com a sensible}}",
|
||||||
"compose_form.sensitive.unmarked": "{count, plural, one {Mèdia no està marcada com a sensible} other {Mèdia no estan marcats com a sensibles}}",
|
"compose_form.sensitive.unmarked": "{count, plural, one {Contingut no marcat com a sensible} other {Contingut no marcat com a sensible}}",
|
||||||
"compose_form.spoiler.marked": "Treu l'avís de contingut",
|
"compose_form.spoiler.marked": "Elimina l'avís de contingut",
|
||||||
"compose_form.spoiler.unmarked": "Afegeix avís de contingut",
|
"compose_form.spoiler.unmarked": "Afegeix avís de contingut",
|
||||||
"compose_form.spoiler_placeholder": "Escriu l'avís aquí",
|
"compose_form.spoiler_placeholder": "Escriu l'avís aquí",
|
||||||
"confirmation_modal.cancel": "Cancel·la",
|
"confirmation_modal.cancel": "Cancel·la",
|
||||||
"confirmations.block.block_and_report": "Bloqueja i informa",
|
"confirmations.block.block_and_report": "Bloqueja i informa",
|
||||||
"confirmations.block.confirm": "Bloqueja",
|
"confirmations.block.confirm": "Bloqueja",
|
||||||
"confirmations.block.message": "Estàs segur que vols bloquejar a {name}?",
|
"confirmations.block.message": "Segur que vols bloquejar a {name}?",
|
||||||
"confirmations.delete.confirm": "Suprimeix",
|
"confirmations.delete.confirm": "Suprimeix",
|
||||||
"confirmations.delete.message": "Estàs segur que vols suprimir aquesta publicació?",
|
"confirmations.delete.message": "Segur que vols suprimir aquesta publicació?",
|
||||||
"confirmations.delete_list.confirm": "Suprimeix",
|
"confirmations.delete_list.confirm": "Suprimeix",
|
||||||
"confirmations.delete_list.message": "Estàs segur que vols suprimir permanentment aquesta llista?",
|
"confirmations.delete_list.message": "Segur que vols suprimir permanentment aquesta llista?",
|
||||||
"confirmations.discard_edit_media.confirm": "Descarta",
|
"confirmations.discard_edit_media.confirm": "Descarta",
|
||||||
"confirmations.discard_edit_media.message": "Tens canvis no desats de la descripciò de mèdia o previsualització, els vols descartar?",
|
"confirmations.discard_edit_media.message": "Tens canvis no desats en la descripció del contingut o en la previsualització, els vols descartar?",
|
||||||
"confirmations.domain_block.confirm": "Bloqueja el domini sencer",
|
"confirmations.domain_block.confirm": "Bloqueja el domini sencer",
|
||||||
"confirmations.domain_block.message": "Estàs segur, realment segur que vols bloquejar totalment {domain}? En la majoria dels casos bloquejar o silenciar uns pocs objectius és suficient i preferible. No veuràs contingut d’aquest domini en cap de les línies de temps ni en les notificacions. Els teus seguidors d’aquest domini seran eliminats.",
|
"confirmations.domain_block.message": "N'estàs segur del tot que vols bloquejar totalment {domain}? En la majoria dels casos, bloquejar o silenciar uns pocs objectius és suficient i preferible. No veuràs el contingut d’aquest domini en cap de les línies de temps ni en les notificacions. Els teus seguidors d’aquest domini s'elimiran.",
|
||||||
"confirmations.logout.confirm": "Tancar sessió",
|
"confirmations.logout.confirm": "Tancar sessió",
|
||||||
"confirmations.logout.message": "Segur que vols tancar la sessió?",
|
"confirmations.logout.message": "Segur que vols tancar la sessió?",
|
||||||
"confirmations.mute.confirm": "Silencia",
|
"confirmations.mute.confirm": "Silencia",
|
||||||
"confirmations.mute.explanation": "Això amagarà les seves publicacions i les que els mencionen però encara els permetrà veure les teves i seguir-te.",
|
"confirmations.mute.explanation": "Això amagarà les seves publicacions i les que els mencionen, però encara els permetrà veure les teves i seguir-te.",
|
||||||
"confirmations.mute.message": "Estàs segur que vols silenciar {name}?",
|
"confirmations.mute.message": "Segur que vols silenciar {name}?",
|
||||||
"confirmations.redraft.confirm": "Esborrar i refer",
|
"confirmations.redraft.confirm": "Esborra'l i reescriure-lo",
|
||||||
"confirmations.redraft.message": "Estàs segur que vols esborrar aquesta publicació i tornar a redactar-la? Perdràs tots els impulsos i favorits, i les respostes a la publicació original es quedaran orfes.",
|
"confirmations.redraft.message": "Segur que vols esborrar aquesta publicació i tornar-la a escriure? Perdràs tots els impulsos i els favorits, i les respostes a la publicació original es quedaran orfes.",
|
||||||
"confirmations.reply.confirm": "Respon",
|
"confirmations.reply.confirm": "Respon",
|
||||||
"confirmations.reply.message": "Responen ara es sobreescriurà el missatge que estàs editant. Estàs segur que vols continuar?",
|
"confirmations.reply.message": "Si respons ara, sobreescriuràs el missatge que estàs editant. Segur que vols continuar?",
|
||||||
"confirmations.unfollow.confirm": "Deixa de seguir",
|
"confirmations.unfollow.confirm": "Deixa de seguir",
|
||||||
"confirmations.unfollow.message": "Estàs segur que vols deixar de seguir {name}?",
|
"confirmations.unfollow.message": "Segur que vols deixar de seguir {name}?",
|
||||||
"conversation.delete": "Elimina la conversa",
|
"conversation.delete": "Elimina la conversa",
|
||||||
"conversation.mark_as_read": "Marca com a llegida",
|
"conversation.mark_as_read": "Marca com a llegida",
|
||||||
"conversation.open": "Veure conversa",
|
"conversation.open": "Veure conversa",
|
||||||
|
@ -159,32 +159,32 @@
|
||||||
"emoji_button.search": "Cerca...",
|
"emoji_button.search": "Cerca...",
|
||||||
"emoji_button.search_results": "Resultats de la cerca",
|
"emoji_button.search_results": "Resultats de la cerca",
|
||||||
"emoji_button.symbols": "Símbols",
|
"emoji_button.symbols": "Símbols",
|
||||||
"emoji_button.travel": "Viatges i Llocs",
|
"emoji_button.travel": "Viatges i llocs",
|
||||||
"empty_column.account_suspended": "Compte suspès",
|
"empty_column.account_suspended": "Compte suspès",
|
||||||
"empty_column.account_timeline": "No hi ha publicacions aquí!",
|
"empty_column.account_timeline": "Aquí no hi ha publicacions!",
|
||||||
"empty_column.account_unavailable": "Perfil no disponible",
|
"empty_column.account_unavailable": "Perfil no disponible",
|
||||||
"empty_column.blocks": "Encara no has bloquejat cap usuari.",
|
"empty_column.blocks": "Encara no has bloquejat cap usuari.",
|
||||||
"empty_column.bookmarked_statuses": "Encara no tens desada a marcadors cap publicació. Quan desis una apareixerà aquí.",
|
"empty_column.bookmarked_statuses": "Encara no has marcat com publicació com a preferida. Quan en marquis una apareixerà aquí.",
|
||||||
"empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per a fer rodar la pilota!",
|
"empty_column.community": "La línia de temps local és buida. Escriu alguna cosa públicament per posar-ho tot en marxa!",
|
||||||
"empty_column.direct": "Encara no tens missatges directes. Quan enviïs o rebis un, es mostrarà aquí.",
|
"empty_column.direct": "Encara no tens missatges directes. Quan n'enviïs o en rebis, es mostraran aquí.",
|
||||||
"empty_column.domain_blocks": "Encara no hi ha dominis bloquejats.",
|
"empty_column.domain_blocks": "Encara no hi ha dominis bloquejats.",
|
||||||
"empty_column.explore_statuses": "No hi ha res en tendència ara mateix. Verifica-ho més tard!",
|
"empty_column.explore_statuses": "No hi ha res en tendència ara mateix. Revisa-ho més tard!",
|
||||||
"empty_column.favourited_statuses": "Encara no has afavorit cap publicació. Quan ho facis, apareixerà aquí.",
|
"empty_column.favourited_statuses": "Encara no has marcat cap publicació com a preferida. Quan les marquis, apareixeran aquí.",
|
||||||
"empty_column.favourites": "Ningú no ha afavorit aquesta publicació encara. Quan algú ho faci, apareixerà aquí.",
|
"empty_column.favourites": "Encara ningú no ha marcat aquesta publicació com a preferida. Quan algú ho faci, apareixerà aquí.",
|
||||||
"empty_column.follow_recommendations": "Sembla que no es poden generar sugerencies per a tu. Pots provar d'emprar la cerca per a trobar gent que voldries conèixer o explorar les etiquetes en tendència.",
|
"empty_column.follow_recommendations": "Sembla que no s'han pogut generar suggeriments per a tu. Pots provar d'usar la cerca per trobar persones que vulguis conèixer o explorar les etiquetes en tendència.",
|
||||||
"empty_column.follow_requests": "Encara no tens cap petició de seguiment. Quan en rebis una, apareixerà aquí.",
|
"empty_column.follow_requests": "Encara no tens cap petició de seguiment. Quan en rebis una, apareixerà aquí.",
|
||||||
"empty_column.hashtag": "Encara no hi ha res en aquesta etiqueta.",
|
"empty_column.hashtag": "Encara no hi ha res en aquesta etiqueta.",
|
||||||
"empty_column.home": "La teva línia de temps és buida! Segueix més gent per a emplenar-la. {suggestions}",
|
"empty_column.home": "La teva línia de temps és buida! Segueix més gent per omplir-la. {suggestions}",
|
||||||
"empty_column.home.suggestions": "Mira algunes sugerencies",
|
"empty_column.home.suggestions": "Mira algunes suggeriments",
|
||||||
"empty_column.list": "Encara no hi ha res en aquesta llista. Quan els membres d'aquesta llista publiquin noves publicacions, apareixeran aquí.",
|
"empty_column.list": "Encara no hi ha res en aquesta llista. Quan els membres d'aquesta llista publiquin noves publicacions, apareixeran aquí.",
|
||||||
"empty_column.lists": "Encara no tens cap llista. Quan en facis una, apareixerà aquí.",
|
"empty_column.lists": "Encara no tens cap llista. Quan en creïs una, apareixerà aquí.",
|
||||||
"empty_column.mutes": "Encara no has silenciat cap usuari.",
|
"empty_column.mutes": "Encara no has silenciat cap usuari.",
|
||||||
"empty_column.notifications": "Encara no tens notificacions. Quan altre gent interactuï amb tu, les veuràs aquí.",
|
"empty_column.notifications": "Encara no tens notificacions. Quan altres persones interactuïn amb tu, les veuràs aquí.",
|
||||||
"empty_column.public": "No hi ha res aquí! Escriu públicament alguna cosa o manualment segueix usuaris d'altres servidors per a omplir-ho",
|
"empty_column.public": "Aquí no hi ha res! Escriu públicament alguna cosa o segueix manualment usuaris d'altres servidors per omplir-ho",
|
||||||
"error.unexpected_crash.explanation": "A causa d'un bug en el nostre codi o un problema de compatibilitat del navegador, aquesta pàgina podria no ser mostrada correctament.",
|
"error.unexpected_crash.explanation": "A causa d'un error en el nostre codi o d'un problema de compatibilitat amb el navegador, aquesta pàgina no s'ha pogut mostrar correctament.",
|
||||||
"error.unexpected_crash.explanation_addons": "Aquesta pàgina podria no mostrar-se correctament. Aquest error és possiblement causat per una extensió del navegador o per eienes automàtiques de traducció.",
|
"error.unexpected_crash.explanation_addons": "Aquesta pàgina no s'ha pogut mostrar correctament. És probable que aquest error sigui causat per un complement del navegador o per eines de traducció automàtica.",
|
||||||
"error.unexpected_crash.next_steps": "Prova recarregant la pàgina. Si això no ajuda, encara podries ser capaç d'utilitzar Mastodon a través d'un navegador diferent o amb una aplicació nativa.",
|
"error.unexpected_crash.next_steps": "Prova d'actualitzar la pàgina. Si això no serveix, és possible que encara puguis fer servir Mastodon a través d'un navegador diferent o amb una aplicació nativa.",
|
||||||
"error.unexpected_crash.next_steps_addons": "Prova de desactivar-les i refrescant la pàgina. Si això no ajuda, encara pots ser capaç d’utilitzar Mastodon amb un altre navegador o aplicació nativa.",
|
"error.unexpected_crash.next_steps_addons": "Prova de desactivar-los i actualitza la pàgina. Si això no serveix, és possible que encara puguis fer servir Mastodon amb un altre navegador o una aplicació nativa.",
|
||||||
"errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace al porta-retalls",
|
"errors.unexpected_crash.copy_stacktrace": "Còpia stacktrace al porta-retalls",
|
||||||
"errors.unexpected_crash.report_issue": "Informa d'un problema",
|
"errors.unexpected_crash.report_issue": "Informa d'un problema",
|
||||||
"explore.search_results": "Resultats de la cerca",
|
"explore.search_results": "Resultats de la cerca",
|
||||||
|
@ -198,16 +198,16 @@
|
||||||
"follow_recommendations.lead": "Les publicacions del usuaris que segueixes es mostraran en ordre cronològic en la teva línia de temps Inici. No tinguis por en cometre errors, pots fàcilment deixar de seguir-los en qualsevol moment!",
|
"follow_recommendations.lead": "Les publicacions del usuaris que segueixes es mostraran en ordre cronològic en la teva línia de temps Inici. No tinguis por en cometre errors, pots fàcilment deixar de seguir-los en qualsevol moment!",
|
||||||
"follow_request.authorize": "Autoritza",
|
"follow_request.authorize": "Autoritza",
|
||||||
"follow_request.reject": "Rebutja",
|
"follow_request.reject": "Rebutja",
|
||||||
"follow_requests.unlocked_explanation": "Tot i que el teu compte no està bloquejat, el personal de {domain} ha pensat que és possible que vulguis revisar les sol·licituds de seguiment d’aquests comptes de forma manual.",
|
"follow_requests.unlocked_explanation": "Tot i que el teu compte no està bloquejat, el personal de {domain} ha pensat que és possible que vulguis revisar les sol·licituds de seguiment d’aquests comptes manualment.",
|
||||||
"generic.saved": "Desat",
|
"generic.saved": "Desat",
|
||||||
"getting_started.developers": "Desenvolupadors",
|
"getting_started.developers": "Desenvolupadors",
|
||||||
"getting_started.directory": "Directori de perfils",
|
"getting_started.directory": "Directori de perfils",
|
||||||
"getting_started.documentation": "Documentació",
|
"getting_started.documentation": "Documentació",
|
||||||
"getting_started.heading": "Primeres passes",
|
"getting_started.heading": "Primers passos",
|
||||||
"getting_started.invite": "Convidar gent",
|
"getting_started.invite": "Convidar gent",
|
||||||
"getting_started.open_source_notice": "Mastodon és un programari de codi obert. Pots contribuir-hi o informar de problemes a GitHub a {github}.",
|
"getting_started.open_source_notice": "Mastodon és un programari de codi obert. Pots contribuir-hi o informar de problemes a GitHub a {github}.",
|
||||||
"getting_started.security": "Configuració del compte",
|
"getting_started.security": "Configuració del compte",
|
||||||
"getting_started.terms": "Termes del servei",
|
"getting_started.terms": "Condicions de servei",
|
||||||
"hashtag.column_header.tag_mode.all": "i {additional}",
|
"hashtag.column_header.tag_mode.all": "i {additional}",
|
||||||
"hashtag.column_header.tag_mode.any": "o {additional}",
|
"hashtag.column_header.tag_mode.any": "o {additional}",
|
||||||
"hashtag.column_header.tag_mode.none": "sense {additional}",
|
"hashtag.column_header.tag_mode.none": "sense {additional}",
|
||||||
|
@ -225,20 +225,20 @@
|
||||||
"intervals.full.days": "{number, plural, one {# dia} other {# dies}}",
|
"intervals.full.days": "{number, plural, one {# dia} other {# dies}}",
|
||||||
"intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",
|
"intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",
|
||||||
"intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}",
|
"intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}",
|
||||||
"keyboard_shortcuts.back": "Navegar enrere",
|
"keyboard_shortcuts.back": "Anar enrere",
|
||||||
"keyboard_shortcuts.blocked": "Obre la llista d'usuaris bloquejats",
|
"keyboard_shortcuts.blocked": "Obre la llista d'usuaris bloquejats",
|
||||||
"keyboard_shortcuts.boost": "Impulsa publicació",
|
"keyboard_shortcuts.boost": "Impulsa publicació",
|
||||||
"keyboard_shortcuts.column": "Centra columna",
|
"keyboard_shortcuts.column": "Centra la columna",
|
||||||
"keyboard_shortcuts.compose": "Centra l'àrea de composició de text",
|
"keyboard_shortcuts.compose": "Centra l'àrea de composició del text",
|
||||||
"keyboard_shortcuts.description": "Descripció",
|
"keyboard_shortcuts.description": "Descripció",
|
||||||
"keyboard_shortcuts.direct": "Obre la columna de missatges directes",
|
"keyboard_shortcuts.direct": "Obre la columna de missatges directes",
|
||||||
"keyboard_shortcuts.down": "Baixar en la llista",
|
"keyboard_shortcuts.down": "Mou-lo avall en la llista",
|
||||||
"keyboard_shortcuts.enter": "Obrir publicació",
|
"keyboard_shortcuts.enter": "Obre publicació",
|
||||||
"keyboard_shortcuts.favourite": "Afavorir publicació",
|
"keyboard_shortcuts.favourite": "Afavorir publicació",
|
||||||
"keyboard_shortcuts.favourites": "Obre la llista de favorits",
|
"keyboard_shortcuts.favourites": "Obre la llista de preferits",
|
||||||
"keyboard_shortcuts.federated": "Obre la línia de temps federada",
|
"keyboard_shortcuts.federated": "Obre la línia de temps federada",
|
||||||
"keyboard_shortcuts.heading": "Dreceres de teclat",
|
"keyboard_shortcuts.heading": "Dreceres de teclat",
|
||||||
"keyboard_shortcuts.home": "Obre la línia de temps Inici",
|
"keyboard_shortcuts.home": "Obre la línia de temps de l'Inici",
|
||||||
"keyboard_shortcuts.hotkey": "Tecla d'accés directe",
|
"keyboard_shortcuts.hotkey": "Tecla d'accés directe",
|
||||||
"keyboard_shortcuts.legend": "Mostra aquesta llegenda",
|
"keyboard_shortcuts.legend": "Mostra aquesta llegenda",
|
||||||
"keyboard_shortcuts.local": "Obre la línia de temps local",
|
"keyboard_shortcuts.local": "Obre la línia de temps local",
|
||||||
|
@ -246,17 +246,17 @@
|
||||||
"keyboard_shortcuts.muted": "Obre la llista d'usuaris silenciats",
|
"keyboard_shortcuts.muted": "Obre la llista d'usuaris silenciats",
|
||||||
"keyboard_shortcuts.my_profile": "Obre el teu perfil",
|
"keyboard_shortcuts.my_profile": "Obre el teu perfil",
|
||||||
"keyboard_shortcuts.notifications": "Obre la columna de notificacions",
|
"keyboard_shortcuts.notifications": "Obre la columna de notificacions",
|
||||||
"keyboard_shortcuts.open_media": "Obre mèdia",
|
"keyboard_shortcuts.open_media": "Obre multimèdia",
|
||||||
"keyboard_shortcuts.pinned": "Obrir la llista de publicacions fixades",
|
"keyboard_shortcuts.pinned": "Obrir la llista de publicacions fixades",
|
||||||
"keyboard_shortcuts.profile": "Obre el perfil de l'autor",
|
"keyboard_shortcuts.profile": "Obre el perfil de l'autor",
|
||||||
"keyboard_shortcuts.reply": "Respon publicació",
|
"keyboard_shortcuts.reply": "Respon a la publicació",
|
||||||
"keyboard_shortcuts.requests": "Obre la llista de sol·licituds de seguiment",
|
"keyboard_shortcuts.requests": "Obre la llista de les sol·licituds de seguiment",
|
||||||
"keyboard_shortcuts.search": "Centra la barra de cerca",
|
"keyboard_shortcuts.search": "Centra la barra de cerca",
|
||||||
"keyboard_shortcuts.spoilers": "Mostra/amaga el camp CW",
|
"keyboard_shortcuts.spoilers": "Mostra/amaga el camp CW",
|
||||||
"keyboard_shortcuts.start": "Obre la columna \"Primeres passes\"",
|
"keyboard_shortcuts.start": "Obre la columna \"Primers passos\"",
|
||||||
"keyboard_shortcuts.toggle_hidden": "Mostra/oculta el text marcat com a sensible",
|
"keyboard_shortcuts.toggle_hidden": "Mostra/oculta el text marcat com a sensible",
|
||||||
"keyboard_shortcuts.toggle_sensitivity": "Mostra/amaga contingut multimèdia",
|
"keyboard_shortcuts.toggle_sensitivity": "Mostra/amaga contingut multimèdia",
|
||||||
"keyboard_shortcuts.toot": "Iniciar una nova publicació",
|
"keyboard_shortcuts.toot": "Inicia una nova publicació",
|
||||||
"keyboard_shortcuts.unfocus": "Descentra l'àrea de composició de text/cerca",
|
"keyboard_shortcuts.unfocus": "Descentra l'àrea de composició de text/cerca",
|
||||||
"keyboard_shortcuts.up": "Moure amunt en la llista",
|
"keyboard_shortcuts.up": "Moure amunt en la llista",
|
||||||
"lightbox.close": "Tanca",
|
"lightbox.close": "Tanca",
|
||||||
|
@ -264,45 +264,45 @@
|
||||||
"lightbox.expand": "Amplia el quadre de visualització de l’imatge",
|
"lightbox.expand": "Amplia el quadre de visualització de l’imatge",
|
||||||
"lightbox.next": "Següent",
|
"lightbox.next": "Següent",
|
||||||
"lightbox.previous": "Anterior",
|
"lightbox.previous": "Anterior",
|
||||||
"lists.account.add": "Afegir a la llista",
|
"lists.account.add": "Afegeix a la llista",
|
||||||
"lists.account.remove": "Treure de la llista",
|
"lists.account.remove": "Elimina de la llista",
|
||||||
"lists.delete": "Esborrar llista",
|
"lists.delete": "Esborra la llista",
|
||||||
"lists.edit": "Editar llista",
|
"lists.edit": "Edita la llista",
|
||||||
"lists.edit.submit": "Canvi de títol",
|
"lists.edit.submit": "Canvia de títol",
|
||||||
"lists.new.create": "Afegir llista",
|
"lists.new.create": "Afegeix llista",
|
||||||
"lists.new.title_placeholder": "Nou títol de llista",
|
"lists.new.title_placeholder": "Nou títol de la llista",
|
||||||
"lists.replies_policy.followed": "Qualsevol usuari seguit",
|
"lists.replies_policy.followed": "Qualsevol usuari que segueixis",
|
||||||
"lists.replies_policy.list": "Membres de la llista",
|
"lists.replies_policy.list": "Membres de la llista",
|
||||||
"lists.replies_policy.none": "Ningú",
|
"lists.replies_policy.none": "Ningú",
|
||||||
"lists.replies_policy.title": "Mostra respostes a:",
|
"lists.replies_policy.title": "Mostra respostes a:",
|
||||||
"lists.search": "Cercar entre les persones que segueixes",
|
"lists.search": "Cerca entre les persones que segueixes",
|
||||||
"lists.subheading": "Les teves llistes",
|
"lists.subheading": "Les teves llistes",
|
||||||
"load_pending": "{count, plural, one {# element nou} other {# elements nous}}",
|
"load_pending": "{count, plural, one {# element nou} other {# elements nous}}",
|
||||||
"loading_indicator.label": "Carregant...",
|
"loading_indicator.label": "Carregant...",
|
||||||
"media_gallery.toggle_visible": "{number, plural, one {Amaga imatge} other {Amaga imatges}}",
|
"media_gallery.toggle_visible": "{number, plural, one {Amaga imatge} other {Amaga imatges}}",
|
||||||
"missing_indicator.label": "No trobat",
|
"missing_indicator.label": "No s'ha trobat",
|
||||||
"missing_indicator.sublabel": "Aquest recurs no pot ser trobat",
|
"missing_indicator.sublabel": "Aquest recurs no s'ha trobat",
|
||||||
"mute_modal.duration": "Durada",
|
"mute_modal.duration": "Durada",
|
||||||
"mute_modal.hide_notifications": "Amagar notificacions d'aquest usuari?",
|
"mute_modal.hide_notifications": "Amagar les notificacions d'aquest usuari?",
|
||||||
"mute_modal.indefinite": "Indefinit",
|
"mute_modal.indefinite": "Indefinit",
|
||||||
"navigation_bar.apps": "Aplicacions mòbils",
|
"navigation_bar.apps": "Aplicacions mòbils",
|
||||||
"navigation_bar.blocks": "Usuaris bloquejats",
|
"navigation_bar.blocks": "Usuaris bloquejats",
|
||||||
"navigation_bar.bookmarks": "Marcadors",
|
"navigation_bar.bookmarks": "Marcadors",
|
||||||
"navigation_bar.community_timeline": "Línia de temps Local",
|
"navigation_bar.community_timeline": "Línia de temps local",
|
||||||
"navigation_bar.compose": "Redactar una nova publicació",
|
"navigation_bar.compose": "Redacta una nova publicació",
|
||||||
"navigation_bar.direct": "Missatges directes",
|
"navigation_bar.direct": "Missatges directes",
|
||||||
"navigation_bar.discover": "Descobrir",
|
"navigation_bar.discover": "Descobrir",
|
||||||
"navigation_bar.domain_blocks": "Dominis bloquejats",
|
"navigation_bar.domain_blocks": "Dominis bloquejats",
|
||||||
"navigation_bar.edit_profile": "Editar perfil",
|
"navigation_bar.edit_profile": "Edita el perfil",
|
||||||
"navigation_bar.explore": "Explora",
|
"navigation_bar.explore": "Explora",
|
||||||
"navigation_bar.favourites": "Favorits",
|
"navigation_bar.favourites": "Preferits",
|
||||||
"navigation_bar.filters": "Paraules silenciades",
|
"navigation_bar.filters": "Paraules silenciades",
|
||||||
"navigation_bar.follow_requests": "Sol·licituds de seguiment",
|
"navigation_bar.follow_requests": "Sol·licituds de seguiment",
|
||||||
"navigation_bar.follows_and_followers": "Seguits i seguidors",
|
"navigation_bar.follows_and_followers": "Seguits i seguidors",
|
||||||
"navigation_bar.info": "Quant a aquest servidor",
|
"navigation_bar.info": "Sobre aquest servidor",
|
||||||
"navigation_bar.keyboard_shortcuts": "Dreceres de teclat",
|
"navigation_bar.keyboard_shortcuts": "Dreceres de teclat",
|
||||||
"navigation_bar.lists": "Llistes",
|
"navigation_bar.lists": "Llistes",
|
||||||
"navigation_bar.logout": "Tancar sessió",
|
"navigation_bar.logout": "Tanca la sessió",
|
||||||
"navigation_bar.mutes": "Usuaris silenciats",
|
"navigation_bar.mutes": "Usuaris silenciats",
|
||||||
"navigation_bar.personal": "Personal",
|
"navigation_bar.personal": "Personal",
|
||||||
"navigation_bar.pins": "Publicacions fixades",
|
"navigation_bar.pins": "Publicacions fixades",
|
||||||
|
@ -315,12 +315,12 @@
|
||||||
"notification.follow_request": "{name} ha sol·licitat seguir-te",
|
"notification.follow_request": "{name} ha sol·licitat seguir-te",
|
||||||
"notification.mention": "{name} t'ha esmentat",
|
"notification.mention": "{name} t'ha esmentat",
|
||||||
"notification.own_poll": "La teva enquesta ha finalitzat",
|
"notification.own_poll": "La teva enquesta ha finalitzat",
|
||||||
"notification.poll": "Ha finalitzat una enquesta en la que has votat",
|
"notification.poll": "Ha finalitzat una enquesta en què has votat",
|
||||||
"notification.reblog": "{name} ha impulsat el teu estat",
|
"notification.reblog": "{name} ha impulsat el teu estat",
|
||||||
"notification.status": "ha publicat {name}",
|
"notification.status": "ha publicat {name}",
|
||||||
"notification.update": "{name} ha editat una publicació",
|
"notification.update": "{name} ha editat una publicació",
|
||||||
"notifications.clear": "Netejar notificacions",
|
"notifications.clear": "Esborra les notificacions",
|
||||||
"notifications.clear_confirmation": "Estàs segur que vols esborrar permanentment totes les teves notificacions?",
|
"notifications.clear_confirmation": "Segur que vols esborrar permanentment totes les teves notificacions?",
|
||||||
"notifications.column_settings.admin.sign_up": "Nous registres:",
|
"notifications.column_settings.admin.sign_up": "Nous registres:",
|
||||||
"notifications.column_settings.alert": "Notificacions d'escriptori",
|
"notifications.column_settings.alert": "Notificacions d'escriptori",
|
||||||
"notifications.column_settings.favourite": "Preferits:",
|
"notifications.column_settings.favourite": "Preferits:",
|
||||||
|
@ -337,24 +337,24 @@
|
||||||
"notifications.column_settings.sound": "Reproduir so",
|
"notifications.column_settings.sound": "Reproduir so",
|
||||||
"notifications.column_settings.status": "Noves publicacions:",
|
"notifications.column_settings.status": "Noves publicacions:",
|
||||||
"notifications.column_settings.unread_notifications.category": "Notificacions no llegides",
|
"notifications.column_settings.unread_notifications.category": "Notificacions no llegides",
|
||||||
"notifications.column_settings.unread_notifications.highlight": "Destaca notificacions no llegides",
|
"notifications.column_settings.unread_notifications.highlight": "Destaca les notificacions no llegides",
|
||||||
"notifications.column_settings.update": "Edicions:",
|
"notifications.column_settings.update": "Edicions:",
|
||||||
"notifications.filter.all": "Tots",
|
"notifications.filter.all": "Tots",
|
||||||
"notifications.filter.boosts": "Impulsos",
|
"notifications.filter.boosts": "Impulsos",
|
||||||
"notifications.filter.favourites": "Favorits",
|
"notifications.filter.favourites": "Preferits",
|
||||||
"notifications.filter.follows": "Seguiments",
|
"notifications.filter.follows": "Seguiments",
|
||||||
"notifications.filter.mentions": "Mencions",
|
"notifications.filter.mentions": "Mencions",
|
||||||
"notifications.filter.polls": "Resultats de l'enquesta",
|
"notifications.filter.polls": "Resultats de l'enquesta",
|
||||||
"notifications.filter.statuses": "Actualitzacions de gent que segueixes",
|
"notifications.filter.statuses": "Actualitzacions de gent que segueixes",
|
||||||
"notifications.grant_permission": "Concedir permís.",
|
"notifications.grant_permission": "Concedir permís.",
|
||||||
"notifications.group": "{count} notificacions",
|
"notifications.group": "{count} notificacions",
|
||||||
"notifications.mark_as_read": "Marca cada notificació com a llegida",
|
"notifications.mark_as_read": "Marca totes les notificacions com a llegides",
|
||||||
"notifications.permission_denied": "Les notificacions d’escriptori no estan disponibles perquè prèviament s’ha denegat el permís al navegador",
|
"notifications.permission_denied": "Les notificacions d’escriptori no estan disponibles perquè prèviament s’ha denegat el permís al navegador",
|
||||||
"notifications.permission_denied_alert": "No es poden activar les notificacions del escriptori perquè el permís del navegador ha estat denegat abans",
|
"notifications.permission_denied_alert": "No es poden activar les notificacions de l'escriptori perquè el permís del navegador s'ha denegat prèviament",
|
||||||
"notifications.permission_required": "Les notificacions d'escriptori no estan disponibles perquè el permís requerit no ha estat concedit.",
|
"notifications.permission_required": "Les notificacions d'escriptori no estan disponibles perquè el permís requerit no ha estat concedit.",
|
||||||
"notifications_permission_banner.enable": "Activar les notificacions d’escriptori",
|
"notifications_permission_banner.enable": "Activa les notificacions d’escriptori",
|
||||||
"notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no és obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.",
|
"notifications_permission_banner.how_to_control": "Per rebre notificacions quan Mastodon no estigui obert, cal activar les notificacions d’escriptori. Pots controlar exactament quins tipus d’interaccions generen notificacions d’escriptori si actives el botó {icon} de dalt.",
|
||||||
"notifications_permission_banner.title": "Mai et perdis res",
|
"notifications_permission_banner.title": "No et perdis mai res",
|
||||||
"picture_in_picture.restore": "Retorna’l",
|
"picture_in_picture.restore": "Retorna’l",
|
||||||
"poll.closed": "Finalitzada",
|
"poll.closed": "Finalitzada",
|
||||||
"poll.refresh": "Actualitza",
|
"poll.refresh": "Actualitza",
|
||||||
|
@ -363,12 +363,12 @@
|
||||||
"poll.vote": "Vota",
|
"poll.vote": "Vota",
|
||||||
"poll.voted": "Vas votar per aquesta resposta",
|
"poll.voted": "Vas votar per aquesta resposta",
|
||||||
"poll.votes": "{votes, plural, one {# vot} other {# vots}}",
|
"poll.votes": "{votes, plural, one {# vot} other {# vots}}",
|
||||||
"poll_button.add_poll": "Afegir una enquesta",
|
"poll_button.add_poll": "Afegeix una enquesta",
|
||||||
"poll_button.remove_poll": "Elimina l'enquesta",
|
"poll_button.remove_poll": "Elimina l'enquesta",
|
||||||
"privacy.change": "Ajustar la privacitat de la publicació",
|
"privacy.change": "Ajusta la privacitat de la publicació",
|
||||||
"privacy.direct.long": "Visible només per als usuaris esmentats",
|
"privacy.direct.long": "Visible només per als usuaris esmentats",
|
||||||
"privacy.direct.short": "Directe",
|
"privacy.direct.short": "Directe",
|
||||||
"privacy.private.long": "Visible només pels seguidors",
|
"privacy.private.long": "Visible només per als seguidors",
|
||||||
"privacy.private.short": "Només seguidors",
|
"privacy.private.short": "Només seguidors",
|
||||||
"privacy.public.long": "Visible per a tothom, mostrat en línies de temps públiques",
|
"privacy.public.long": "Visible per a tothom, mostrat en línies de temps públiques",
|
||||||
"privacy.public.short": "Públic",
|
"privacy.public.short": "Públic",
|
||||||
|
@ -376,7 +376,7 @@
|
||||||
"privacy.unlisted.short": "No llistat",
|
"privacy.unlisted.short": "No llistat",
|
||||||
"refresh": "Actualitza",
|
"refresh": "Actualitza",
|
||||||
"regeneration_indicator.label": "Carregant…",
|
"regeneration_indicator.label": "Carregant…",
|
||||||
"regeneration_indicator.sublabel": "S'està preparant la teva línia de temps Inici!",
|
"regeneration_indicator.sublabel": "S'està preparant la teva línia de temps d'Inici!",
|
||||||
"relative_time.days": "fa {number} dies",
|
"relative_time.days": "fa {number} dies",
|
||||||
"relative_time.full.days": "fa {number, plural, one {# dia} other {# dies}}",
|
"relative_time.full.days": "fa {number, plural, one {# dia} other {# dies}}",
|
||||||
"relative_time.full.hours": "fa {number, plural, one {# hora} other {# hores}}",
|
"relative_time.full.hours": "fa {number, plural, one {# hora} other {# hores}}",
|
||||||
|
@ -388,9 +388,9 @@
|
||||||
"relative_time.minutes": "fa {number} minuts",
|
"relative_time.minutes": "fa {number} minuts",
|
||||||
"relative_time.seconds": "fa {number} segons",
|
"relative_time.seconds": "fa {number} segons",
|
||||||
"relative_time.today": "avui",
|
"relative_time.today": "avui",
|
||||||
"reply_indicator.cancel": "Cancel·lar",
|
"reply_indicator.cancel": "Cancel·la",
|
||||||
"report.block": "Bloqueja",
|
"report.block": "Bloqueja",
|
||||||
"report.block_explanation": "No veuràs les seves publicacions. Ell no podran veure les teves publicacions ni seguir-te. Ells podran dir que estan bloquejats.",
|
"report.block_explanation": "No veuràs les seves publicacions. Ells no podran veure les teves publicacions ni et podran seguir. Podran saber que estan bloquejats.",
|
||||||
"report.categories.other": "Altres",
|
"report.categories.other": "Altres",
|
||||||
"report.categories.spam": "Contingut brossa",
|
"report.categories.spam": "Contingut brossa",
|
||||||
"report.categories.violation": "El contingut viola una o més regles del servidor",
|
"report.categories.violation": "El contingut viola una o més regles del servidor",
|
||||||
|
@ -399,39 +399,39 @@
|
||||||
"report.category.title_account": "perfil",
|
"report.category.title_account": "perfil",
|
||||||
"report.category.title_status": "publicació",
|
"report.category.title_status": "publicació",
|
||||||
"report.close": "Fet",
|
"report.close": "Fet",
|
||||||
"report.comment.title": "Hi ha res més que penses hauriem de saber?",
|
"report.comment.title": "Hi ha res més que creguis que hauríem de saber?",
|
||||||
"report.forward": "Reenvia a {target}",
|
"report.forward": "Reenvia a {target}",
|
||||||
"report.forward_hint": "Aquest compte és d'un altre servidor. Enviar-hi també una copia anònima del informe?",
|
"report.forward_hint": "Aquest compte és d'un altre servidor. Vols enviar-li també una còpia anònima de l'informe?",
|
||||||
"report.mute": "Silencia",
|
"report.mute": "Silencia",
|
||||||
"report.mute_explanation": "No veuràs les seves publicacions. Ells encara poden seguir-te i veure les teves publicacions però no sabran que han estat silenciats.",
|
"report.mute_explanation": "No veuràs les seves publicacions. Encara poden seguir-te i veure les teves publicacions, però no sabran que han estat silenciats.",
|
||||||
"report.next": "Següent",
|
"report.next": "Següent",
|
||||||
"report.placeholder": "Comentaris addicionals",
|
"report.placeholder": "Comentaris addicionals",
|
||||||
"report.reasons.dislike": "No m'agrada",
|
"report.reasons.dislike": "No m'agrada",
|
||||||
"report.reasons.dislike_description": "Això no és quelcom que vulguis veure",
|
"report.reasons.dislike_description": "No és una cosa que vulguis veure",
|
||||||
"report.reasons.other": "Això és una altre cosa",
|
"report.reasons.other": "És una altra cosa",
|
||||||
"report.reasons.other_description": "El problema no encaixa en altres categories",
|
"report.reasons.other_description": "El problema no encaixa a les altres categories",
|
||||||
"report.reasons.spam": "Això és contingut brossa",
|
"report.reasons.spam": "És contingut brossa",
|
||||||
"report.reasons.spam_description": "Enllaços maliciosos, falç compromís o respostes repetitives",
|
"report.reasons.spam_description": "Enllaços maliciosos, implicació falsa o respostes repetitives",
|
||||||
"report.reasons.violation": "Viola les regles del servidor",
|
"report.reasons.violation": "Viola les regles del servidor",
|
||||||
"report.reasons.violation_description": "Ets conscient que trenca regles especifiques",
|
"report.reasons.violation_description": "Ets conscient que trenca regles especifiques",
|
||||||
"report.rules.subtitle": "Selecciona totes les aplicables",
|
"report.rules.subtitle": "Selecciona tot el que correspongui",
|
||||||
"report.rules.title": "Quines regles han estat violades?",
|
"report.rules.title": "Quines regles s'han violat?",
|
||||||
"report.statuses.subtitle": "Selecciona tots els aplicables",
|
"report.statuses.subtitle": "Selecciona tot el que correspongui",
|
||||||
"report.statuses.title": "Hi ha alguna publicació que recolzi aquest informe?",
|
"report.statuses.title": "Hi ha alguna publicació que recolzi aquest informe?",
|
||||||
"report.submit": "Enviar",
|
"report.submit": "Envia",
|
||||||
"report.target": "Informes {target}",
|
"report.target": "Denunciant a {target}",
|
||||||
"report.thanks.take_action": "Aquestes son les teves opcions per a controlar el que veus a Mastodon:",
|
"report.thanks.take_action": "Aquestes són les teves opcions per controlar el que veus a Mastodon:",
|
||||||
"report.thanks.take_action_actionable": "Mentre ho revisem, pots pendre mesures contra @{name}:",
|
"report.thanks.take_action_actionable": "Mentre ho revisem, pots prendre mesures contra @{name}:",
|
||||||
"report.thanks.title": "No vols veure això?",
|
"report.thanks.title": "No vols veure això?",
|
||||||
"report.thanks.title_actionable": "Gràcies per informar, ho investigarem.",
|
"report.thanks.title_actionable": "Gràcies per denunciar-ho. Ho investigarem.",
|
||||||
"report.unfollow": "Deixar de seguir @{name}",
|
"report.unfollow": "Deixa de seguir @{name}",
|
||||||
"report.unfollow_explanation": "Estàs seguint aquest compte. Per a no veure més les seves publicacions en la teva línia de temps Inici, deixa de seguir-lo.",
|
"report.unfollow_explanation": "Estàs seguint aquest compte. Per no veure les seves publicacions a la teva línia de temps d'Inici, deixa de seguir-lo.",
|
||||||
"search.placeholder": "Cercar",
|
"search.placeholder": "Cerca",
|
||||||
"search_popout.search_format": "Format de cerca avançada",
|
"search_popout.search_format": "Format de cerca avançada",
|
||||||
"search_popout.tips.full_text": "Text simple recupera publicacions que has escrit, les afavorides, les impulsades o en les que has estat esmentat, així com usuaris, noms d'usuari i etiquetes.",
|
"search_popout.tips.full_text": "El text simple recupera publicacions que has escrit, marcat com a preferides, que has impulsat o on t'han esmentat, així com els usuaris, els noms d'usuaris i les etiquetes.",
|
||||||
"search_popout.tips.hashtag": "etiqueta",
|
"search_popout.tips.hashtag": "etiqueta",
|
||||||
"search_popout.tips.status": "publicació",
|
"search_popout.tips.status": "publicació",
|
||||||
"search_popout.tips.text": "El text simple retorna coincidències amb els noms de visualització, els noms d'usuari i les etiquetes",
|
"search_popout.tips.text": "El text simple recupera coincidències amb els usuaris, els noms d'usuari i les etiquetes",
|
||||||
"search_popout.tips.user": "usuari",
|
"search_popout.tips.user": "usuari",
|
||||||
"search_results.accounts": "Gent",
|
"search_results.accounts": "Gent",
|
||||||
"search_results.all": "Tots",
|
"search_results.all": "Tots",
|
||||||
|
@ -441,53 +441,53 @@
|
||||||
"search_results.statuses_fts_disabled": "La cerca de publicacions pel seu contingut no està habilitada en aquest servidor Mastodon.",
|
"search_results.statuses_fts_disabled": "La cerca de publicacions pel seu contingut no està habilitada en aquest servidor Mastodon.",
|
||||||
"search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
|
"search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
|
||||||
"status.admin_account": "Obre l'interfície de moderació per a @{name}",
|
"status.admin_account": "Obre l'interfície de moderació per a @{name}",
|
||||||
"status.admin_status": "Obrir aquesta publicació a la interfície de moderació",
|
"status.admin_status": "Obre aquesta publicació a la interfície de moderació",
|
||||||
"status.block": "Bloqueja @{name}",
|
"status.block": "Bloqueja @{name}",
|
||||||
"status.bookmark": "Marcador",
|
"status.bookmark": "Afavoreix",
|
||||||
"status.cancel_reblog_private": "Desfer l'impuls",
|
"status.cancel_reblog_private": "Desfés l'impuls",
|
||||||
"status.cannot_reblog": "Aquesta publicació no pot ser impulsada",
|
"status.cannot_reblog": "Aquesta publicació no es pot impulsar",
|
||||||
"status.copy": "Copia l'enllaç a l'estat",
|
"status.copy": "Copia l'enllaç a l'estat",
|
||||||
"status.delete": "Esborra",
|
"status.delete": "Esborra",
|
||||||
"status.detailed_status": "Visualització detallada de la conversa",
|
"status.detailed_status": "Visualització detallada de la conversa",
|
||||||
"status.direct": "Missatge directe @{name}",
|
"status.direct": "Envia missatge directe a @{name}",
|
||||||
"status.edit": "Edita",
|
"status.edit": "Edita",
|
||||||
"status.edited": "Editat {date}",
|
"status.edited": "Editat {date}",
|
||||||
"status.edited_x_times": "Editat {count, plural, one {{count} vegada} other {{count} vegades}}",
|
"status.edited_x_times": "Editat {count, plural, one {{count} vegada} other {{count} vegades}}",
|
||||||
"status.embed": "Incrustat",
|
"status.embed": "Incrusta",
|
||||||
"status.favourite": "Favorit",
|
"status.favourite": "Favorit",
|
||||||
"status.filtered": "Filtrat",
|
"status.filtered": "Filtrat",
|
||||||
"status.history.created": "{name} ha creat {date}",
|
"status.history.created": "{name} ha creat {date}",
|
||||||
"status.history.edited": "{name} ha editat {date}",
|
"status.history.edited": "{name} ha editat {date}",
|
||||||
"status.load_more": "Carrega més",
|
"status.load_more": "Carregar-ne més",
|
||||||
"status.media_hidden": "Multimèdia amagat",
|
"status.media_hidden": "Multimèdia amagada",
|
||||||
"status.mention": "Esmentar @{name}",
|
"status.mention": "Esmenta @{name}",
|
||||||
"status.more": "Més",
|
"status.more": "Més",
|
||||||
"status.mute": "Silenciar @{name}",
|
"status.mute": "Silencia @{name}",
|
||||||
"status.mute_conversation": "Silenciar conversació",
|
"status.mute_conversation": "Silencia conversació",
|
||||||
"status.open": "Ampliar aquest estat",
|
"status.open": "Amplia la publicació",
|
||||||
"status.pin": "Fixa en el perfil",
|
"status.pin": "Fixa en el perfil",
|
||||||
"status.pinned": "Publicació fixada",
|
"status.pinned": "Publicació fixada",
|
||||||
"status.read_more": "Llegir més",
|
"status.read_more": "Més informació",
|
||||||
"status.reblog": "Impuls",
|
"status.reblog": "Impulsa",
|
||||||
"status.reblog_private": "Impulsar amb la visibilitat original",
|
"status.reblog_private": "Impulsa amb la visibilitat original",
|
||||||
"status.reblogged_by": "{name} ha impulsat",
|
"status.reblogged_by": "{name} ha impulsat",
|
||||||
"status.reblogs.empty": "Encara ningú no ha impulsat aquesta publicació. Quan algú ho faci, apareixeran aquí.",
|
"status.reblogs.empty": "Encara ningú no ha impulsat aquesta publicació. Quan algú ho faci, apareixeran aquí.",
|
||||||
"status.redraft": "Esborrar i reescriure",
|
"status.redraft": "Esborra-la i reescriure-la",
|
||||||
"status.remove_bookmark": "Suprimeix el marcador",
|
"status.remove_bookmark": "Suprimeix el marcador",
|
||||||
"status.reply": "Respondre",
|
"status.reply": "Respon",
|
||||||
"status.replyAll": "Respondre al fil",
|
"status.replyAll": "Respon al fil",
|
||||||
"status.report": "Informar sobre @{name}",
|
"status.report": "Denuncia @{name}",
|
||||||
"status.sensitive_warning": "Contingut sensible",
|
"status.sensitive_warning": "Contingut sensible",
|
||||||
"status.share": "Compartir",
|
"status.share": "Comparteix",
|
||||||
"status.show_less": "Mostra menys",
|
"status.show_less": "Mostrar-ne menys",
|
||||||
"status.show_less_all": "Mostra menys per a tot",
|
"status.show_less_all": "Mostrar-ne menys per a tot",
|
||||||
"status.show_more": "Mostra més",
|
"status.show_more": "Mostrar-ne més",
|
||||||
"status.show_more_all": "Mostra més per a tot",
|
"status.show_more_all": "Mostrar-ne més per a tot",
|
||||||
"status.show_thread": "Mostra el fil",
|
"status.show_thread": "Mostra el fil",
|
||||||
"status.uncached_media_warning": "No està disponible",
|
"status.uncached_media_warning": "No està disponible",
|
||||||
"status.unmute_conversation": "Activar conversació",
|
"status.unmute_conversation": "No silenciïs la conversa",
|
||||||
"status.unpin": "Deslliga del perfil",
|
"status.unpin": "No fixis al perfil",
|
||||||
"suggestions.dismiss": "Descartar suggeriment",
|
"suggestions.dismiss": "Ignora el suggeriment",
|
||||||
"suggestions.header": "És possible que estiguis interessat en…",
|
"suggestions.header": "És possible que estiguis interessat en…",
|
||||||
"tabs_bar.federated_timeline": "Federat",
|
"tabs_bar.federated_timeline": "Federat",
|
||||||
"tabs_bar.home": "Inici",
|
"tabs_bar.home": "Inici",
|
||||||
|
@ -503,23 +503,23 @@
|
||||||
"timeline_hint.resources.followers": "Seguidors",
|
"timeline_hint.resources.followers": "Seguidors",
|
||||||
"timeline_hint.resources.follows": "Seguiments",
|
"timeline_hint.resources.follows": "Seguiments",
|
||||||
"timeline_hint.resources.statuses": "Publicacions més antigues",
|
"timeline_hint.resources.statuses": "Publicacions més antigues",
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persones}} parlant-hi",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} persona} other {{counter} persones}} parlant-ne",
|
||||||
"trends.trending_now": "Ara en tendència",
|
"trends.trending_now": "En tendència",
|
||||||
"ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.",
|
"ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.",
|
||||||
"units.short.billion": "{count}B",
|
"units.short.billion": "{count}B",
|
||||||
"units.short.million": "{count}M",
|
"units.short.million": "{count}M",
|
||||||
"units.short.thousand": "{count}K",
|
"units.short.thousand": "{count}K",
|
||||||
"upload_area.title": "Arrossega i deixa anar per a carregar",
|
"upload_area.title": "Arrossega i deixa anar per carregar",
|
||||||
"upload_button.label": "Afegir mèdia, un vídeo o un fitxer d'audio",
|
"upload_button.label": "Afegeix imatges, un vídeo o un fitxer d'àudio",
|
||||||
"upload_error.limit": "S'ha superat el límit de càrrega d'arxius.",
|
"upload_error.limit": "S'ha superat el límit de càrrega d'arxius.",
|
||||||
"upload_error.poll": "No es permet l'enviament de fitxers en les enquestes.",
|
"upload_error.poll": "No es permet carregar fitxers a les enquestes.",
|
||||||
"upload_form.audio_description": "Descriviu per a les persones amb pèrdua auditiva",
|
"upload_form.audio_description": "Descripció per a persones amb discapacitat auditiva",
|
||||||
"upload_form.description": "Descriure per els que tenen problemes visuals",
|
"upload_form.description": "Descripció per a persones amb discapacitat visual",
|
||||||
"upload_form.description_missing": "Cap descripció afegida",
|
"upload_form.description_missing": "No s'ha afegit cap descripció",
|
||||||
"upload_form.edit": "Edita",
|
"upload_form.edit": "Edita",
|
||||||
"upload_form.thumbnail": "Canvia la miniatura",
|
"upload_form.thumbnail": "Canvia la miniatura",
|
||||||
"upload_form.undo": "Esborra",
|
"upload_form.undo": "Esborra",
|
||||||
"upload_form.video_description": "Descriu per a les persones amb pèrdua auditiva o deficiència visual",
|
"upload_form.video_description": "Descripció per a persones amb discapacitat auditiva o amb discapacitat visual",
|
||||||
"upload_modal.analyzing_picture": "Analitzant imatge…",
|
"upload_modal.analyzing_picture": "Analitzant imatge…",
|
||||||
"upload_modal.apply": "Aplica",
|
"upload_modal.apply": "Aplica",
|
||||||
"upload_modal.applying": "Aplicant…",
|
"upload_modal.applying": "Aplicant…",
|
||||||
|
@ -527,18 +527,18 @@
|
||||||
"upload_modal.description_placeholder": "Una ràpida guineu marró salta sobre el gos mandrós",
|
"upload_modal.description_placeholder": "Una ràpida guineu marró salta sobre el gos mandrós",
|
||||||
"upload_modal.detect_text": "Detecta el text de l'imatge",
|
"upload_modal.detect_text": "Detecta el text de l'imatge",
|
||||||
"upload_modal.edit_media": "Editar multimèdia",
|
"upload_modal.edit_media": "Editar multimèdia",
|
||||||
"upload_modal.hint": "Fes clic o arrossega el cercle en la previsualització per escollir el punt focal que sempre serà visible de totes les miniatures.",
|
"upload_modal.hint": "Fes clic o arrossega el cercle en la previsualització per escollir el punt focal que sempre serà visible en totes les miniatures.",
|
||||||
"upload_modal.preparing_ocr": "Preparant OCR…",
|
"upload_modal.preparing_ocr": "Preparant OCR…",
|
||||||
"upload_modal.preview_label": "Previsualitza ({ratio})",
|
"upload_modal.preview_label": "Previsualitza ({ratio})",
|
||||||
"upload_progress.label": "Pujant...",
|
"upload_progress.label": "Pujant...",
|
||||||
"video.close": "Tancar el vídeo",
|
"video.close": "Tanca el vídeo",
|
||||||
"video.download": "Descarrega l’arxiu",
|
"video.download": "Descarrega l’arxiu",
|
||||||
"video.exit_fullscreen": "Sortir de pantalla completa",
|
"video.exit_fullscreen": "Surt de la pantalla completa",
|
||||||
"video.expand": "Ampliar el vídeo",
|
"video.expand": "Amplia el vídeo",
|
||||||
"video.fullscreen": "Pantalla completa",
|
"video.fullscreen": "Pantalla completa",
|
||||||
"video.hide": "Amaga vídeo",
|
"video.hide": "Amaga el vídeo",
|
||||||
"video.mute": "Silenciar el so",
|
"video.mute": "Silencia el so",
|
||||||
"video.pause": "Pausa",
|
"video.pause": "Pausa",
|
||||||
"video.play": "Reproduir",
|
"video.play": "Reprodueix",
|
||||||
"video.unmute": "Activar so"
|
"video.unmute": "Activa el so"
|
||||||
}
|
}
|
||||||
|
|
|
@ -442,7 +442,7 @@
|
||||||
"search_results.total": "{count, number} {count, plural, one {دەرئەنجام} other {دەرئەنجام}}",
|
"search_results.total": "{count, number} {count, plural, one {دەرئەنجام} other {دەرئەنجام}}",
|
||||||
"status.admin_account": "کردنەوەی میانڕەوی بەڕێوەبەر بۆ @{name}",
|
"status.admin_account": "کردنەوەی میانڕەوی بەڕێوەبەر بۆ @{name}",
|
||||||
"status.admin_status": "ئەم توتە بکەوە لە ناو ڕووکاری بەڕیوەبەر",
|
"status.admin_status": "ئەم توتە بکەوە لە ناو ڕووکاری بەڕیوەبەر",
|
||||||
"status.block": "بلۆکی @{name}",
|
"status.block": "@{name} ئاستەنگ بکە",
|
||||||
"status.bookmark": "نیشانه",
|
"status.bookmark": "نیشانه",
|
||||||
"status.cancel_reblog_private": "بێبەهێزکردن",
|
"status.cancel_reblog_private": "بێبەهێزکردن",
|
||||||
"status.cannot_reblog": "ئەم بابەتە ناتوانرێت بەرزبکرێتەوە",
|
"status.cannot_reblog": "ئەم بابەتە ناتوانرێت بەرزبکرێتەوە",
|
||||||
|
@ -458,12 +458,12 @@
|
||||||
"status.filtered": "پاڵاوتن",
|
"status.filtered": "پاڵاوتن",
|
||||||
"status.history.created": "{name} created {date}",
|
"status.history.created": "{name} created {date}",
|
||||||
"status.history.edited": "{name} edited {date}",
|
"status.history.edited": "{name} edited {date}",
|
||||||
"status.load_more": "بارکردنی زیاتر",
|
"status.load_more": "زیاتر بار بکە",
|
||||||
"status.media_hidden": "میدیای شاراوە",
|
"status.media_hidden": "میدیای شاراوە",
|
||||||
"status.mention": "ناوبنێ @{name}",
|
"status.mention": "ناوبنێ @{name}",
|
||||||
"status.more": "زیاتر",
|
"status.more": "زیاتر",
|
||||||
"status.mute": "بێدەنگکردن @{name}",
|
"status.mute": "@{name} بێدەنگ بکە",
|
||||||
"status.mute_conversation": "گفتوگۆی بێدەنگ",
|
"status.mute_conversation": "بێدەنگی بکە",
|
||||||
"status.open": "ئەم توتە فراوان بکە",
|
"status.open": "ئەم توتە فراوان بکە",
|
||||||
"status.pin": "لکاندن لەسەر پرۆفایل",
|
"status.pin": "لکاندن لەسەر پرۆفایل",
|
||||||
"status.pinned": "توتی چەسپکراو",
|
"status.pinned": "توتی چەسپکراو",
|
||||||
|
@ -478,59 +478,59 @@
|
||||||
"status.replyAll": "بە نووسراوە وەڵام بدەوە",
|
"status.replyAll": "بە نووسراوە وەڵام بدەوە",
|
||||||
"status.report": "گوزارشت @{name}",
|
"status.report": "گوزارشت @{name}",
|
||||||
"status.sensitive_warning": "ناوەڕۆکی هەستیار",
|
"status.sensitive_warning": "ناوەڕۆکی هەستیار",
|
||||||
"status.share": "هاوبەش کردن",
|
"status.share": "هاوبەشی بکە",
|
||||||
"status.show_less": "کەمتر نیشان بدە",
|
"status.show_less": "کەمتر نیشان بدە",
|
||||||
"status.show_less_all": "کەمتر نیشان بدە بۆ هەمووی",
|
"status.show_less_all": "هەمووی بچووک بکەوە",
|
||||||
"status.show_more": "زیاتر پیشان بدە",
|
"status.show_more": "زیاتر نیشان بدە",
|
||||||
"status.show_more_all": "زیاتر نیشان بدە بۆ هەمووی",
|
"status.show_more_all": "زیاتر نیشان بدە بۆ هەمووی",
|
||||||
"status.show_thread": "نیشاندانی گفتوگۆ",
|
"status.show_thread": "نیشاندانی گفتوگۆ",
|
||||||
"status.uncached_media_warning": "بەردەست نیە",
|
"status.uncached_media_warning": "بەردەست نیە",
|
||||||
"status.unmute_conversation": "گفتوگۆی بێدەنگ",
|
"status.unmute_conversation": "گفتوگۆی بێدەنگ",
|
||||||
"status.unpin": "لابردن لە پرۆفایل",
|
"status.unpin": "لە سەرەوە لایبە",
|
||||||
"suggestions.dismiss": "ڕەتکردنەوەی پێشنیار",
|
"suggestions.dismiss": "ڕەتکردنەوەی پێشنیار",
|
||||||
"suggestions.header": "لەوانەیە حەزت لەمەش بێت…",
|
"suggestions.header": "لەوانەیە حەزت لەمەش بێت…",
|
||||||
"tabs_bar.federated_timeline": "گشتی",
|
"tabs_bar.federated_timeline": "گشتی",
|
||||||
"tabs_bar.home": "سەرەتا",
|
"tabs_bar.home": "سەرەتا",
|
||||||
"tabs_bar.local_timeline": "ناوخۆیی",
|
"tabs_bar.local_timeline": "ناوخۆیی",
|
||||||
"tabs_bar.notifications": "ئاگادارییەکان",
|
"tabs_bar.notifications": "ئاگادارییەکان",
|
||||||
"tabs_bar.search": "گەڕان",
|
"tabs_bar.search": "بگەڕێ",
|
||||||
"time_remaining.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژ}} ماوە",
|
"time_remaining.days": "{number, plural, one {# ڕۆژ} other {# ڕۆژ}} ماوە",
|
||||||
"time_remaining.hours": "{number, plural, one {# کات} other {# کات}} ماوە",
|
"time_remaining.hours": "{number, plural, one {# کاتژمێر} other {# کاتژمێر}} ماوە",
|
||||||
"time_remaining.minutes": "{number, plural, one {# خۆلەک} other {# خولەک}} ماوە",
|
"time_remaining.minutes": "{number, plural, one {# خولەک} other {# خولەک}} ماوە",
|
||||||
"time_remaining.moments": "ئەو ساتانەی ماونەتەوە",
|
"time_remaining.moments": "کاتی ماوە",
|
||||||
"time_remaining.seconds": "{number, plural, one {# چرکە} other {# چرکە}} ماوە",
|
"time_remaining.seconds": "{number, plural, one {# چرکە} other {# چرکە}} ماوە",
|
||||||
"timeline_hint.remote_resource_not_displayed": "{resource} لە ڕاژەکانی ترەوە پیشان نادرێت.",
|
"timeline_hint.remote_resource_not_displayed": "{resource} لە ڕاژەکانی ترەوە پیشان نادرێت.",
|
||||||
"timeline_hint.resources.followers": "شوێنکەوتووان",
|
"timeline_hint.resources.followers": "شوێنکەوتوو",
|
||||||
"timeline_hint.resources.follows": "شوێنکەوتن",
|
"timeline_hint.resources.follows": "شوێنکەوتن",
|
||||||
"timeline_hint.resources.statuses": "توتی کۆن",
|
"timeline_hint.resources.statuses": "نێردراوی کۆن",
|
||||||
"trends.counter_by_accounts": "{count, plural, one {{counter} کەس} other {{counter} کەس}} گفتوگۆ دەکا",
|
"trends.counter_by_accounts": "{count, plural, one {{counter} کەس} other {{counter} کەس}} گفتوگۆ دەکا",
|
||||||
"trends.trending_now": "گۆگران",
|
"trends.trending_now": "ڕۆژەڤ",
|
||||||
"ui.beforeunload": "ڕەشنووسەکەت لە دەست دەچێت ئەگەر لە ماستۆدۆن بڕۆیت.",
|
"ui.beforeunload": "ڕەشنووسەکەت لەدەست دەچێت ئەگەر ماستۆدۆن جێ بهێڵیت.",
|
||||||
"units.short.billion": "{count}ملیار",
|
"units.short.billion": "{count} ملیار",
|
||||||
"units.short.million": "{count}ملیۆن",
|
"units.short.million": "{count} ملیۆن",
|
||||||
"units.short.thousand": "{count}هەزار",
|
"units.short.thousand": "{count} هەزار",
|
||||||
"upload_area.title": "ڕاکێشان & دانان بۆ بارکردن",
|
"upload_area.title": "فایلەکانت ڕابکێشە ئێرە بۆ بەرزکردنەوەیان",
|
||||||
"upload_button.label": "زیادکردنی وێنەکان، ڤیدیۆیەک یان فایلێکی دەنگی",
|
"upload_button.label": "وێنە، ڤیدیۆ یان پەیامی دەنگی زیاد بکە",
|
||||||
"upload_error.limit": "سنووری بارکردنی فایل تێپەڕیوە.",
|
"upload_error.limit": "سنووری بەرزکردنەوەت بەزاندووە.",
|
||||||
"upload_error.poll": "پەڕگەکە ڕێی پێنەدراوە بە ڕاپرسی باربکرێت.",
|
"upload_error.poll": "فایل و ڕاپرسی پێکەوە ڕێپێنەدراون.",
|
||||||
"upload_form.audio_description": "بۆ ئەو کەسانەی کە گوێ بیستیان هەیە وەسف دەکات",
|
"upload_form.audio_description": "پەیامەکەت بۆ نابیستەکان",
|
||||||
"upload_form.description": "وەسف بکە بۆ کەمبینایان",
|
"upload_form.description": "پەیامەکەت بۆ نابیناکان",
|
||||||
"upload_form.description_missing": "No description added",
|
"upload_form.description_missing": "No description added",
|
||||||
"upload_form.edit": "دەستکاری",
|
"upload_form.edit": "دەستکاری",
|
||||||
"upload_form.thumbnail": "گۆڕانی وینۆچکە",
|
"upload_form.thumbnail": "گۆڕانی وینۆچکە",
|
||||||
"upload_form.undo": "سڕینەوە",
|
"upload_form.undo": "بیسڕەوە",
|
||||||
"upload_form.video_description": "بۆ کەم بینایان و کەم بیستان وەسفی بکە",
|
"upload_form.video_description": "پەیامەکەت بۆ نابیست و نابیناکان",
|
||||||
"upload_modal.analyzing_picture": "شیکردنەوەی وێنە…",
|
"upload_modal.analyzing_picture": "وێنەکە شی دەکرێتەوە…",
|
||||||
"upload_modal.apply": "جێبەجێ کردن",
|
"upload_modal.apply": "بیسەپێنە",
|
||||||
"upload_modal.applying": "Applying…",
|
"upload_modal.applying": "Applying…",
|
||||||
"upload_modal.choose_image": "وێنە هەڵبژێرە",
|
"upload_modal.choose_image": "وێنە هەڵبژێرە",
|
||||||
"upload_modal.description_placeholder": "بە دڵ کەین با بە نەشئەی مەی غوباری میحنەتی دونیا",
|
"upload_modal.description_placeholder": "بە دڵ کەین با بە نەشئەی مەی غوباری میحنەتی دونیا",
|
||||||
"upload_modal.detect_text": "دەقی وێنەکە بدۆزیەوە",
|
"upload_modal.detect_text": "نووسینی ناو وێنەکە دەستنیشان بکە",
|
||||||
"upload_modal.edit_media": "دەستکاریکردنی میدیا",
|
"upload_modal.edit_media": "دەستکاریکردنی میدیا",
|
||||||
"upload_modal.hint": "گەر وێنە چکۆلە یان بڕاوەبێت، خاڵی ناوەندی دیار دەکەوێت. خاڵی ناوەندی وێنە بە کرتە یان جێبەجیکردنی رێکبخەن.",
|
"upload_modal.hint": "گەر وێنە چکۆلە یان بڕاوەبێت، خاڵی ناوەندی دیار دەکەوێت. خاڵی ناوەندی وێنە بە کرتە یان جێبەجیکردنی رێکبخەن.",
|
||||||
"upload_modal.preparing_ocr": "ئامادەکردنی OCR…",
|
"upload_modal.preparing_ocr": "نووسینەکە دەستنیشان دەکرێت…",
|
||||||
"upload_modal.preview_label": "پێشبینی ({ratio})",
|
"upload_modal.preview_label": "پێشبینین ({ratio})",
|
||||||
"upload_progress.label": "بارکردن...",
|
"upload_progress.label": "بار دەکرێت...",
|
||||||
"video.close": "داخستنی ڤیدیۆ",
|
"video.close": "داخستنی ڤیدیۆ",
|
||||||
"video.download": "داگرتنی فایل",
|
"video.download": "داگرتنی فایل",
|
||||||
"video.exit_fullscreen": "دەرچوون لە پڕ شاشە",
|
"video.exit_fullscreen": "دەرچوون لە پڕ شاشە",
|
||||||
|
@ -539,6 +539,6 @@
|
||||||
"video.hide": "شاردنەوەی ڤیدیۆ",
|
"video.hide": "شاردنەوەی ڤیدیۆ",
|
||||||
"video.mute": "دەنگی کپ",
|
"video.mute": "دەنگی کپ",
|
||||||
"video.pause": "وەستان",
|
"video.pause": "وەستان",
|
||||||
"video.play": "پەخشکردن",
|
"video.play": "لێی بدە",
|
||||||
"video.unmute": "دەنگ لابدە"
|
"video.unmute": "بێدەنگی مەکە"
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
"account.followers": "Dilynwyr",
|
"account.followers": "Dilynwyr",
|
||||||
"account.followers.empty": "Nid oes neb yn dilyn y defnyddiwr hwn eto.",
|
"account.followers.empty": "Nid oes neb yn dilyn y defnyddiwr hwn eto.",
|
||||||
"account.followers_counter": "{count, plural, one {{counter} Ddilynwr} other {{counter} o Ddilynwyr}}",
|
"account.followers_counter": "{count, plural, one {{counter} Ddilynwr} other {{counter} o Ddilynwyr}}",
|
||||||
"account.following": "Following",
|
"account.following": "Yn dilyn",
|
||||||
"account.following_counter": "{count, plural, one {{counter} yn Dilyn} other {{counter} yn Dilyn}}",
|
"account.following_counter": "{count, plural, one {{counter} yn Dilyn} other {{counter} yn Dilyn}}",
|
||||||
"account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.",
|
"account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.",
|
||||||
"account.follows_you": "Yn eich dilyn chi",
|
"account.follows_you": "Yn eich dilyn chi",
|
||||||
|
@ -41,16 +41,16 @@
|
||||||
"account.statuses_counter": "{count, plural, one {{counter} Dŵt} other {{counter} o Dŵtiau}}",
|
"account.statuses_counter": "{count, plural, one {{counter} Dŵt} other {{counter} o Dŵtiau}}",
|
||||||
"account.unblock": "Dadflocio @{name}",
|
"account.unblock": "Dadflocio @{name}",
|
||||||
"account.unblock_domain": "Dadguddio {domain}",
|
"account.unblock_domain": "Dadguddio {domain}",
|
||||||
"account.unblock_short": "Unblock",
|
"account.unblock_short": "Dad-flocio",
|
||||||
"account.unendorse": "Peidio a'i arddangos ar fy mhroffil",
|
"account.unendorse": "Peidio a'i arddangos ar fy mhroffil",
|
||||||
"account.unfollow": "Dad-ddilyn",
|
"account.unfollow": "Dad-ddilyn",
|
||||||
"account.unmute": "Dad-dawelu @{name}",
|
"account.unmute": "Dad-dawelu @{name}",
|
||||||
"account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}",
|
"account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}",
|
||||||
"account.unmute_short": "Unmute",
|
"account.unmute_short": "Dad-dewi",
|
||||||
"account_note.placeholder": "Clicio i ychwanegu nodyn",
|
"account_note.placeholder": "Clicio i ychwanegu nodyn",
|
||||||
"admin.dashboard.daily_retention": "User retention rate by day after sign-up",
|
"admin.dashboard.daily_retention": "User retention rate by day after sign-up",
|
||||||
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
|
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
|
||||||
"admin.dashboard.retention.average": "Average",
|
"admin.dashboard.retention.average": "Cyfartaledd",
|
||||||
"admin.dashboard.retention.cohort": "Sign-up month",
|
"admin.dashboard.retention.cohort": "Sign-up month",
|
||||||
"admin.dashboard.retention.cohort_size": "Defnyddwyr newydd",
|
"admin.dashboard.retention.cohort_size": "Defnyddwyr newydd",
|
||||||
"alert.rate_limited.message": "Ceisiwch eto ar ôl {retry_time, time, medium}.",
|
"alert.rate_limited.message": "Ceisiwch eto ar ôl {retry_time, time, medium}.",
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
"confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y tŵt hwn?",
|
"confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y tŵt hwn?",
|
||||||
"confirmations.delete_list.confirm": "Dileu",
|
"confirmations.delete_list.confirm": "Dileu",
|
||||||
"confirmations.delete_list.message": "Ydych chi'n sicr eich bod eisiau dileu y rhestr hwn am byth?",
|
"confirmations.delete_list.message": "Ydych chi'n sicr eich bod eisiau dileu y rhestr hwn am byth?",
|
||||||
"confirmations.discard_edit_media.confirm": "Discard",
|
"confirmations.discard_edit_media.confirm": "Gwaredu",
|
||||||
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
|
"confirmations.discard_edit_media.message": "You have unsaved changes to the media description or preview, discard them anyway?",
|
||||||
"confirmations.domain_block.confirm": "Cuddio parth cyfan",
|
"confirmations.domain_block.confirm": "Cuddio parth cyfan",
|
||||||
"confirmations.domain_block.message": "A ydych yn hollol, hollol sicr eich bod am flocio y {domain} cyfan? Yn y nifer helaeth o achosion mae blocio neu tawelu ambell gyfrif yn ddigonol ac yn well. Ni fyddwch yn gweld cynnwys o'r parth hwnnw mewn unrhyw ffrydiau cyhoeddus na chwaith yn eich hysbysiadau. Bydd hyn yn cael gwared o'ch dilynwyr o'r parth hwnnw.",
|
"confirmations.domain_block.message": "A ydych yn hollol, hollol sicr eich bod am flocio y {domain} cyfan? Yn y nifer helaeth o achosion mae blocio neu tawelu ambell gyfrif yn ddigonol ac yn well. Ni fyddwch yn gweld cynnwys o'r parth hwnnw mewn unrhyw ffrydiau cyhoeddus na chwaith yn eich hysbysiadau. Bydd hyn yn cael gwared o'ch dilynwyr o'r parth hwnnw.",
|
||||||
|
@ -188,11 +188,11 @@
|
||||||
"errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd",
|
"errors.unexpected_crash.copy_stacktrace": "Copïo'r olrhain stac i'r clipfwrdd",
|
||||||
"errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem",
|
"errors.unexpected_crash.report_issue": "Rhoi gwybod am broblem",
|
||||||
"explore.search_results": "Search results",
|
"explore.search_results": "Search results",
|
||||||
"explore.suggested_follows": "For you",
|
"explore.suggested_follows": "I chi",
|
||||||
"explore.title": "Explore",
|
"explore.title": "Archwilio",
|
||||||
"explore.trending_links": "News",
|
"explore.trending_links": "Newyddion",
|
||||||
"explore.trending_statuses": "Posts",
|
"explore.trending_statuses": "Postiau",
|
||||||
"explore.trending_tags": "Hashtags",
|
"explore.trending_tags": "Hanshnodau",
|
||||||
"follow_recommendations.done": "Wedi gorffen",
|
"follow_recommendations.done": "Wedi gorffen",
|
||||||
"follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
|
"follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
|
||||||
"follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
|
"follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
|
||||||
|
@ -294,7 +294,7 @@
|
||||||
"navigation_bar.discover": "Darganfod",
|
"navigation_bar.discover": "Darganfod",
|
||||||
"navigation_bar.domain_blocks": "Parthau cuddiedig",
|
"navigation_bar.domain_blocks": "Parthau cuddiedig",
|
||||||
"navigation_bar.edit_profile": "Golygu proffil",
|
"navigation_bar.edit_profile": "Golygu proffil",
|
||||||
"navigation_bar.explore": "Explore",
|
"navigation_bar.explore": "Archwilio",
|
||||||
"navigation_bar.favourites": "Ffefrynnau",
|
"navigation_bar.favourites": "Ffefrynnau",
|
||||||
"navigation_bar.filters": "Geiriau a dawelwyd",
|
"navigation_bar.filters": "Geiriau a dawelwyd",
|
||||||
"navigation_bar.follow_requests": "Ceisiadau dilyn",
|
"navigation_bar.follow_requests": "Ceisiadau dilyn",
|
||||||
|
@ -338,7 +338,7 @@
|
||||||
"notifications.column_settings.status": "New toots:",
|
"notifications.column_settings.status": "New toots:",
|
||||||
"notifications.column_settings.unread_notifications.category": "Unread notifications",
|
"notifications.column_settings.unread_notifications.category": "Unread notifications",
|
||||||
"notifications.column_settings.unread_notifications.highlight": "Highlight unread notifications",
|
"notifications.column_settings.unread_notifications.highlight": "Highlight unread notifications",
|
||||||
"notifications.column_settings.update": "Edits:",
|
"notifications.column_settings.update": "Golygiadau:",
|
||||||
"notifications.filter.all": "Pob",
|
"notifications.filter.all": "Pob",
|
||||||
"notifications.filter.boosts": "Hybiadau",
|
"notifications.filter.boosts": "Hybiadau",
|
||||||
"notifications.filter.favourites": "Ffefrynnau",
|
"notifications.filter.favourites": "Ffefrynnau",
|
||||||
|
@ -380,7 +380,7 @@
|
||||||
"relative_time.days": "{number}dydd",
|
"relative_time.days": "{number}dydd",
|
||||||
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
|
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
|
||||||
"relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
|
"relative_time.full.hours": "{number, plural, one {# hour} other {# hours}} ago",
|
||||||
"relative_time.full.just_now": "just now",
|
"relative_time.full.just_now": "jyst nawr",
|
||||||
"relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago",
|
"relative_time.full.minutes": "{number, plural, one {# minute} other {# minutes}} ago",
|
||||||
"relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago",
|
"relative_time.full.seconds": "{number, plural, one {# second} other {# seconds}} ago",
|
||||||
"relative_time.hours": "{number}awr",
|
"relative_time.hours": "{number}awr",
|
||||||
|
@ -389,7 +389,7 @@
|
||||||
"relative_time.seconds": "{number}eiliad",
|
"relative_time.seconds": "{number}eiliad",
|
||||||
"relative_time.today": "heddiw",
|
"relative_time.today": "heddiw",
|
||||||
"reply_indicator.cancel": "Canslo",
|
"reply_indicator.cancel": "Canslo",
|
||||||
"report.block": "Block",
|
"report.block": "Blocio",
|
||||||
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
|
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
|
||||||
"report.categories.other": "Arall",
|
"report.categories.other": "Arall",
|
||||||
"report.categories.spam": "Sbam",
|
"report.categories.spam": "Sbam",
|
||||||
|
@ -434,7 +434,7 @@
|
||||||
"search_popout.tips.text": "Mae testun syml yn dychwelyd enwau arddangos, enwau defnyddwyr a hashnodau sy'n cyfateb",
|
"search_popout.tips.text": "Mae testun syml yn dychwelyd enwau arddangos, enwau defnyddwyr a hashnodau sy'n cyfateb",
|
||||||
"search_popout.tips.user": "defnyddiwr",
|
"search_popout.tips.user": "defnyddiwr",
|
||||||
"search_results.accounts": "Pobl",
|
"search_results.accounts": "Pobl",
|
||||||
"search_results.all": "All",
|
"search_results.all": "Pob",
|
||||||
"search_results.hashtags": "Hanshnodau",
|
"search_results.hashtags": "Hanshnodau",
|
||||||
"search_results.nothing_found": "Could not find anything for these search terms",
|
"search_results.nothing_found": "Could not find anything for these search terms",
|
||||||
"search_results.statuses": "Tŵtiau",
|
"search_results.statuses": "Tŵtiau",
|
||||||
|
@ -450,7 +450,7 @@
|
||||||
"status.delete": "Dileu",
|
"status.delete": "Dileu",
|
||||||
"status.detailed_status": "Golwg manwl o'r sgwrs",
|
"status.detailed_status": "Golwg manwl o'r sgwrs",
|
||||||
"status.direct": "Neges breifat @{name}",
|
"status.direct": "Neges breifat @{name}",
|
||||||
"status.edit": "Edit",
|
"status.edit": "Golygu",
|
||||||
"status.edited": "Edited {date}",
|
"status.edited": "Edited {date}",
|
||||||
"status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",
|
"status.edited_x_times": "Edited {count, plural, one {{count} time} other {{count} times}}",
|
||||||
"status.embed": "Plannu",
|
"status.embed": "Plannu",
|
||||||
|
|
|
@ -176,7 +176,7 @@
|
||||||
"empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.",
|
"empty_column.hashtag": "Unter diesem Hashtag gibt es noch nichts.",
|
||||||
"empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.",
|
"empty_column.home": "Deine Startseite ist leer! Besuche {public} oder nutze die Suche, um loszulegen und andere Leute zu finden.",
|
||||||
"empty_column.home.suggestions": "Ein paar Vorschläge ansehen",
|
"empty_column.home.suggestions": "Ein paar Vorschläge ansehen",
|
||||||
"empty_column.list": "Diese Liste ist derzeit leer. Wenn Wesen auf dieser Liste neue Beiträge veröffentlichen werden sie hier erscheinen.",
|
"empty_column.list": "Diese Liste ist derzeit leer. Wenn Konten auf dieser Liste neue Beiträge veröffentlichen werden sie hier erscheinen.",
|
||||||
"empty_column.lists": "Du hast noch keine Listen. Wenn du eine anlegst, wird sie hier angezeigt.",
|
"empty_column.lists": "Du hast noch keine Listen. Wenn du eine anlegst, wird sie hier angezeigt.",
|
||||||
"empty_column.mutes": "Du hast keine Profile stummgeschaltet.",
|
"empty_column.mutes": "Du hast keine Profile stummgeschaltet.",
|
||||||
"empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.",
|
"empty_column.notifications": "Du hast noch keine Mitteilungen. Interagiere mit anderen, um ins Gespräch zu kommen.",
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
"account.blocked": "Bactha",
|
"account.blocked": "Bactha",
|
||||||
"account.browse_more_on_origin_server": "Brabhsáil níos mó ar an phróifíl bhunaidh",
|
"account.browse_more_on_origin_server": "Brabhsáil níos mó ar an phróifíl bhunaidh",
|
||||||
"account.cancel_follow_request": "Cealaigh iarratas leanúnaí",
|
"account.cancel_follow_request": "Cealaigh iarratas leanúnaí",
|
||||||
"account.direct": "Cuir teachtaireacht dhíreach ar @{name}",
|
"account.direct": "Seol teachtaireacht dhíreach chuig @{name}",
|
||||||
"account.disable_notifications": "Éirigh as ag cuir mé in eol nuair bpostálann @{name}",
|
"account.disable_notifications": "Éirigh as ag cuir mé in eol nuair bpostálann @{name}",
|
||||||
"account.domain_blocked": "Ainm fearainn bactha",
|
"account.domain_blocked": "Ainm fearainn bactha",
|
||||||
"account.edit_profile": "Cuir an phróifíl in eagar",
|
"account.edit_profile": "Cuir an phróifíl in eagar",
|
||||||
|
@ -29,12 +29,12 @@
|
||||||
"account.media": "Ábhair",
|
"account.media": "Ábhair",
|
||||||
"account.mention": "Luaigh @{name}",
|
"account.mention": "Luaigh @{name}",
|
||||||
"account.moved_to": "Tá {name} bogtha go:",
|
"account.moved_to": "Tá {name} bogtha go:",
|
||||||
"account.mute": "Ciúnaigh @{name}",
|
"account.mute": "Balbhaigh @{name}",
|
||||||
"account.mute_notifications": "Ciúnaigh fógraí ó @{name}",
|
"account.mute_notifications": "Balbhaigh fógraí ó @{name}",
|
||||||
"account.muted": "Ciúnaithe",
|
"account.muted": "Balbhaithe",
|
||||||
"account.posts": "Postálacha",
|
"account.posts": "Postálacha",
|
||||||
"account.posts_with_replies": "Postálacha agus freagraí",
|
"account.posts_with_replies": "Postálacha agus freagraí",
|
||||||
"account.report": "Gearán @{name}",
|
"account.report": "Tuairiscigh @{name}",
|
||||||
"account.requested": "Ag fanacht le ceadú. Cliceáil chun an iarratas leanúnaí a chealú",
|
"account.requested": "Ag fanacht le ceadú. Cliceáil chun an iarratas leanúnaí a chealú",
|
||||||
"account.share": "Roinn próifíl @{name}",
|
"account.share": "Roinn próifíl @{name}",
|
||||||
"account.show_reblogs": "Taispeáin athphostálacha ó @{name}",
|
"account.show_reblogs": "Taispeáin athphostálacha ó @{name}",
|
||||||
|
@ -44,9 +44,9 @@
|
||||||
"account.unblock_short": "Bain bac de",
|
"account.unblock_short": "Bain bac de",
|
||||||
"account.unendorse": "Ná chuir ar an phróifíl mar ghné",
|
"account.unendorse": "Ná chuir ar an phróifíl mar ghné",
|
||||||
"account.unfollow": "Ná lean a thuilleadh",
|
"account.unfollow": "Ná lean a thuilleadh",
|
||||||
"account.unmute": "Díchiúnaigh @{name}",
|
"account.unmute": "Díbhalbhaigh @{name}",
|
||||||
"account.unmute_notifications": "Díchiúnaigh fógraí ó @{name}",
|
"account.unmute_notifications": "Díbhalbhaigh fógraí ó @{name}",
|
||||||
"account.unmute_short": "Díchiúnaigh",
|
"account.unmute_short": "Díbhalbhaigh",
|
||||||
"account_note.placeholder": "Cliceáil chun nóta a chuir leis",
|
"account_note.placeholder": "Cliceáil chun nóta a chuir leis",
|
||||||
"admin.dashboard.daily_retention": "Ráta coinneála an úsáideora de réir an lae tar éis clárú",
|
"admin.dashboard.daily_retention": "Ráta coinneála an úsáideora de réir an lae tar éis clárú",
|
||||||
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
|
"admin.dashboard.monthly_retention": "User retention rate by month after sign-up",
|
||||||
|
@ -56,39 +56,39 @@
|
||||||
"alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
|
"alert.rate_limited.message": "Please retry after {retry_time, time, medium}.",
|
||||||
"alert.rate_limited.title": "Rate limited",
|
"alert.rate_limited.title": "Rate limited",
|
||||||
"alert.unexpected.message": "An unexpected error occurred.",
|
"alert.unexpected.message": "An unexpected error occurred.",
|
||||||
"alert.unexpected.title": "Oops!",
|
"alert.unexpected.title": "Hiúps!",
|
||||||
"announcement.announcement": "Announcement",
|
"announcement.announcement": "Fógra",
|
||||||
"attachments_list.unprocessed": "(unprocessed)",
|
"attachments_list.unprocessed": "(unprocessed)",
|
||||||
"autosuggest_hashtag.per_week": "{count} per week",
|
"autosuggest_hashtag.per_week": "{count} per week",
|
||||||
"boost_modal.combo": "You can press {combo} to skip this next time",
|
"boost_modal.combo": "You can press {combo} to skip this next time",
|
||||||
"bundle_column_error.body": "Something went wrong while loading this component.",
|
"bundle_column_error.body": "Something went wrong while loading this component.",
|
||||||
"bundle_column_error.retry": "Try again",
|
"bundle_column_error.retry": "Bain triail as arís",
|
||||||
"bundle_column_error.title": "Network error",
|
"bundle_column_error.title": "Network error",
|
||||||
"bundle_modal_error.close": "Close",
|
"bundle_modal_error.close": "Dún",
|
||||||
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
"bundle_modal_error.message": "Something went wrong while loading this component.",
|
||||||
"bundle_modal_error.retry": "Try again",
|
"bundle_modal_error.retry": "Bain triail as arís",
|
||||||
"column.blocks": "Blocked users",
|
"column.blocks": "Cuntais choiscthe",
|
||||||
"column.bookmarks": "Bookmarks",
|
"column.bookmarks": "Leabharmharcanna",
|
||||||
"column.community": "Local timeline",
|
"column.community": "Local timeline",
|
||||||
"column.direct": "Direct messages",
|
"column.direct": "Direct messages",
|
||||||
"column.directory": "Browse profiles",
|
"column.directory": "Browse profiles",
|
||||||
"column.domain_blocks": "Blocked domains",
|
"column.domain_blocks": "Blocked domains",
|
||||||
"column.favourites": "Favourites",
|
"column.favourites": "Favourites",
|
||||||
"column.follow_requests": "Follow requests",
|
"column.follow_requests": "Follow requests",
|
||||||
"column.home": "Home",
|
"column.home": "Baile",
|
||||||
"column.lists": "Lists",
|
"column.lists": "Liostaí",
|
||||||
"column.mutes": "Muted users",
|
"column.mutes": "Úsáideoirí balbhaithe",
|
||||||
"column.notifications": "Notifications",
|
"column.notifications": "Notifications",
|
||||||
"column.pins": "Pinned toot",
|
"column.pins": "Pinned toot",
|
||||||
"column.public": "Federated timeline",
|
"column.public": "Federated timeline",
|
||||||
"column_back_button.label": "Back",
|
"column_back_button.label": "Siar",
|
||||||
"column_header.hide_settings": "Hide settings",
|
"column_header.hide_settings": "Hide settings",
|
||||||
"column_header.moveLeft_settings": "Move column to the left",
|
"column_header.moveLeft_settings": "Move column to the left",
|
||||||
"column_header.moveRight_settings": "Move column to the right",
|
"column_header.moveRight_settings": "Move column to the right",
|
||||||
"column_header.pin": "Pin",
|
"column_header.pin": "Greamaigh",
|
||||||
"column_header.show_settings": "Show settings",
|
"column_header.show_settings": "Show settings",
|
||||||
"column_header.unpin": "Unpin",
|
"column_header.unpin": "Díghreamaigh",
|
||||||
"column_subheading.settings": "Settings",
|
"column_subheading.settings": "Socruithe",
|
||||||
"community.column_settings.local_only": "Local only",
|
"community.column_settings.local_only": "Local only",
|
||||||
"community.column_settings.media_only": "Media only",
|
"community.column_settings.media_only": "Media only",
|
||||||
"community.column_settings.remote_only": "Remote only",
|
"community.column_settings.remote_only": "Remote only",
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
"compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.",
|
||||||
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
|
"compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.",
|
||||||
"compose_form.lock_disclaimer.lock": "locked",
|
"compose_form.lock_disclaimer.lock": "locked",
|
||||||
"compose_form.placeholder": "What is on your mind?",
|
"compose_form.placeholder": "Cad atá ag tarlú?",
|
||||||
"compose_form.poll.add_option": "Add a choice",
|
"compose_form.poll.add_option": "Add a choice",
|
||||||
"compose_form.poll.duration": "Poll duration",
|
"compose_form.poll.duration": "Poll duration",
|
||||||
"compose_form.poll.option_placeholder": "Choice {number}",
|
"compose_form.poll.option_placeholder": "Choice {number}",
|
||||||
|
@ -124,17 +124,17 @@
|
||||||
"confirmations.discard_edit_media.confirm": "Faigh réidh de",
|
"confirmations.discard_edit_media.confirm": "Faigh réidh de",
|
||||||
"confirmations.discard_edit_media.message": "Tá athruithe neamhshlánaithe don tuarascáil gné nó réamhamharc agat, faigh réidh dóibh ar aon nós?",
|
"confirmations.discard_edit_media.message": "Tá athruithe neamhshlánaithe don tuarascáil gné nó réamhamharc agat, faigh réidh dóibh ar aon nós?",
|
||||||
"confirmations.domain_block.confirm": "Hide entire domain",
|
"confirmations.domain_block.confirm": "Hide entire domain",
|
||||||
"confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.",
|
"confirmations.domain_block.message": "An bhfuil tú iontach cinnte gur mhaith leat bac an t-ainm fearainn {domain} in iomlán? I bhformhór na gcásanna, is leor agus is fearr cúpla baic a cur i bhfeidhm nó cúpla úsáideoirí a balbhú. Ní fheicfidh tú ábhair ón t-ainm fearainn sin in amlíne ar bith, nó i d'fhógraí. Scaoilfear do leantóirí ón ainm fearainn sin.",
|
||||||
"confirmations.logout.confirm": "Log out",
|
"confirmations.logout.confirm": "Logáil amach",
|
||||||
"confirmations.logout.message": "Are you sure you want to log out?",
|
"confirmations.logout.message": "Are you sure you want to log out?",
|
||||||
"confirmations.mute.confirm": "Mute",
|
"confirmations.mute.confirm": "Balbhaigh",
|
||||||
"confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
|
"confirmations.mute.explanation": "This will hide posts from them and posts mentioning them, but it will still allow them to see your posts and follow you.",
|
||||||
"confirmations.mute.message": "Are you sure you want to mute {name}?",
|
"confirmations.mute.message": "An bhfuil tú cinnte gur mhaith leat {name} a bhalbhú?",
|
||||||
"confirmations.redraft.confirm": "Delete & redraft",
|
"confirmations.redraft.confirm": "Delete & redraft",
|
||||||
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
|
"confirmations.redraft.message": "Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.",
|
||||||
"confirmations.reply.confirm": "Reply",
|
"confirmations.reply.confirm": "Reply",
|
||||||
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
|
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
|
||||||
"confirmations.unfollow.confirm": "Unfollow",
|
"confirmations.unfollow.confirm": "Ná lean",
|
||||||
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
"confirmations.unfollow.message": "Are you sure you want to unfollow {name}?",
|
||||||
"conversation.delete": "Delete conversation",
|
"conversation.delete": "Delete conversation",
|
||||||
"conversation.mark_as_read": "Mark as read",
|
"conversation.mark_as_read": "Mark as read",
|
||||||
|
@ -146,20 +146,20 @@
|
||||||
"directory.recently_active": "Recently active",
|
"directory.recently_active": "Recently active",
|
||||||
"embed.instructions": "Embed this status on your website by copying the code below.",
|
"embed.instructions": "Embed this status on your website by copying the code below.",
|
||||||
"embed.preview": "Here is what it will look like:",
|
"embed.preview": "Here is what it will look like:",
|
||||||
"emoji_button.activity": "Activity",
|
"emoji_button.activity": "Gníomhaíocht",
|
||||||
"emoji_button.custom": "Custom",
|
"emoji_button.custom": "Custom",
|
||||||
"emoji_button.flags": "Flags",
|
"emoji_button.flags": "Flags",
|
||||||
"emoji_button.food": "Food & Drink",
|
"emoji_button.food": "Bia ⁊ Ól",
|
||||||
"emoji_button.label": "Insert emoji",
|
"emoji_button.label": "Insert emoji",
|
||||||
"emoji_button.nature": "Nature",
|
"emoji_button.nature": "Nádur",
|
||||||
"emoji_button.not_found": "No matching emojis found",
|
"emoji_button.not_found": "No matching emojis found",
|
||||||
"emoji_button.objects": "Objects",
|
"emoji_button.objects": "Objects",
|
||||||
"emoji_button.people": "People",
|
"emoji_button.people": "Daoine",
|
||||||
"emoji_button.recent": "Frequently used",
|
"emoji_button.recent": "Frequently used",
|
||||||
"emoji_button.search": "Search...",
|
"emoji_button.search": "Cuardaigh...",
|
||||||
"emoji_button.search_results": "Search results",
|
"emoji_button.search_results": "Search results",
|
||||||
"emoji_button.symbols": "Symbols",
|
"emoji_button.symbols": "Symbols",
|
||||||
"emoji_button.travel": "Travel & Places",
|
"emoji_button.travel": "Taisteal ⁊ Áiteanna",
|
||||||
"empty_column.account_suspended": "Account suspended",
|
"empty_column.account_suspended": "Account suspended",
|
||||||
"empty_column.account_timeline": "No toots here!",
|
"empty_column.account_timeline": "No toots here!",
|
||||||
"empty_column.account_unavailable": "Profile unavailable",
|
"empty_column.account_unavailable": "Profile unavailable",
|
||||||
|
@ -178,7 +178,7 @@
|
||||||
"empty_column.home.suggestions": "See some suggestions",
|
"empty_column.home.suggestions": "See some suggestions",
|
||||||
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
|
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.",
|
||||||
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
|
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.",
|
||||||
"empty_column.mutes": "You haven't muted any users yet.",
|
"empty_column.mutes": "Níl aon úsáideoir balbhaithe agat fós.",
|
||||||
"empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
|
"empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.",
|
||||||
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
|
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up",
|
||||||
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
|
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
|
||||||
|
@ -189,15 +189,15 @@
|
||||||
"errors.unexpected_crash.report_issue": "Report issue",
|
"errors.unexpected_crash.report_issue": "Report issue",
|
||||||
"explore.search_results": "Search results",
|
"explore.search_results": "Search results",
|
||||||
"explore.suggested_follows": "For you",
|
"explore.suggested_follows": "For you",
|
||||||
"explore.title": "Explore",
|
"explore.title": "Féach thart",
|
||||||
"explore.trending_links": "News",
|
"explore.trending_links": "Nuacht",
|
||||||
"explore.trending_statuses": "Posts",
|
"explore.trending_statuses": "Postálacha",
|
||||||
"explore.trending_tags": "Hashtags",
|
"explore.trending_tags": "Haischlibeanna",
|
||||||
"follow_recommendations.done": "Done",
|
"follow_recommendations.done": "Déanta",
|
||||||
"follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
|
"follow_recommendations.heading": "Follow people you'd like to see posts from! Here are some suggestions.",
|
||||||
"follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
|
"follow_recommendations.lead": "Posts from people you follow will show up in chronological order on your home feed. Don't be afraid to make mistakes, you can unfollow people just as easily any time!",
|
||||||
"follow_request.authorize": "Authorize",
|
"follow_request.authorize": "Ceadaigh",
|
||||||
"follow_request.reject": "Reject",
|
"follow_request.reject": "Diúltaigh",
|
||||||
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
|
"follow_requests.unlocked_explanation": "Even though your account is not locked, the {domain} staff thought you might want to review follow requests from these accounts manually.",
|
||||||
"generic.saved": "Saved",
|
"generic.saved": "Saved",
|
||||||
"getting_started.developers": "Developers",
|
"getting_started.developers": "Developers",
|
||||||
|
@ -243,7 +243,7 @@
|
||||||
"keyboard_shortcuts.legend": "to display this legend",
|
"keyboard_shortcuts.legend": "to display this legend",
|
||||||
"keyboard_shortcuts.local": "to open local timeline",
|
"keyboard_shortcuts.local": "to open local timeline",
|
||||||
"keyboard_shortcuts.mention": "to mention author",
|
"keyboard_shortcuts.mention": "to mention author",
|
||||||
"keyboard_shortcuts.muted": "to open muted users list",
|
"keyboard_shortcuts.muted": "Oscail liosta na n-úsáideoirí balbhaithe",
|
||||||
"keyboard_shortcuts.my_profile": "to open your profile",
|
"keyboard_shortcuts.my_profile": "to open your profile",
|
||||||
"keyboard_shortcuts.notifications": "to open notifications column",
|
"keyboard_shortcuts.notifications": "to open notifications column",
|
||||||
"keyboard_shortcuts.open_media": "to open media",
|
"keyboard_shortcuts.open_media": "to open media",
|
||||||
|
@ -282,9 +282,9 @@
|
||||||
"media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
|
"media_gallery.toggle_visible": "{number, plural, one {Hide image} other {Hide images}}",
|
||||||
"missing_indicator.label": "Not found",
|
"missing_indicator.label": "Not found",
|
||||||
"missing_indicator.sublabel": "This resource could not be found",
|
"missing_indicator.sublabel": "This resource could not be found",
|
||||||
"mute_modal.duration": "Duration",
|
"mute_modal.duration": "Tréimhse",
|
||||||
"mute_modal.hide_notifications": "Hide notifications from this user?",
|
"mute_modal.hide_notifications": "Cuir póstalacha ón t-úsáideoir seo i bhfolach?",
|
||||||
"mute_modal.indefinite": "Indefinite",
|
"mute_modal.indefinite": "Gan téarma",
|
||||||
"navigation_bar.apps": "Mobile apps",
|
"navigation_bar.apps": "Mobile apps",
|
||||||
"navigation_bar.blocks": "Blocked users",
|
"navigation_bar.blocks": "Blocked users",
|
||||||
"navigation_bar.bookmarks": "Bookmarks",
|
"navigation_bar.bookmarks": "Bookmarks",
|
||||||
|
@ -296,15 +296,15 @@
|
||||||
"navigation_bar.edit_profile": "Cuir an phróifíl in eagar",
|
"navigation_bar.edit_profile": "Cuir an phróifíl in eagar",
|
||||||
"navigation_bar.explore": "Explore",
|
"navigation_bar.explore": "Explore",
|
||||||
"navigation_bar.favourites": "Favourites",
|
"navigation_bar.favourites": "Favourites",
|
||||||
"navigation_bar.filters": "Muted words",
|
"navigation_bar.filters": "Focail bhalbhaithe",
|
||||||
"navigation_bar.follow_requests": "Follow requests",
|
"navigation_bar.follow_requests": "Follow requests",
|
||||||
"navigation_bar.follows_and_followers": "Ag leanúint agus do do leanúint",
|
"navigation_bar.follows_and_followers": "Ag leanúint agus do do leanúint",
|
||||||
"navigation_bar.info": "About this server",
|
"navigation_bar.info": "About this server",
|
||||||
"navigation_bar.keyboard_shortcuts": "Hotkeys",
|
"navigation_bar.keyboard_shortcuts": "Eochracha Aicearra",
|
||||||
"navigation_bar.lists": "Lists",
|
"navigation_bar.lists": "Liostaí",
|
||||||
"navigation_bar.logout": "Logout",
|
"navigation_bar.logout": "Logáil Amach",
|
||||||
"navigation_bar.mutes": "Muted users",
|
"navigation_bar.mutes": "Úsáideoirí balbhaithe",
|
||||||
"navigation_bar.personal": "Personal",
|
"navigation_bar.personal": "Pearsanta",
|
||||||
"navigation_bar.pins": "Pinned toots",
|
"navigation_bar.pins": "Pinned toots",
|
||||||
"navigation_bar.preferences": "Preferences",
|
"navigation_bar.preferences": "Preferences",
|
||||||
"navigation_bar.public_timeline": "Federated timeline",
|
"navigation_bar.public_timeline": "Federated timeline",
|
||||||
|
@ -371,11 +371,11 @@
|
||||||
"privacy.private.long": "Sofheicthe do Leantóirí amháin",
|
"privacy.private.long": "Sofheicthe do Leantóirí amháin",
|
||||||
"privacy.private.short": "Leantóirí amháin",
|
"privacy.private.short": "Leantóirí amháin",
|
||||||
"privacy.public.long": "Visible for all, shown in public timelines",
|
"privacy.public.long": "Visible for all, shown in public timelines",
|
||||||
"privacy.public.short": "Public",
|
"privacy.public.short": "Poiblí",
|
||||||
"privacy.unlisted.long": "Visible for all, but not in public timelines",
|
"privacy.unlisted.long": "Visible for all, but not in public timelines",
|
||||||
"privacy.unlisted.short": "Unlisted",
|
"privacy.unlisted.short": "Unlisted",
|
||||||
"refresh": "Refresh",
|
"refresh": "Refresh",
|
||||||
"regeneration_indicator.label": "Loading…",
|
"regeneration_indicator.label": "Ag lódáil…",
|
||||||
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
"regeneration_indicator.sublabel": "Your home feed is being prepared!",
|
||||||
"relative_time.days": "{number}d",
|
"relative_time.days": "{number}d",
|
||||||
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
|
"relative_time.full.days": "{number, plural, one {# day} other {# days}} ago",
|
||||||
|
@ -387,26 +387,26 @@
|
||||||
"relative_time.just_now": "now",
|
"relative_time.just_now": "now",
|
||||||
"relative_time.minutes": "{number}m",
|
"relative_time.minutes": "{number}m",
|
||||||
"relative_time.seconds": "{number}s",
|
"relative_time.seconds": "{number}s",
|
||||||
"relative_time.today": "today",
|
"relative_time.today": "inniu",
|
||||||
"reply_indicator.cancel": "Cancel",
|
"reply_indicator.cancel": "Cancel",
|
||||||
"report.block": "Block",
|
"report.block": "Block",
|
||||||
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
|
"report.block_explanation": "You will not see their posts. They will not be able to see your posts or follow you. They will be able to tell that they are blocked.",
|
||||||
"report.categories.other": "Other",
|
"report.categories.other": "Other",
|
||||||
"report.categories.spam": "Spam",
|
"report.categories.spam": "Turscar",
|
||||||
"report.categories.violation": "Content violates one or more server rules",
|
"report.categories.violation": "Content violates one or more server rules",
|
||||||
"report.category.subtitle": "Choose the best match",
|
"report.category.subtitle": "Choose the best match",
|
||||||
"report.category.title": "Tell us what's going on with this {type}",
|
"report.category.title": "Tell us what's going on with this {type}",
|
||||||
"report.category.title_account": "profile",
|
"report.category.title_account": "profile",
|
||||||
"report.category.title_status": "post",
|
"report.category.title_status": "post",
|
||||||
"report.close": "Done",
|
"report.close": "Déanta",
|
||||||
"report.comment.title": "Is there anything else you think we should know?",
|
"report.comment.title": "Is there anything else you think we should know?",
|
||||||
"report.forward": "Forward to {target}",
|
"report.forward": "Forward to {target}",
|
||||||
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?",
|
||||||
"report.mute": "Mute",
|
"report.mute": "Balbhaigh",
|
||||||
"report.mute_explanation": "You will not see their posts. They can still follow you and see your posts and will not know that they are muted.",
|
"report.mute_explanation": "Ní fheicfidh tú a postálacha. Is féidir an té seo tú a leanúint agus do phostálacha a fheiceáil, agus ní fhios go bhfuil iad balbhaithe.",
|
||||||
"report.next": "Next",
|
"report.next": "Next",
|
||||||
"report.placeholder": "Type or paste additional comments",
|
"report.placeholder": "Type or paste additional comments",
|
||||||
"report.reasons.dislike": "I don't like it",
|
"report.reasons.dislike": "Ní maith liom é",
|
||||||
"report.reasons.dislike_description": "It is not something you want to see",
|
"report.reasons.dislike_description": "It is not something you want to see",
|
||||||
"report.reasons.other": "It's something else",
|
"report.reasons.other": "It's something else",
|
||||||
"report.reasons.other_description": "The issue does not fit into other categories",
|
"report.reasons.other_description": "The issue does not fit into other categories",
|
||||||
|
@ -426,18 +426,18 @@
|
||||||
"report.thanks.title_actionable": "Thanks for reporting, we'll look into this.",
|
"report.thanks.title_actionable": "Thanks for reporting, we'll look into this.",
|
||||||
"report.unfollow": "Unfollow @{name}",
|
"report.unfollow": "Unfollow @{name}",
|
||||||
"report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.",
|
"report.unfollow_explanation": "You are following this account. To not see their posts in your home feed anymore, unfollow them.",
|
||||||
"search.placeholder": "Search",
|
"search.placeholder": "Cuardaigh",
|
||||||
"search_popout.search_format": "Advanced search format",
|
"search_popout.search_format": "Advanced search format",
|
||||||
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
"search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.",
|
||||||
"search_popout.tips.hashtag": "hashtag",
|
"search_popout.tips.hashtag": "haischlib",
|
||||||
"search_popout.tips.status": "status",
|
"search_popout.tips.status": "status",
|
||||||
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
|
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags",
|
||||||
"search_popout.tips.user": "user",
|
"search_popout.tips.user": "user",
|
||||||
"search_results.accounts": "People",
|
"search_results.accounts": "Daoine",
|
||||||
"search_results.all": "All",
|
"search_results.all": "All",
|
||||||
"search_results.hashtags": "Hashtags",
|
"search_results.hashtags": "Haischlibeanna",
|
||||||
"search_results.nothing_found": "Could not find anything for these search terms",
|
"search_results.nothing_found": "Could not find anything for these search terms",
|
||||||
"search_results.statuses": "Toots",
|
"search_results.statuses": "Postálacha",
|
||||||
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
|
"search_results.statuses_fts_disabled": "Searching toots by their content is not enabled on this Mastodon server.",
|
||||||
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
|
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
|
||||||
"status.admin_account": "Open moderation interface for @{name}",
|
"status.admin_account": "Open moderation interface for @{name}",
|
||||||
|
@ -447,7 +447,7 @@
|
||||||
"status.cancel_reblog_private": "Unboost",
|
"status.cancel_reblog_private": "Unboost",
|
||||||
"status.cannot_reblog": "This post cannot be boosted",
|
"status.cannot_reblog": "This post cannot be boosted",
|
||||||
"status.copy": "Copy link to status",
|
"status.copy": "Copy link to status",
|
||||||
"status.delete": "Delete",
|
"status.delete": "Scrios",
|
||||||
"status.detailed_status": "Detailed conversation view",
|
"status.detailed_status": "Detailed conversation view",
|
||||||
"status.direct": "Direct message @{name}",
|
"status.direct": "Direct message @{name}",
|
||||||
"status.edit": "Cuir in eagar",
|
"status.edit": "Cuir in eagar",
|
||||||
|
@ -461,9 +461,9 @@
|
||||||
"status.load_more": "Load more",
|
"status.load_more": "Load more",
|
||||||
"status.media_hidden": "Media hidden",
|
"status.media_hidden": "Media hidden",
|
||||||
"status.mention": "Mention @{name}",
|
"status.mention": "Mention @{name}",
|
||||||
"status.more": "More",
|
"status.more": "Tuilleadh",
|
||||||
"status.mute": "Mute @{name}",
|
"status.mute": "Balbhaigh @{name}",
|
||||||
"status.mute_conversation": "Mute conversation",
|
"status.mute_conversation": "Balbhaigh comhrá",
|
||||||
"status.open": "Expand this status",
|
"status.open": "Expand this status",
|
||||||
"status.pin": "Pin on profile",
|
"status.pin": "Pin on profile",
|
||||||
"status.pinned": "Pinned toot",
|
"status.pinned": "Pinned toot",
|
||||||
|
@ -485,15 +485,15 @@
|
||||||
"status.show_more_all": "Show more for all",
|
"status.show_more_all": "Show more for all",
|
||||||
"status.show_thread": "Show thread",
|
"status.show_thread": "Show thread",
|
||||||
"status.uncached_media_warning": "Not available",
|
"status.uncached_media_warning": "Not available",
|
||||||
"status.unmute_conversation": "Unmute conversation",
|
"status.unmute_conversation": "Díbhalbhaigh comhrá",
|
||||||
"status.unpin": "Unpin from profile",
|
"status.unpin": "Unpin from profile",
|
||||||
"suggestions.dismiss": "Dismiss suggestion",
|
"suggestions.dismiss": "Dismiss suggestion",
|
||||||
"suggestions.header": "You might be interested in…",
|
"suggestions.header": "You might be interested in…",
|
||||||
"tabs_bar.federated_timeline": "Federated",
|
"tabs_bar.federated_timeline": "Federated",
|
||||||
"tabs_bar.home": "Home",
|
"tabs_bar.home": "Baile",
|
||||||
"tabs_bar.local_timeline": "Local",
|
"tabs_bar.local_timeline": "Local",
|
||||||
"tabs_bar.notifications": "Notifications",
|
"tabs_bar.notifications": "Notifications",
|
||||||
"tabs_bar.search": "Search",
|
"tabs_bar.search": "Cuardaigh",
|
||||||
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
|
"time_remaining.days": "{number, plural, one {# day} other {# days}} left",
|
||||||
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
|
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
|
||||||
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
|
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
|
||||||
|
|
|
@ -459,7 +459,7 @@
|
||||||
"status.history.created": "Chruthaich {name} {date} e",
|
"status.history.created": "Chruthaich {name} {date} e",
|
||||||
"status.history.edited": "Dheasaich {name} {date} e",
|
"status.history.edited": "Dheasaich {name} {date} e",
|
||||||
"status.load_more": "Luchdaich barrachd dheth",
|
"status.load_more": "Luchdaich barrachd dheth",
|
||||||
"status.media_hidden": "Meadhanan falaichte",
|
"status.media_hidden": "Meadhan falaichte",
|
||||||
"status.mention": "Thoir iomradh air @{name}",
|
"status.mention": "Thoir iomradh air @{name}",
|
||||||
"status.more": "Barrachd",
|
"status.more": "Barrachd",
|
||||||
"status.mute": "Mùch @{name}",
|
"status.mute": "Mùch @{name}",
|
||||||
|
@ -515,7 +515,7 @@
|
||||||
"upload_error.poll": "Chan fhaod thu faidhle a luchdadh suas an cois cunntais-bheachd.",
|
"upload_error.poll": "Chan fhaod thu faidhle a luchdadh suas an cois cunntais-bheachd.",
|
||||||
"upload_form.audio_description": "Mìnich e dhan fheadhainn le èisteachd bheag",
|
"upload_form.audio_description": "Mìnich e dhan fheadhainn le èisteachd bheag",
|
||||||
"upload_form.description": "Mìnich e dhan fheadhainn le cion-lèirsinne",
|
"upload_form.description": "Mìnich e dhan fheadhainn le cion-lèirsinne",
|
||||||
"upload_form.description_missing": "No description added",
|
"upload_form.description_missing": "Cha deach tuairisgeul a chur ris",
|
||||||
"upload_form.edit": "Deasaich",
|
"upload_form.edit": "Deasaich",
|
||||||
"upload_form.thumbnail": "Atharraich an dealbhag",
|
"upload_form.thumbnail": "Atharraich an dealbhag",
|
||||||
"upload_form.undo": "Sguab às",
|
"upload_form.undo": "Sguab às",
|
||||||
|
|
|
@ -48,8 +48,8 @@
|
||||||
"account.unmute_notifications": "Deixar de silenciar as notificacións de @{name}",
|
"account.unmute_notifications": "Deixar de silenciar as notificacións de @{name}",
|
||||||
"account.unmute_short": "Non silenciar",
|
"account.unmute_short": "Non silenciar",
|
||||||
"account_note.placeholder": "Preme para engadir nota",
|
"account_note.placeholder": "Preme para engadir nota",
|
||||||
"admin.dashboard.daily_retention": "Ratio de retención de usuarias após rexistrarse",
|
"admin.dashboard.daily_retention": "Ratio de retención de usuarias diaria após rexistrarse",
|
||||||
"admin.dashboard.monthly_retention": "Ratio de retención de usuarias após un mes do rexistro",
|
"admin.dashboard.monthly_retention": "Ratio de retención de usuarias mensual após o rexistro",
|
||||||
"admin.dashboard.retention.average": "Media",
|
"admin.dashboard.retention.average": "Media",
|
||||||
"admin.dashboard.retention.cohort": "Mes de rexistro",
|
"admin.dashboard.retention.cohort": "Mes de rexistro",
|
||||||
"admin.dashboard.retention.cohort_size": "Novas usuarias",
|
"admin.dashboard.retention.cohort_size": "Novas usuarias",
|
||||||
|
@ -379,7 +379,7 @@
|
||||||
"regeneration_indicator.sublabel": "Estase a preparar a túa cronoloxía de inicio!",
|
"regeneration_indicator.sublabel": "Estase a preparar a túa cronoloxía de inicio!",
|
||||||
"relative_time.days": "{number}d",
|
"relative_time.days": "{number}d",
|
||||||
"relative_time.full.days": "fai {number, plural, one {# día} other {# días}}",
|
"relative_time.full.days": "fai {number, plural, one {# día} other {# días}}",
|
||||||
"relative_time.full.hours": "fai {number, plural, one {# hora} other {# horas}} ago",
|
"relative_time.full.hours": "fai {number, plural, one {# hora} other {# horas}}",
|
||||||
"relative_time.full.just_now": "xusto agora",
|
"relative_time.full.just_now": "xusto agora",
|
||||||
"relative_time.full.minutes": "fai {number, plural, one {# minuto} other {# minutos}}",
|
"relative_time.full.minutes": "fai {number, plural, one {# minuto} other {# minutos}}",
|
||||||
"relative_time.full.seconds": "fai {number, plural, one {# segundo} other {# segundos}}",
|
"relative_time.full.seconds": "fai {number, plural, one {# segundo} other {# segundos}}",
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
"account.moved_to": "{name} hefur verið færður til:",
|
"account.moved_to": "{name} hefur verið færður til:",
|
||||||
"account.mute": "Þagga niður í @{name}",
|
"account.mute": "Þagga niður í @{name}",
|
||||||
"account.mute_notifications": "Þagga tilkynningar frá @{name}",
|
"account.mute_notifications": "Þagga tilkynningar frá @{name}",
|
||||||
"account.muted": "Þaggað",
|
"account.muted": "Þaggaður",
|
||||||
"account.posts": "Færslur",
|
"account.posts": "Færslur",
|
||||||
"account.posts_with_replies": "Færslur og svör",
|
"account.posts_with_replies": "Færslur og svör",
|
||||||
"account.report": "Kæra @{name}",
|
"account.report": "Kæra @{name}",
|
||||||
|
@ -315,7 +315,7 @@
|
||||||
"notification.follow_request": "{name} hefur beðið um að fylgjast með þér",
|
"notification.follow_request": "{name} hefur beðið um að fylgjast með þér",
|
||||||
"notification.mention": "{name} minntist á þig",
|
"notification.mention": "{name} minntist á þig",
|
||||||
"notification.own_poll": "Könnuninni þinni er lokið",
|
"notification.own_poll": "Könnuninni þinni er lokið",
|
||||||
"notification.poll": "Könnun sem þú tókst þátt í er lokið",
|
"notification.poll": "Könnun sem þú tókst þátt í er lokin",
|
||||||
"notification.reblog": "{name} endurbirti færsluna þína",
|
"notification.reblog": "{name} endurbirti færsluna þína",
|
||||||
"notification.status": "{name} sendi inn rétt í þessu",
|
"notification.status": "{name} sendi inn rétt í þessu",
|
||||||
"notification.update": "{name} breytti færslu",
|
"notification.update": "{name} breytti færslu",
|
||||||
|
@ -356,7 +356,7 @@
|
||||||
"notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.",
|
"notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.",
|
||||||
"notifications_permission_banner.title": "Aldrei missa af neinu",
|
"notifications_permission_banner.title": "Aldrei missa af neinu",
|
||||||
"picture_in_picture.restore": "Setja til baka",
|
"picture_in_picture.restore": "Setja til baka",
|
||||||
"poll.closed": "Lokað",
|
"poll.closed": "Lokuð",
|
||||||
"poll.refresh": "Endurlesa",
|
"poll.refresh": "Endurlesa",
|
||||||
"poll.total_people": "{count, plural, one {# aðili} other {# aðilar}}",
|
"poll.total_people": "{count, plural, one {# aðili} other {# aðilar}}",
|
||||||
"poll.total_votes": "{count, plural, one {# atkvæði} other {# atkvæði}}",
|
"poll.total_votes": "{count, plural, one {# atkvæði} other {# atkvæði}}",
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"account.add_or_remove_from_list": "리스트에 추가 혹은 삭제",
|
"account.add_or_remove_from_list": "리스트에 추가 혹은 삭제",
|
||||||
"account.badges.bot": "봇",
|
"account.badges.bot": "봇",
|
||||||
"account.badges.group": "그룹",
|
"account.badges.group": "그룹",
|
||||||
"account.block": "@{name}을 차단",
|
"account.block": "@{name} 차단",
|
||||||
"account.block_domain": "도메인 {domain}을 차단",
|
"account.block_domain": "도메인 {domain}을 차단",
|
||||||
"account.blocked": "차단됨",
|
"account.blocked": "차단됨",
|
||||||
"account.browse_more_on_origin_server": "원본 프로필에서 더 탐색하기",
|
"account.browse_more_on_origin_server": "원본 프로필에서 더 탐색하기",
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
"column.direct": "다이렉트 메시지",
|
"column.direct": "다이렉트 메시지",
|
||||||
"column.directory": "프로필 둘러보기",
|
"column.directory": "프로필 둘러보기",
|
||||||
"column.domain_blocks": "차단한 도메인",
|
"column.domain_blocks": "차단한 도메인",
|
||||||
"column.favourites": "즐겨찾기",
|
"column.favourites": "좋아요",
|
||||||
"column.follow_requests": "팔로우 요청",
|
"column.follow_requests": "팔로우 요청",
|
||||||
"column.home": "홈",
|
"column.home": "홈",
|
||||||
"column.lists": "리스트",
|
"column.lists": "리스트",
|
||||||
|
@ -128,10 +128,10 @@
|
||||||
"confirmations.logout.confirm": "로그아웃",
|
"confirmations.logout.confirm": "로그아웃",
|
||||||
"confirmations.logout.message": "정말로 로그아웃 하시겠습니까?",
|
"confirmations.logout.message": "정말로 로그아웃 하시겠습니까?",
|
||||||
"confirmations.mute.confirm": "뮤트",
|
"confirmations.mute.confirm": "뮤트",
|
||||||
"confirmations.mute.explanation": "이 동작은 그의 게시물, 그를 멘션하는 게시물을 숨깁니다, 하지만 여전히 그가 당신의 게시물을 보고 팔로우 할 수 있습니다.",
|
"confirmations.mute.explanation": "이 동작은 해당 계정의 게시물과 해당 계정을 멘션하는 게시물을 숨깁니다, 하지만 여전히 해당 계정이 당신의 게시물을 보고 팔로우 할 수 있습니다.",
|
||||||
"confirmations.mute.message": "정말로 {name}를 뮤트하시겠습니까?",
|
"confirmations.mute.message": "정말로 {name}를 뮤트하시겠습니까?",
|
||||||
"confirmations.redraft.confirm": "삭제하고 다시 쓰기",
|
"confirmations.redraft.confirm": "삭제하고 다시 쓰기",
|
||||||
"confirmations.redraft.message": "정말로 이 게시물을 삭제하고 다시 쓰시겠습니까? 해당 게시물에 대한 부스트와 즐겨찾기를 잃게 되고 원본에 대한 답장은 연결 되지 않습니다.",
|
"confirmations.redraft.message": "정말로 이 게시물을 삭제하고 다시 쓰시겠습니까? 해당 게시물에 대한 부스트와 좋아요를 잃게 되고 원본에 대한 답장은 연결 되지 않습니다.",
|
||||||
"confirmations.reply.confirm": "답글",
|
"confirmations.reply.confirm": "답글",
|
||||||
"confirmations.reply.message": "답글을 달기 위해 현재 작성 중인 메시지가 덮어 씌워집니다. 진행하시겠습니까?",
|
"confirmations.reply.message": "답글을 달기 위해 현재 작성 중인 메시지가 덮어 씌워집니다. 진행하시겠습니까?",
|
||||||
"confirmations.unfollow.confirm": "팔로우 해제",
|
"confirmations.unfollow.confirm": "팔로우 해제",
|
||||||
|
@ -169,8 +169,8 @@
|
||||||
"empty_column.direct": "아직 다이렉트 메시지가 없습니다. 다이렉트 메시지를 보내거나 받은 경우, 여기에 표시 됩니다.",
|
"empty_column.direct": "아직 다이렉트 메시지가 없습니다. 다이렉트 메시지를 보내거나 받은 경우, 여기에 표시 됩니다.",
|
||||||
"empty_column.domain_blocks": "아직 차단한 도메인이 없습니다.",
|
"empty_column.domain_blocks": "아직 차단한 도메인이 없습니다.",
|
||||||
"empty_column.explore_statuses": "아직 유행하는 것이 없습니다. 나중에 다시 확인하세요!",
|
"empty_column.explore_statuses": "아직 유행하는 것이 없습니다. 나중에 다시 확인하세요!",
|
||||||
"empty_column.favourited_statuses": "아직 즐겨찾기 한 게시물이 없습니다. 게시물을 즐겨찾기 하면 여기에 나타납니다.",
|
"empty_column.favourited_statuses": "아직 마음에 들어한 게시물이 없습니다. 게시물을 좋아요 하면 여기에 나타납니다.",
|
||||||
"empty_column.favourites": "아직 아무도 이 게시물을 즐겨찾기 하지 않았습니다. 누군가 즐겨찾기를 하면 여기에 나타납니다.",
|
"empty_column.favourites": "아직 아무도 이 게시물을 마음에 들어하지 않았습니다. 누군가 좋아요를 하면 여기에 나타납니다.",
|
||||||
"empty_column.follow_recommendations": "당신을 위한 제안이 생성될 수 없는 것 같습니다. 알 수도 있는 사람을 검색하거나 유행하는 해시태그를 둘러볼 수 있습니다.",
|
"empty_column.follow_recommendations": "당신을 위한 제안이 생성될 수 없는 것 같습니다. 알 수도 있는 사람을 검색하거나 유행하는 해시태그를 둘러볼 수 있습니다.",
|
||||||
"empty_column.follow_requests": "아직 팔로우 요청이 없습니다. 요청을 받았을 때 여기에 나타납니다.",
|
"empty_column.follow_requests": "아직 팔로우 요청이 없습니다. 요청을 받았을 때 여기에 나타납니다.",
|
||||||
"empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.",
|
"empty_column.hashtag": "이 해시태그는 아직 사용되지 않았습니다.",
|
||||||
|
@ -235,7 +235,7 @@
|
||||||
"keyboard_shortcuts.down": "리스트에서 아래로 이동",
|
"keyboard_shortcuts.down": "리스트에서 아래로 이동",
|
||||||
"keyboard_shortcuts.enter": "게시물 열기",
|
"keyboard_shortcuts.enter": "게시물 열기",
|
||||||
"keyboard_shortcuts.favourite": "관심글 지정",
|
"keyboard_shortcuts.favourite": "관심글 지정",
|
||||||
"keyboard_shortcuts.favourites": "즐겨찾기 목록 열기",
|
"keyboard_shortcuts.favourites": "좋아요 목록 열기",
|
||||||
"keyboard_shortcuts.federated": "연합 타임라인 열기",
|
"keyboard_shortcuts.federated": "연합 타임라인 열기",
|
||||||
"keyboard_shortcuts.heading": "키보드 단축키",
|
"keyboard_shortcuts.heading": "키보드 단축키",
|
||||||
"keyboard_shortcuts.home": "홈 타임라인 열기",
|
"keyboard_shortcuts.home": "홈 타임라인 열기",
|
||||||
|
@ -295,7 +295,7 @@
|
||||||
"navigation_bar.domain_blocks": "차단한 도메인",
|
"navigation_bar.domain_blocks": "차단한 도메인",
|
||||||
"navigation_bar.edit_profile": "프로필 편집",
|
"navigation_bar.edit_profile": "프로필 편집",
|
||||||
"navigation_bar.explore": "탐색하기",
|
"navigation_bar.explore": "탐색하기",
|
||||||
"navigation_bar.favourites": "즐겨찾기",
|
"navigation_bar.favourites": "좋아요",
|
||||||
"navigation_bar.filters": "뮤트한 단어",
|
"navigation_bar.filters": "뮤트한 단어",
|
||||||
"navigation_bar.follow_requests": "팔로우 요청",
|
"navigation_bar.follow_requests": "팔로우 요청",
|
||||||
"navigation_bar.follows_and_followers": "팔로우와 팔로워",
|
"navigation_bar.follows_and_followers": "팔로우와 팔로워",
|
||||||
|
@ -310,7 +310,7 @@
|
||||||
"navigation_bar.public_timeline": "연합 타임라인",
|
"navigation_bar.public_timeline": "연합 타임라인",
|
||||||
"navigation_bar.security": "보안",
|
"navigation_bar.security": "보안",
|
||||||
"notification.admin.sign_up": "{name} 님이 가입했습니다",
|
"notification.admin.sign_up": "{name} 님이 가입했습니다",
|
||||||
"notification.favourite": "{name} 님이 즐겨찾기 했습니다",
|
"notification.favourite": "{name} 님이 당신의 게시물을 마음에 들어합니다",
|
||||||
"notification.follow": "{name} 님이 나를 팔로우 했습니다",
|
"notification.follow": "{name} 님이 나를 팔로우 했습니다",
|
||||||
"notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다",
|
"notification.follow_request": "{name} 님이 팔로우 요청을 보냈습니다",
|
||||||
"notification.mention": "{name} 님이 답글을 보냈습니다",
|
"notification.mention": "{name} 님이 답글을 보냈습니다",
|
||||||
|
@ -323,7 +323,7 @@
|
||||||
"notifications.clear_confirmation": "정말로 알림을 삭제하시겠습니까?",
|
"notifications.clear_confirmation": "정말로 알림을 삭제하시겠습니까?",
|
||||||
"notifications.column_settings.admin.sign_up": "새로운 가입:",
|
"notifications.column_settings.admin.sign_up": "새로운 가입:",
|
||||||
"notifications.column_settings.alert": "데스크탑 알림",
|
"notifications.column_settings.alert": "데스크탑 알림",
|
||||||
"notifications.column_settings.favourite": "즐겨찾기:",
|
"notifications.column_settings.favourite": "좋아요:",
|
||||||
"notifications.column_settings.filter_bar.advanced": "카테고리의 모든 종류를 표시",
|
"notifications.column_settings.filter_bar.advanced": "카테고리의 모든 종류를 표시",
|
||||||
"notifications.column_settings.filter_bar.category": "퀵 필터 바",
|
"notifications.column_settings.filter_bar.category": "퀵 필터 바",
|
||||||
"notifications.column_settings.filter_bar.show_bar": "필터 막대 표시",
|
"notifications.column_settings.filter_bar.show_bar": "필터 막대 표시",
|
||||||
|
@ -341,7 +341,7 @@
|
||||||
"notifications.column_settings.update": "수정내역:",
|
"notifications.column_settings.update": "수정내역:",
|
||||||
"notifications.filter.all": "모두",
|
"notifications.filter.all": "모두",
|
||||||
"notifications.filter.boosts": "부스트",
|
"notifications.filter.boosts": "부스트",
|
||||||
"notifications.filter.favourites": "즐겨찾기",
|
"notifications.filter.favourites": "좋아요",
|
||||||
"notifications.filter.follows": "팔로우",
|
"notifications.filter.follows": "팔로우",
|
||||||
"notifications.filter.mentions": "멘션",
|
"notifications.filter.mentions": "멘션",
|
||||||
"notifications.filter.polls": "투표 결과",
|
"notifications.filter.polls": "투표 결과",
|
||||||
|
@ -390,7 +390,7 @@
|
||||||
"relative_time.today": "오늘",
|
"relative_time.today": "오늘",
|
||||||
"reply_indicator.cancel": "취소",
|
"reply_indicator.cancel": "취소",
|
||||||
"report.block": "차단",
|
"report.block": "차단",
|
||||||
"report.block_explanation": "당신은 그의 게시물을 보지 않게 됩니다. 그는 당신의 게시물을 보거나 팔로우 할 수 없습니다. 그가 차단되었다는 사실을 알 수 있습니다.",
|
"report.block_explanation": "당신은 해당 계정의 게시물을 보지 않게 됩니다. 해당 계정은 당신의 게시물을 보거나 팔로우 할 수 없습니다. 해당 계정은 자신이 차단되었다는 사실을 알 수 있습니다.",
|
||||||
"report.categories.other": "기타",
|
"report.categories.other": "기타",
|
||||||
"report.categories.spam": "스팸",
|
"report.categories.spam": "스팸",
|
||||||
"report.categories.violation": "컨텐츠가 한 개 이상의 서버 규칙을 위반합니다",
|
"report.categories.violation": "컨텐츠가 한 개 이상의 서버 규칙을 위반합니다",
|
||||||
|
@ -403,7 +403,7 @@
|
||||||
"report.forward": "{target}에 포워드 됨",
|
"report.forward": "{target}에 포워드 됨",
|
||||||
"report.forward_hint": "이 계정은 다른 서버에 있습니다. 익명화 된 사본을 해당 서버에도 전송할까요?",
|
"report.forward_hint": "이 계정은 다른 서버에 있습니다. 익명화 된 사본을 해당 서버에도 전송할까요?",
|
||||||
"report.mute": "침묵",
|
"report.mute": "침묵",
|
||||||
"report.mute_explanation": "당신은 그의 게시물을 보지 않게 됩니다. 그는 여전히 당신을 팔로우 하거나 당신의 게시물을 볼 수 있으며 뮤트 되었는지 알지 못합니다.",
|
"report.mute_explanation": "당신은 해당 계정의 게시물을 보지 않게 됩니다. 해당 계정은 여전히 당신을 팔로우 하거나 당신의 게시물을 볼 수 있으며 해당 계정은 자신이 뮤트 되었는지 알지 못합니다.",
|
||||||
"report.next": "다음",
|
"report.next": "다음",
|
||||||
"report.placeholder": "코멘트",
|
"report.placeholder": "코멘트",
|
||||||
"report.reasons.dislike": "마음에 안듭니다",
|
"report.reasons.dislike": "마음에 안듭니다",
|
||||||
|
@ -454,7 +454,7 @@
|
||||||
"status.edited": "{date}에 편집됨",
|
"status.edited": "{date}에 편집됨",
|
||||||
"status.edited_x_times": "{count}번 수정됨",
|
"status.edited_x_times": "{count}번 수정됨",
|
||||||
"status.embed": "공유하기",
|
"status.embed": "공유하기",
|
||||||
"status.favourite": "즐겨찾기",
|
"status.favourite": "좋아요",
|
||||||
"status.filtered": "필터로 걸러짐",
|
"status.filtered": "필터로 걸러짐",
|
||||||
"status.history.created": "{name} 님이 {date}에 생성함",
|
"status.history.created": "{name} 님이 {date}에 생성함",
|
||||||
"status.history.edited": "{name} 님이 {date}에 수정함",
|
"status.history.edited": "{name} 님이 {date}에 수정함",
|
||||||
|
|
|
@ -189,8 +189,8 @@
|
||||||
"errors.unexpected_crash.report_issue": "Nahlás problém",
|
"errors.unexpected_crash.report_issue": "Nahlás problém",
|
||||||
"explore.search_results": "Výsledky hľadania",
|
"explore.search_results": "Výsledky hľadania",
|
||||||
"explore.suggested_follows": "Pre teba",
|
"explore.suggested_follows": "Pre teba",
|
||||||
"explore.title": "Explore",
|
"explore.title": "Objavuj",
|
||||||
"explore.trending_links": "News",
|
"explore.trending_links": "Novinky",
|
||||||
"explore.trending_statuses": "Príspevky",
|
"explore.trending_statuses": "Príspevky",
|
||||||
"explore.trending_tags": "Haštagy",
|
"explore.trending_tags": "Haštagy",
|
||||||
"follow_recommendations.done": "Hotovo",
|
"follow_recommendations.done": "Hotovo",
|
||||||
|
@ -294,7 +294,7 @@
|
||||||
"navigation_bar.discover": "Objavuj",
|
"navigation_bar.discover": "Objavuj",
|
||||||
"navigation_bar.domain_blocks": "Skryté domény",
|
"navigation_bar.domain_blocks": "Skryté domény",
|
||||||
"navigation_bar.edit_profile": "Uprav profil",
|
"navigation_bar.edit_profile": "Uprav profil",
|
||||||
"navigation_bar.explore": "Explore",
|
"navigation_bar.explore": "Objavuj",
|
||||||
"navigation_bar.favourites": "Obľúbené",
|
"navigation_bar.favourites": "Obľúbené",
|
||||||
"navigation_bar.filters": "Filtrované slová",
|
"navigation_bar.filters": "Filtrované slová",
|
||||||
"navigation_bar.follow_requests": "Žiadosti o sledovanie",
|
"navigation_bar.follow_requests": "Žiadosti o sledovanie",
|
||||||
|
@ -309,7 +309,7 @@
|
||||||
"navigation_bar.preferences": "Nastavenia",
|
"navigation_bar.preferences": "Nastavenia",
|
||||||
"navigation_bar.public_timeline": "Federovaná časová os",
|
"navigation_bar.public_timeline": "Federovaná časová os",
|
||||||
"navigation_bar.security": "Zabezbečenie",
|
"navigation_bar.security": "Zabezbečenie",
|
||||||
"notification.admin.sign_up": "{name} signed up",
|
"notification.admin.sign_up": "{name} sa zaregistroval/a",
|
||||||
"notification.favourite": "{name} si obľúbil/a tvoj príspevok",
|
"notification.favourite": "{name} si obľúbil/a tvoj príspevok",
|
||||||
"notification.follow": "{name} ťa začal/a následovať",
|
"notification.follow": "{name} ťa začal/a následovať",
|
||||||
"notification.follow_request": "{name} žiada ťa následovať",
|
"notification.follow_request": "{name} žiada ťa následovať",
|
||||||
|
@ -318,10 +318,10 @@
|
||||||
"notification.poll": "Anketa v ktorej si hlasoval/a sa skončila",
|
"notification.poll": "Anketa v ktorej si hlasoval/a sa skončila",
|
||||||
"notification.reblog": "{name} zdieľal/a tvoj príspevok",
|
"notification.reblog": "{name} zdieľal/a tvoj príspevok",
|
||||||
"notification.status": "{name} práve uverejnil/a",
|
"notification.status": "{name} práve uverejnil/a",
|
||||||
"notification.update": "{name} edited a post",
|
"notification.update": "{name} upravil/a príspevok",
|
||||||
"notifications.clear": "Vyčisti oboznámenia",
|
"notifications.clear": "Vyčisti oboznámenia",
|
||||||
"notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?",
|
"notifications.clear_confirmation": "Naozaj chceš nenávratne prečistiť všetky tvoje oboznámenia?",
|
||||||
"notifications.column_settings.admin.sign_up": "New sign-ups:",
|
"notifications.column_settings.admin.sign_up": "Nové registrácie:",
|
||||||
"notifications.column_settings.alert": "Oboznámenia na ploche",
|
"notifications.column_settings.alert": "Oboznámenia na ploche",
|
||||||
"notifications.column_settings.favourite": "Obľúbené:",
|
"notifications.column_settings.favourite": "Obľúbené:",
|
||||||
"notifications.column_settings.filter_bar.advanced": "Zobraz všetky kategórie",
|
"notifications.column_settings.filter_bar.advanced": "Zobraz všetky kategórie",
|
||||||
|
|
|
@ -383,7 +383,7 @@
|
||||||
"relative_time.full.just_now": "şimdi",
|
"relative_time.full.just_now": "şimdi",
|
||||||
"relative_time.full.minutes": "{number, plural, one {# dakika} other {# dakika}} önce",
|
"relative_time.full.minutes": "{number, plural, one {# dakika} other {# dakika}} önce",
|
||||||
"relative_time.full.seconds": "{number, plural, one {# saniye} other {# saniye}} önce",
|
"relative_time.full.seconds": "{number, plural, one {# saniye} other {# saniye}} önce",
|
||||||
"relative_time.hours": "{number}sa",
|
"relative_time.hours": "{number}s",
|
||||||
"relative_time.just_now": "şimdi",
|
"relative_time.just_now": "şimdi",
|
||||||
"relative_time.minutes": "{number}dk",
|
"relative_time.minutes": "{number}dk",
|
||||||
"relative_time.seconds": "{number}sn",
|
"relative_time.seconds": "{number}sn",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"account.account_note_header": "Ghi chú",
|
"account.account_note_header": "Ghi chú",
|
||||||
"account.add_or_remove_from_list": "Thêm hoặc Xóa khỏi danh sách",
|
"account.add_or_remove_from_list": "Thêm hoặc Xóa khỏi danh sách",
|
||||||
"account.badges.bot": "người máy",
|
"account.badges.bot": "Bot",
|
||||||
"account.badges.group": "Nhóm",
|
"account.badges.group": "Nhóm",
|
||||||
"account.block": "Chặn @{name}",
|
"account.block": "Chặn @{name}",
|
||||||
"account.block_domain": "Ẩn mọi thứ từ {domain}",
|
"account.block_domain": "Ẩn mọi thứ từ {domain}",
|
||||||
|
@ -24,11 +24,11 @@
|
||||||
"account.follows_you": "Đang theo dõi bạn",
|
"account.follows_you": "Đang theo dõi bạn",
|
||||||
"account.hide_reblogs": "Ẩn tút @{name} đăng lại",
|
"account.hide_reblogs": "Ẩn tút @{name} đăng lại",
|
||||||
"account.joined": "Đã tham gia {date}",
|
"account.joined": "Đã tham gia {date}",
|
||||||
"account.link_verified_on": "Liên kết này đã được xác thực vào {date}",
|
"account.link_verified_on": "Liên kết này đã được xác minh vào {date}",
|
||||||
"account.locked_info": "Đây là tài khoản riêng tư. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.",
|
"account.locked_info": "Đây là tài khoản riêng tư. Họ sẽ tự mình xét duyệt các yêu cầu theo dõi.",
|
||||||
"account.media": "Media",
|
"account.media": "Media",
|
||||||
"account.mention": "Nhắc đến @{name}",
|
"account.mention": "Nhắc đến @{name}",
|
||||||
"account.moved_to": "{name} đã đổi thành:",
|
"account.moved_to": "{name} đã chuyển sang:",
|
||||||
"account.mute": "Ẩn @{name}",
|
"account.mute": "Ẩn @{name}",
|
||||||
"account.mute_notifications": "Tắt thông báo từ @{name}",
|
"account.mute_notifications": "Tắt thông báo từ @{name}",
|
||||||
"account.muted": "Đã ẩn",
|
"account.muted": "Đã ẩn",
|
||||||
|
|
|
@ -4,6 +4,8 @@ module AccessTokenExtension
|
||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
included do
|
included do
|
||||||
|
include Redisable
|
||||||
|
|
||||||
after_commit :push_to_streaming_api
|
after_commit :push_to_streaming_api
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -16,6 +18,6 @@ module AccessTokenExtension
|
||||||
end
|
end
|
||||||
|
|
||||||
def push_to_streaming_api
|
def push_to_streaming_api
|
||||||
Redis.current.publish("timeline:access_token:#{id}", Oj.dump(event: :kill)) if revoked? || destroyed?
|
redis.publish("timeline:access_token:#{id}", Oj.dump(event: :kill)) if revoked? || destroyed?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -164,7 +164,7 @@ class ActivityPub::Activity
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_or_fail(key, expire_after = 15.minutes.seconds)
|
def lock_or_fail(key, expire_after = 15.minutes.seconds)
|
||||||
RedisLock.acquire({ redis: Redis.current, key: key, autorelease: expire_after }) do |lock|
|
RedisLock.acquire({ redis: redis, key: key, autorelease: expire_after }) do |lock|
|
||||||
if lock.acquired?
|
if lock.acquired?
|
||||||
yield
|
yield
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class DeliveryFailureTracker
|
class DeliveryFailureTracker
|
||||||
|
include Redisable
|
||||||
|
|
||||||
FAILURE_DAYS_THRESHOLD = 7
|
FAILURE_DAYS_THRESHOLD = 7
|
||||||
|
|
||||||
def initialize(url_or_host)
|
def initialize(url_or_host)
|
||||||
|
@ -8,21 +10,21 @@ class DeliveryFailureTracker
|
||||||
end
|
end
|
||||||
|
|
||||||
def track_failure!
|
def track_failure!
|
||||||
Redis.current.sadd(exhausted_deliveries_key, today)
|
redis.sadd(exhausted_deliveries_key, today)
|
||||||
UnavailableDomain.create(domain: @host) if reached_failure_threshold?
|
UnavailableDomain.create(domain: @host) if reached_failure_threshold?
|
||||||
end
|
end
|
||||||
|
|
||||||
def track_success!
|
def track_success!
|
||||||
Redis.current.del(exhausted_deliveries_key)
|
redis.del(exhausted_deliveries_key)
|
||||||
UnavailableDomain.find_by(domain: @host)&.destroy
|
UnavailableDomain.find_by(domain: @host)&.destroy
|
||||||
end
|
end
|
||||||
|
|
||||||
def clear_failures!
|
def clear_failures!
|
||||||
Redis.current.del(exhausted_deliveries_key)
|
redis.del(exhausted_deliveries_key)
|
||||||
end
|
end
|
||||||
|
|
||||||
def days
|
def days
|
||||||
Redis.current.scard(exhausted_deliveries_key) || 0
|
redis.scard(exhausted_deliveries_key) || 0
|
||||||
end
|
end
|
||||||
|
|
||||||
def available?
|
def available?
|
||||||
|
@ -30,12 +32,14 @@ class DeliveryFailureTracker
|
||||||
end
|
end
|
||||||
|
|
||||||
def exhausted_deliveries_days
|
def exhausted_deliveries_days
|
||||||
@exhausted_deliveries_days ||= Redis.current.smembers(exhausted_deliveries_key).sort.map { |date| Date.new(date.slice(0, 4).to_i, date.slice(4, 2).to_i, date.slice(6, 2).to_i) }
|
@exhausted_deliveries_days ||= redis.smembers(exhausted_deliveries_key).sort.map { |date| Date.new(date.slice(0, 4).to_i, date.slice(4, 2).to_i, date.slice(6, 2).to_i) }
|
||||||
end
|
end
|
||||||
|
|
||||||
alias reset! track_success!
|
alias reset! track_success!
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
|
include Redisable
|
||||||
|
|
||||||
def without_unavailable(urls)
|
def without_unavailable(urls)
|
||||||
unavailable_domains_map = Rails.cache.fetch('unavailable_domains') { UnavailableDomain.pluck(:domain).index_with(true) }
|
unavailable_domains_map = Rails.cache.fetch('unavailable_domains') { UnavailableDomain.pluck(:domain).index_with(true) }
|
||||||
|
|
||||||
|
@ -54,7 +58,7 @@ class DeliveryFailureTracker
|
||||||
end
|
end
|
||||||
|
|
||||||
def warning_domains
|
def warning_domains
|
||||||
domains = Redis.current.keys(exhausted_deliveries_key_by('*')).map do |key|
|
domains = redis.keys(exhausted_deliveries_key_by('*')).map do |key|
|
||||||
key.delete_prefix(exhausted_deliveries_key_by(''))
|
key.delete_prefix(exhausted_deliveries_key_by(''))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -62,7 +66,7 @@ class DeliveryFailureTracker
|
||||||
end
|
end
|
||||||
|
|
||||||
def warning_domains_map
|
def warning_domains_map
|
||||||
warning_domains.index_with { |domain| Redis.current.scard(exhausted_deliveries_key_by(domain)) }
|
warning_domains.index_with { |domain| redis.scard(exhausted_deliveries_key_by(domain)) }
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
47
app/lib/redis_configuration.rb
Normal file
47
app/lib/redis_configuration.rb
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class RedisConfiguration
|
||||||
|
class << self
|
||||||
|
def with
|
||||||
|
pool.with { |redis| yield redis }
|
||||||
|
end
|
||||||
|
|
||||||
|
def pool
|
||||||
|
@pool ||= ConnectionPool.new(size: pool_size) { new.connection }
|
||||||
|
end
|
||||||
|
|
||||||
|
def pool_size
|
||||||
|
if Sidekiq.server?
|
||||||
|
Sidekiq.options[:concurrency]
|
||||||
|
else
|
||||||
|
ENV['MAX_THREADS'] || 5
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def connection
|
||||||
|
if namespace?
|
||||||
|
Redis::Namespace.new(namespace, redis: raw_connection)
|
||||||
|
else
|
||||||
|
raw_connection
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def namespace?
|
||||||
|
namespace.present?
|
||||||
|
end
|
||||||
|
|
||||||
|
def namespace
|
||||||
|
ENV.fetch('REDIS_NAMESPACE', nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
def url
|
||||||
|
ENV['REDIS_URL']
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def raw_connection
|
||||||
|
Redis.new(url: url, driver: :hiredis)
|
||||||
|
end
|
||||||
|
end
|
|
@ -14,6 +14,8 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
class AccountConversation < ApplicationRecord
|
class AccountConversation < ApplicationRecord
|
||||||
|
include Redisable
|
||||||
|
|
||||||
after_commit :push_to_streaming_api
|
after_commit :push_to_streaming_api
|
||||||
|
|
||||||
belongs_to :account
|
belongs_to :account
|
||||||
|
@ -109,7 +111,7 @@ class AccountConversation < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def subscribed_to_timeline?
|
def subscribed_to_timeline?
|
||||||
Redis.current.exists?("subscribed:#{streaming_channel}")
|
redis.exists?("subscribed:#{streaming_channel}")
|
||||||
end
|
end
|
||||||
|
|
||||||
def streaming_channel
|
def streaming_channel
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class AccountSuggestions::GlobalSource < AccountSuggestions::Source
|
class AccountSuggestions::GlobalSource < AccountSuggestions::Source
|
||||||
|
include Redisable
|
||||||
|
|
||||||
def key
|
def key
|
||||||
:global
|
:global
|
||||||
end
|
end
|
||||||
|
@ -28,7 +30,7 @@ class AccountSuggestions::GlobalSource < AccountSuggestions::Source
|
||||||
end
|
end
|
||||||
|
|
||||||
def account_ids_for_locale(locale)
|
def account_ids_for_locale(locale)
|
||||||
Redis.current.zrevrange("follow_recommendations:#{locale}", 0, -1).map(&:to_i)
|
redis.zrevrange("follow_recommendations:#{locale}", 0, -1).map(&:to_i)
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_ordered_list_key(account)
|
def to_ordered_list_key(account)
|
||||||
|
|
|
@ -6,6 +6,6 @@ module Redisable
|
||||||
private
|
private
|
||||||
|
|
||||||
def redis
|
def redis
|
||||||
Redis.current
|
Thread.current[:redis] ||= RedisConfiguration.new.connection
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,6 +24,7 @@ class CustomFilter < ApplicationRecord
|
||||||
).freeze
|
).freeze
|
||||||
|
|
||||||
include Expireable
|
include Expireable
|
||||||
|
include Redisable
|
||||||
|
|
||||||
belongs_to :account
|
belongs_to :account
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@ class CustomFilter < ApplicationRecord
|
||||||
|
|
||||||
def remove_cache
|
def remove_cache
|
||||||
Rails.cache.delete("filters:#{account_id}")
|
Rails.cache.delete("filters:#{account_id}")
|
||||||
Redis.current.publish("timeline:#{account_id}", Oj.dump(event: :filters_changed))
|
redis.publish("timeline:#{account_id}", Oj.dump(event: :filters_changed))
|
||||||
end
|
end
|
||||||
|
|
||||||
def context_must_be_valid
|
def context_must_be_valid
|
||||||
|
|
|
@ -19,6 +19,7 @@ class EncryptedMessage < ApplicationRecord
|
||||||
self.inheritance_column = nil
|
self.inheritance_column = nil
|
||||||
|
|
||||||
include Paginable
|
include Paginable
|
||||||
|
include Redisable
|
||||||
|
|
||||||
scope :up_to, ->(id) { where(arel_table[:id].lteq(id)) }
|
scope :up_to, ->(id) { where(arel_table[:id].lteq(id)) }
|
||||||
|
|
||||||
|
@ -38,7 +39,7 @@ class EncryptedMessage < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def subscribed_to_timeline?
|
def subscribed_to_timeline?
|
||||||
Redis.current.exists?("subscribed:#{streaming_channel}")
|
redis.exists?("subscribed:#{streaming_channel}")
|
||||||
end
|
end
|
||||||
|
|
||||||
def streaming_channel
|
def streaming_channel
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class FollowRecommendationFilter
|
class FollowRecommendationFilter
|
||||||
|
include Redisable
|
||||||
|
|
||||||
KEYS = %i(
|
KEYS = %i(
|
||||||
language
|
language
|
||||||
status
|
status
|
||||||
|
@ -17,7 +19,7 @@ class FollowRecommendationFilter
|
||||||
if params['status'] == 'suppressed'
|
if params['status'] == 'suppressed'
|
||||||
Account.joins(:follow_recommendation_suppression).order(FollowRecommendationSuppression.arel_table[:id].desc).to_a
|
Account.joins(:follow_recommendation_suppression).order(FollowRecommendationSuppression.arel_table[:id].desc).to_a
|
||||||
else
|
else
|
||||||
account_ids = Redis.current.zrevrange("follow_recommendations:#{@language}", 0, -1).map(&:to_i)
|
account_ids = redis.zrevrange("follow_recommendations:#{@language}", 0, -1).map(&:to_i)
|
||||||
accounts = Account.where(id: account_ids).index_by(&:id)
|
accounts = Account.where(id: account_ids).index_by(&:id)
|
||||||
|
|
||||||
account_ids.map { |id| accounts[id] }.compact
|
account_ids.map { |id| accounts[id] }.compact
|
||||||
|
|
|
@ -52,6 +52,7 @@ class User < ApplicationRecord
|
||||||
|
|
||||||
include Settings::Extend
|
include Settings::Extend
|
||||||
include UserRoles
|
include UserRoles
|
||||||
|
include Redisable
|
||||||
|
|
||||||
# The home and list feeds will be stored in Redis for this amount
|
# The home and list feeds will be stored in Redis for this amount
|
||||||
# of time, and status fan-out to followers will include only people
|
# of time, and status fan-out to followers will include only people
|
||||||
|
@ -464,7 +465,7 @@ class User < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
def regenerate_feed!
|
def regenerate_feed!
|
||||||
RegenerationWorker.perform_async(account_id) if Redis.current.set("account:#{account_id}:regeneration", true, nx: true, ex: 1.day.seconds)
|
RegenerationWorker.perform_async(account_id) if redis.set("account:#{account_id}:regeneration", true, nx: true, ex: 1.day.seconds)
|
||||||
end
|
end
|
||||||
|
|
||||||
def needs_feed_update?
|
def needs_feed_update?
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
class ActivityPub::ProcessAccountService < BaseService
|
class ActivityPub::ProcessAccountService < BaseService
|
||||||
include JsonLdHelper
|
include JsonLdHelper
|
||||||
include DomainControlHelper
|
include DomainControlHelper
|
||||||
|
include Redisable
|
||||||
|
|
||||||
# Should be called with confirmed valid JSON
|
# Should be called with confirmed valid JSON
|
||||||
# and WebFinger-resolved username and domain
|
# and WebFinger-resolved username and domain
|
||||||
|
@ -289,7 +290,7 @@ class ActivityPub::ProcessAccountService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
def lock_options
|
||||||
{ redis: Redis.current, key: "process_account:#{@uri}", autorelease: 15.minutes.seconds }
|
{ redis: redis, key: "process_account:#{@uri}", autorelease: 15.minutes.seconds }
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_tags
|
def process_tags
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
class ActivityPub::ProcessStatusUpdateService < BaseService
|
class ActivityPub::ProcessStatusUpdateService < BaseService
|
||||||
include JsonLdHelper
|
include JsonLdHelper
|
||||||
|
include Redisable
|
||||||
|
|
||||||
def call(status, json)
|
def call(status, json)
|
||||||
raise ArgumentError, 'Status has unsaved changes' if status.changed?
|
raise ArgumentError, 'Status has unsaved changes' if status.changed?
|
||||||
|
@ -241,7 +242,7 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
def lock_options
|
||||||
{ redis: Redis.current, key: "create:#{@uri}", autorelease: 15.minutes.seconds }
|
{ redis: redis, key: "create:#{@uri}", autorelease: 15.minutes.seconds }
|
||||||
end
|
end
|
||||||
|
|
||||||
def record_previous_edit!
|
def record_previous_edit!
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class FanOutOnWriteService < BaseService
|
class FanOutOnWriteService < BaseService
|
||||||
|
include Redisable
|
||||||
|
|
||||||
# Push a status into home and mentions feeds
|
# Push a status into home and mentions feeds
|
||||||
# @param [Status] status
|
# @param [Status] status
|
||||||
# @param [Hash] options
|
# @param [Hash] options
|
||||||
|
@ -107,20 +109,20 @@ class FanOutOnWriteService < BaseService
|
||||||
|
|
||||||
def broadcast_to_hashtag_streams!
|
def broadcast_to_hashtag_streams!
|
||||||
@status.tags.pluck(:name).each do |hashtag|
|
@status.tags.pluck(:name).each do |hashtag|
|
||||||
Redis.current.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}", anonymous_payload)
|
redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}", anonymous_payload)
|
||||||
Redis.current.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", anonymous_payload) if @status.local?
|
redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", anonymous_payload) if @status.local?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def broadcast_to_public_streams!
|
def broadcast_to_public_streams!
|
||||||
return if @status.reply? && @status.in_reply_to_account_id != @account.id && !Setting.show_replies_in_public_timelines
|
return if @status.reply? && @status.in_reply_to_account_id != @account.id && !Setting.show_replies_in_public_timelines
|
||||||
|
|
||||||
Redis.current.publish('timeline:public', anonymous_payload)
|
redis.publish('timeline:public', anonymous_payload)
|
||||||
Redis.current.publish(@status.local? ? 'timeline:public:local' : 'timeline:public:remote', anonymous_payload)
|
redis.publish(@status.local? ? 'timeline:public:local' : 'timeline:public:remote', anonymous_payload)
|
||||||
|
|
||||||
if @status.with_media?
|
if @status.with_media?
|
||||||
Redis.current.publish('timeline:public:media', anonymous_payload)
|
redis.publish('timeline:public:media', anonymous_payload)
|
||||||
Redis.current.publish(@status.local? ? 'timeline:public:local:media' : 'timeline:public:remote:media', anonymous_payload)
|
redis.publish(@status.local? ? 'timeline:public:local:media' : 'timeline:public:remote:media', anonymous_payload)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class FetchLinkCardService < BaseService
|
class FetchLinkCardService < BaseService
|
||||||
|
include Redisable
|
||||||
|
|
||||||
URL_PATTERN = %r{
|
URL_PATTERN = %r{
|
||||||
(#{Twitter::TwitterText::Regex[:valid_url_preceding_chars]}) # $1 preceding chars
|
(#{Twitter::TwitterText::Regex[:valid_url_preceding_chars]}) # $1 preceding chars
|
||||||
( # $2 URL
|
( # $2 URL
|
||||||
|
@ -155,6 +157,6 @@ class FetchLinkCardService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
def lock_options
|
||||||
{ redis: Redis.current, key: "fetch:#{@original_url}", autorelease: 15.minutes.seconds }
|
{ redis: redis, key: "fetch:#{@original_url}", autorelease: 15.minutes.seconds }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class PrecomputeFeedService < BaseService
|
class PrecomputeFeedService < BaseService
|
||||||
|
include Redisable
|
||||||
|
|
||||||
def call(account)
|
def call(account)
|
||||||
FeedManager.instance.populate_home(account)
|
FeedManager.instance.populate_home(account)
|
||||||
FeedManager.instance.populate_direct_feed(account)
|
FeedManager.instance.populate_direct_feed(account)
|
||||||
ensure
|
ensure
|
||||||
Redis.current.del("account:#{account.id}:regeneration")
|
redis.del("account:#{account.id}:regeneration")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -154,6 +154,6 @@ class RemoveStatusService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
def lock_options
|
||||||
{ redis: Redis.current, key: "distribute:#{@status.id}", autorelease: 5.minutes.seconds }
|
{ redis: redis, key: "distribute:#{@status.id}", autorelease: 5.minutes.seconds }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,6 +4,7 @@ class ResolveAccountService < BaseService
|
||||||
include JsonLdHelper
|
include JsonLdHelper
|
||||||
include DomainControlHelper
|
include DomainControlHelper
|
||||||
include WebfingerHelper
|
include WebfingerHelper
|
||||||
|
include Redisable
|
||||||
|
|
||||||
# Find or create an account record for a remote user. When creating,
|
# Find or create an account record for a remote user. When creating,
|
||||||
# look up the user's webfinger and fetch ActivityPub data
|
# look up the user's webfinger and fetch ActivityPub data
|
||||||
|
@ -147,6 +148,6 @@ class ResolveAccountService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
def lock_options
|
||||||
{ redis: Redis.current, key: "resolve:#{@username}@#{@domain}", autorelease: 15.minutes.seconds }
|
{ redis: redis, key: "resolve:#{@username}@#{@domain}", autorelease: 15.minutes.seconds }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,6 +30,11 @@ class ResolveURLService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def process_url_from_db
|
def process_url_from_db
|
||||||
|
if [500, 502, 503, 504, nil].include?(fetch_resource_service.response_code)
|
||||||
|
account = Account.find_by(uri: @url)
|
||||||
|
return account unless account.nil?
|
||||||
|
end
|
||||||
|
|
||||||
return unless @on_behalf_of.present? && [401, 403, 404].include?(fetch_resource_service.response_code)
|
return unless @on_behalf_of.present? && [401, 403, 404].include?(fetch_resource_service.response_code)
|
||||||
|
|
||||||
# It may happen that the resource is a private toot, and thus not fetchable,
|
# It may happen that the resource is a private toot, and thus not fetchable,
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
class VoteService < BaseService
|
class VoteService < BaseService
|
||||||
include Authorization
|
include Authorization
|
||||||
include Payloadable
|
include Payloadable
|
||||||
|
include Redisable
|
||||||
|
|
||||||
def call(account, poll, choices)
|
def call(account, poll, choices)
|
||||||
authorize_with account, poll, :vote?
|
authorize_with account, poll, :vote?
|
||||||
|
@ -77,6 +78,6 @@ class VoteService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def lock_options
|
def lock_options
|
||||||
{ redis: Redis.current, key: "vote:#{@poll.id}:#{@account.id}" }
|
{ redis: redis, key: "vote:#{@poll.id}:#{@account.id}" }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,4 +11,4 @@
|
||||||
<%= raw t('admin_mailer.new_trends.new_trending_tags.no_approved_tags') %>
|
<%= raw t('admin_mailer.new_trends.new_trending_tags.no_approved_tags') %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= raw t('application_mailer.view')%> <%= admin_trends_tags_url(pending_review: '1') %>
|
<%= raw t('application_mailer.view')%> <%= admin_trends_tags_url(status: 'pending_review') %>
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
|
|
||||||
class DistributionWorker
|
class DistributionWorker
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
include Redisable
|
||||||
|
|
||||||
def perform(status_id, options = {})
|
def perform(status_id, options = {})
|
||||||
RedisLock.acquire(redis: Redis.current, key: "distribute:#{status_id}", autorelease: 5.minutes.seconds) do |lock|
|
RedisLock.acquire(redis: redis, key: "distribute:#{status_id}", autorelease: 5.minutes.seconds) do |lock|
|
||||||
if lock.acquired?
|
if lock.acquired?
|
||||||
FanOutOnWriteService.new.call(Status.find(status_id), **options.symbolize_keys)
|
FanOutOnWriteService.new.call(Status.find(status_id), **options.symbolize_keys)
|
||||||
else
|
else
|
||||||
|
|
|
@ -2,12 +2,13 @@
|
||||||
|
|
||||||
class MergeWorker
|
class MergeWorker
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
include Redisable
|
||||||
|
|
||||||
def perform(from_account_id, into_account_id)
|
def perform(from_account_id, into_account_id)
|
||||||
FeedManager.instance.merge_into_home(Account.find(from_account_id), Account.find(into_account_id))
|
FeedManager.instance.merge_into_home(Account.find(from_account_id), Account.find(into_account_id))
|
||||||
rescue ActiveRecord::RecordNotFound
|
rescue ActiveRecord::RecordNotFound
|
||||||
true
|
true
|
||||||
ensure
|
ensure
|
||||||
Redis.current.del("account:#{into_account_id}:regeneration")
|
redis.del("account:#{into_account_id}:regeneration")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
class Scheduler::AccountsStatusesCleanupScheduler
|
class Scheduler::AccountsStatusesCleanupScheduler
|
||||||
include Sidekiq::Worker
|
include Sidekiq::Worker
|
||||||
|
include Redisable
|
||||||
|
|
||||||
# This limit is mostly to be nice to the fediverse at large and not
|
# This limit is mostly to be nice to the fediverse at large and not
|
||||||
# generate too much traffic.
|
# generate too much traffic.
|
||||||
|
@ -83,14 +84,14 @@ class Scheduler::AccountsStatusesCleanupScheduler
|
||||||
end
|
end
|
||||||
|
|
||||||
def last_processed_id
|
def last_processed_id
|
||||||
Redis.current.get('account_statuses_cleanup_scheduler:last_account_id')
|
redis.get('account_statuses_cleanup_scheduler:last_account_id')
|
||||||
end
|
end
|
||||||
|
|
||||||
def save_last_processed_id(id)
|
def save_last_processed_id(id)
|
||||||
if id.nil?
|
if id.nil?
|
||||||
Redis.current.del('account_statuses_cleanup_scheduler:last_account_id')
|
redis.del('account_statuses_cleanup_scheduler:last_account_id')
|
||||||
else
|
else
|
||||||
Redis.current.set('account_statuses_cleanup_scheduler:last_account_id', id, ex: 1.hour.seconds)
|
redis.set('account_statuses_cleanup_scheduler:last_account_id', id, ex: 1.hour.seconds)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -35,6 +35,7 @@ require_relative '../lib/paperclip/response_with_limit_adapter'
|
||||||
require_relative '../lib/terrapin/multi_pipe_extensions'
|
require_relative '../lib/terrapin/multi_pipe_extensions'
|
||||||
require_relative '../lib/mastodon/snowflake'
|
require_relative '../lib/mastodon/snowflake'
|
||||||
require_relative '../lib/mastodon/version'
|
require_relative '../lib/mastodon/version'
|
||||||
|
require_relative '../lib/mastodon/rack_middleware'
|
||||||
require_relative '../lib/devise/two_factor_ldap_authenticatable'
|
require_relative '../lib/devise/two_factor_ldap_authenticatable'
|
||||||
require_relative '../lib/devise/two_factor_pam_authenticatable'
|
require_relative '../lib/devise/two_factor_pam_authenticatable'
|
||||||
require_relative '../lib/chewy/strategy/custom_sidekiq'
|
require_relative '../lib/chewy/strategy/custom_sidekiq'
|
||||||
|
@ -164,6 +165,7 @@ module Mastodon
|
||||||
|
|
||||||
config.middleware.use Rack::Attack
|
config.middleware.use Rack::Attack
|
||||||
config.middleware.use Rack::Deflater
|
config.middleware.use Rack::Deflater
|
||||||
|
config.middleware.use Mastodon::RackMiddleware
|
||||||
|
|
||||||
config.to_prepare do
|
config.to_prepare do
|
||||||
Doorkeeper::AuthorizationsController.layout 'modal'
|
Doorkeeper::AuthorizationsController.layout 'modal'
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
redis_connection = Redis.new(
|
|
||||||
url: ENV['REDIS_URL'],
|
|
||||||
driver: :hiredis
|
|
||||||
)
|
|
||||||
|
|
||||||
namespace = ENV.fetch('REDIS_NAMESPACE') { nil }
|
|
||||||
|
|
||||||
if namespace
|
|
||||||
Redis.current = Redis::Namespace.new(namespace, redis: redis_connection)
|
|
||||||
else
|
|
||||||
Redis.current = redis_connection
|
|
||||||
end
|
|
|
@ -1,12 +1,12 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require_relative '../../lib/sidekiq_error_handler'
|
require_relative '../../lib/mastodon/sidekiq_middleware'
|
||||||
|
|
||||||
Sidekiq.configure_server do |config|
|
Sidekiq.configure_server do |config|
|
||||||
config.redis = REDIS_SIDEKIQ_PARAMS
|
config.redis = REDIS_SIDEKIQ_PARAMS
|
||||||
|
|
||||||
config.server_middleware do |chain|
|
config.server_middleware do |chain|
|
||||||
chain.add SidekiqErrorHandler
|
chain.add Mastodon::SidekiqMiddleware
|
||||||
end
|
end
|
||||||
|
|
||||||
config.server_middleware do |chain|
|
config.server_middleware do |chain|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
require 'stoplight'
|
require 'stoplight'
|
||||||
|
|
||||||
Stoplight::Light.default_data_store = Stoplight::DataStore::Redis.new(Redis.current)
|
Stoplight::Light.default_data_store = Stoplight::DataStore::Redis.new(RedisConfiguration.new.connection)
|
||||||
Stoplight::Light.default_notifiers = [Stoplight::Notifier::Logger.new(Rails.logger)]
|
Stoplight::Light.default_notifiers = [Stoplight::Notifier::Logger.new(Rails.logger)]
|
||||||
|
|
|
@ -6,7 +6,7 @@ ca:
|
||||||
expires_at: Data límit
|
expires_at: Data límit
|
||||||
options: Opcions
|
options: Opcions
|
||||||
user:
|
user:
|
||||||
agreement: Acord de servei
|
agreement: Acord sobre serveis
|
||||||
email: Adreça de correu electrònic
|
email: Adreça de correu electrònic
|
||||||
locale: Idioma
|
locale: Idioma
|
||||||
password: Contrasenya
|
password: Contrasenya
|
||||||
|
@ -19,7 +19,7 @@ ca:
|
||||||
account:
|
account:
|
||||||
attributes:
|
attributes:
|
||||||
username:
|
username:
|
||||||
invalid: ha de contenir només lletres, números i subratllats
|
invalid: només pot contenir lletres, números i guions baixos
|
||||||
reserved: està reservat
|
reserved: està reservat
|
||||||
status:
|
status:
|
||||||
attributes:
|
attributes:
|
||||||
|
|
|
@ -1,56 +1,56 @@
|
||||||
---
|
---
|
||||||
ca:
|
ca:
|
||||||
about:
|
about:
|
||||||
about_hashtag_html: Aquestes són publicacions públiques etiquetades amb <strong>#%{hashtag}</strong>. Pots interactuar amb elles si tens un compte a qualsevol lloc del fedivers.
|
about_hashtag_html: Aquestes són publicacions públiques etiquetades amb <strong>#%{hashtag}</strong>. Hi pots interactuar si tens un compte a qualsevol lloc del fedivers.
|
||||||
about_mastodon_html: 'La xarxa social del futur: sense anuncis, sense vigilància corporativa, disseny ètic i descentralització. Posseeix les teves dades amb Mastodon!'
|
about_mastodon_html: 'La xarxa social del futur: sense anuncis, sense vigilància corporativa, disseny ètic i descentralització. Tingues el control de les teves dades amb Mastodon!'
|
||||||
about_this: Quant a
|
about_this: Quant a
|
||||||
active_count_after: actiu
|
active_count_after: actiu
|
||||||
active_footnote: Usuaris actius mensuals (UAM)
|
active_footnote: Usuaris actius mensuals (UAM)
|
||||||
administered_by: 'Administrat per:'
|
administered_by: 'Administrat per:'
|
||||||
api: API
|
api: API
|
||||||
apps: Apps mòbils
|
apps: Aplicacions mòbils
|
||||||
apps_platforms: Utilitza Mastodon des de iOS, Android i altres plataformes
|
apps_platforms: Utilitza Mastodon des d'iOS, Android i altres plataformes
|
||||||
browse_directory: Navega per el directori de perfils i filtra segons interessos
|
browse_directory: Navega pel directori de perfils i filtra segons interessos
|
||||||
browse_local_posts: Navega un flux en directe de publicacions públiques d’aquest servidor
|
browse_local_posts: Navega per una transmissió en directe de les publicacions públiques d’aquest servidor
|
||||||
browse_public_posts: Navega per una transmissió en directe de publicacions públiques a Mastodon
|
browse_public_posts: Navega per una transmissió en directe de les publicacions públiques a Mastodon
|
||||||
contact: Contacte
|
contact: Contacte
|
||||||
contact_missing: No configurat
|
contact_missing: No configurat
|
||||||
contact_unavailable: N/D
|
contact_unavailable: N/D
|
||||||
continue_to_web: Continua a l'aplicació web
|
continue_to_web: Continua a l'aplicació web
|
||||||
discover_users: Descobrir usuaris
|
discover_users: Descobreix usuaris
|
||||||
documentation: Documentació
|
documentation: Documentació
|
||||||
federation_hint_html: Amb un compte de %{instance} podràs seguir persones de qualsevol servidor Mastodon i altres.
|
federation_hint_html: Amb un compte de %{instance}, podràs seguir persones de qualsevol servidor Mastodon i de molts més.
|
||||||
get_apps: Provar una aplicació mòbil
|
get_apps: Prova una aplicació mòbil
|
||||||
hosted_on: Mastodon allotjat a %{domain}
|
hosted_on: Mastodon allotjat a %{domain}
|
||||||
instance_actor_flash: |
|
instance_actor_flash: |
|
||||||
Aquest compte és un actor virtual utilitzat per a representar al propi servidor i no cap usuari individual.
|
Aquest compte és un actor virtual usat per representar el servidor i no qualsevol usuari individual.
|
||||||
S'utilitza per a propòsits de federació i no ha de ser bloquejat si no voleu bloquejar tota la instància, en aquest cas hauríeu d'utilitzar un bloqueig de domini.
|
Es fa servir per a propòsits de federació i no s'ha de ser bloquejar si no voleu bloquejar tota la instància. En aquest cas, hauríeu d'utilitzar un bloqueig de domini.
|
||||||
learn_more: Aprèn més
|
learn_more: Més informació
|
||||||
logged_in_as_html: Actualment has iniciat sessió com a %{username}.
|
logged_in_as_html: Actualment has iniciat sessió com a %{username}.
|
||||||
logout_before_registering: Ja has iniciat sessió.
|
logout_before_registering: Ja has iniciat sessió.
|
||||||
privacy_policy: Política de privadesa
|
privacy_policy: Política de privadesa
|
||||||
rules: Normes del servidor
|
rules: Normes del servidor
|
||||||
rules_html: 'El de sota és un resum de les normes que has de seguir si vols tenir un compte en aquest servidor de Mastodon:'
|
rules_html: 'A continuació, es mostra un resum de les normes que has de seguir si vols tenir un compte en aquest servidor de Mastodon:'
|
||||||
see_whats_happening: Mira què està passant
|
see_whats_happening: Mira què està passant
|
||||||
server_stats: 'Estadístiques del servidor:'
|
server_stats: 'Estadístiques del servidor:'
|
||||||
source_code: Codi font
|
source_code: Codi font
|
||||||
status_count_after:
|
status_count_after:
|
||||||
one: publicació
|
one: publicació
|
||||||
other: publicacions
|
other: publicacions
|
||||||
status_count_before: Que han publicat
|
status_count_before: Qui ha publicat
|
||||||
tagline: Segueix els teus amics i descobreix-ne de nous
|
tagline: Segueix els teus amics i descobreix-ne de nous
|
||||||
terms: Termes del servei
|
terms: Condicions de servei
|
||||||
unavailable_content: Servidors moderats
|
unavailable_content: Servidors moderats
|
||||||
unavailable_content_description:
|
unavailable_content_description:
|
||||||
domain: Servidor
|
domain: Servidor
|
||||||
reason: Motiu
|
reason: Motiu
|
||||||
rejecting_media: 'Els arxius multimèdia d''aquests servidors no seran processats o emmagatzemats i cap miniatura serà mostrada, requerint clic manual a través de l''arxiu original:'
|
rejecting_media: 'Els arxius multimèdia d''aquests servidors no seran processats ni emmagatzemats. No es mostrarà cap miniatura i caldrà fer clic en l''arxiu original:'
|
||||||
rejecting_media_title: Mèdia filtrat
|
rejecting_media_title: Arxius multimèdia filtrats
|
||||||
silenced: 'Les publicacions d''aquests servidors seran amagades en les línies de temps públiques i en les converses, i cap notificació serà generada de les interaccions dels seus usuaris, llevat que estiguis seguint-los:'
|
silenced: 'Les publicacions d''aquests servidors s''ocultaran en les línies de temps públiques i en les converses. No es generarà cap notificació de les interaccions dels seus usuaris, tret que els segueixis:'
|
||||||
silenced_title: Servidors silenciats
|
silenced_title: Servidors limitats
|
||||||
suspended: 'Cap dada d''aquests servidors serà processada, emmagatzemada o intercanviada, fent impossible qualsevol interacció o comunicació amb els usuaris d''aquests servidors:'
|
suspended: 'No es processaran, emmagatzemaran ni s''intercanviaran dades d''aquests servidors i serà impossible interactuar o comunicar-se amb els usuaris d''aquests servidors:'
|
||||||
suspended_title: Servidors suspesos
|
suspended_title: Servidors suspesos
|
||||||
unavailable_content_html: Mastodon generalment et permet veure el contingut i interaccionar amb els usuaris de qualsevol altre servidor en el fedivers. Aquestes són les excepcions que s'han fet en aquest servidor particular.
|
unavailable_content_html: En general, Mastodon et permet veure el contingut i interaccionar amb els usuaris de qualsevol altre servidor del fedivers. Aquestes són les excepcions que s'han fet en aquest servidor particular.
|
||||||
user_count_after:
|
user_count_after:
|
||||||
one: usuari
|
one: usuari
|
||||||
other: usuaris
|
other: usuaris
|
||||||
|
@ -58,7 +58,7 @@ ca:
|
||||||
what_is_mastodon: Què és Mastodon?
|
what_is_mastodon: Què és Mastodon?
|
||||||
accounts:
|
accounts:
|
||||||
choices_html: 'Eleccions de %{name}:'
|
choices_html: 'Eleccions de %{name}:'
|
||||||
endorsements_hint: Pots recomanar persones que segueixes a l'interfície de web, que apareixeran aquí.
|
endorsements_hint: Pots recomanar persones que segueixes des de la interfície de web i apareixeran aquí.
|
||||||
featured_tags_hint: Pots presentar etiquetes específiques que seràn mostrades aquí.
|
featured_tags_hint: Pots presentar etiquetes específiques que seràn mostrades aquí.
|
||||||
follow: Segueix
|
follow: Segueix
|
||||||
followers:
|
followers:
|
||||||
|
@ -116,7 +116,7 @@ ca:
|
||||||
confirming: Confirmant
|
confirming: Confirmant
|
||||||
custom: Personalitzat
|
custom: Personalitzat
|
||||||
delete: Esborra les dades
|
delete: Esborra les dades
|
||||||
deleted: Esborrats
|
deleted: Eliminat
|
||||||
demote: Degrada
|
demote: Degrada
|
||||||
destroyed_msg: Les dades de %{username} son a la cua per a ser esborrades en breu
|
destroyed_msg: Les dades de %{username} son a la cua per a ser esborrades en breu
|
||||||
disable: Inhabilita
|
disable: Inhabilita
|
||||||
|
@ -753,7 +753,7 @@ ca:
|
||||||
batch:
|
batch:
|
||||||
remove_from_report: Treu del informe
|
remove_from_report: Treu del informe
|
||||||
report: Informe
|
report: Informe
|
||||||
deleted: Esborrats
|
deleted: Eliminada
|
||||||
media:
|
media:
|
||||||
title: Contingut multimèdia
|
title: Contingut multimèdia
|
||||||
no_status_selected: No s’han canviat els estatus perquè cap no ha estat seleccionat
|
no_status_selected: No s’han canviat els estatus perquè cap no ha estat seleccionat
|
||||||
|
|
|
@ -15,6 +15,7 @@ cy:
|
||||||
contact: Cyswllt
|
contact: Cyswllt
|
||||||
contact_missing: Heb ei osod
|
contact_missing: Heb ei osod
|
||||||
contact_unavailable: Ddim yn berthnasol
|
contact_unavailable: Ddim yn berthnasol
|
||||||
|
continue_to_web: Parhau i app gwe
|
||||||
discover_users: Darganfod defnyddwyr
|
discover_users: Darganfod defnyddwyr
|
||||||
documentation: Dogfennaeth
|
documentation: Dogfennaeth
|
||||||
federation_hint_html: Gyda cyfrif ar %{instance}, gallwch dilyn pobl ar unrhyw gweinydd Mastodon, a thu hwnt.
|
federation_hint_html: Gyda cyfrif ar %{instance}, gallwch dilyn pobl ar unrhyw gweinydd Mastodon, a thu hwnt.
|
||||||
|
@ -24,7 +25,11 @@ cy:
|
||||||
Mae'r cyfrif hwn yn actor rhithwir a ddefnyddir i gynrychioli'r gweinydd ei hun ac nid unrhyw ddefnyddiwr unigol.
|
Mae'r cyfrif hwn yn actor rhithwir a ddefnyddir i gynrychioli'r gweinydd ei hun ac nid unrhyw ddefnyddiwr unigol.
|
||||||
Fe'i defnyddir at ddibenion ffederasiwn ac ni ddylid ei rwystro oni bai eich bod am rwystro'r achos cyfan, ac os felly dylech ddefnyddio bloc parth.
|
Fe'i defnyddir at ddibenion ffederasiwn ac ni ddylid ei rwystro oni bai eich bod am rwystro'r achos cyfan, ac os felly dylech ddefnyddio bloc parth.
|
||||||
learn_more: Dysu mwy
|
learn_more: Dysu mwy
|
||||||
|
logged_in_as_html: Rydych chi wedi mewngofnodi fel %{username}.
|
||||||
|
logout_before_registering: Rydych chi eisoes wedi mewngofnodi.
|
||||||
privacy_policy: Polisi preifatrwydd
|
privacy_policy: Polisi preifatrwydd
|
||||||
|
rules: Rheolau gweinydd
|
||||||
|
rules_html: 'Isod mae crynodeb o''r rheolau y mae angen i chi eu dilyn os ydych chi am gael cyfrif ar y gweinydd hwn o Mastodon:'
|
||||||
see_whats_happening: Gweld beth sy'n digwydd
|
see_whats_happening: Gweld beth sy'n digwydd
|
||||||
server_stats: 'Ystadegau gweinydd:'
|
server_stats: 'Ystadegau gweinydd:'
|
||||||
source_code: Cod ffynhonnell
|
source_code: Cod ffynhonnell
|
||||||
|
@ -93,6 +98,7 @@ cy:
|
||||||
posts_with_replies: Tŵtiau ac atebion
|
posts_with_replies: Tŵtiau ac atebion
|
||||||
roles:
|
roles:
|
||||||
admin: Gweinyddwr
|
admin: Gweinyddwr
|
||||||
|
bot: Bot
|
||||||
group: Grŵp
|
group: Grŵp
|
||||||
moderator: Safonwr
|
moderator: Safonwr
|
||||||
unavailable: Proffil ddim ar gael
|
unavailable: Proffil ddim ar gael
|
||||||
|
|
|
@ -517,6 +517,7 @@ de:
|
||||||
delivery:
|
delivery:
|
||||||
all: Alle
|
all: Alle
|
||||||
clear: Zustellfehler löschen
|
clear: Zustellfehler löschen
|
||||||
|
failing: Schlägt fehl
|
||||||
restart: Lieferung neu starten
|
restart: Lieferung neu starten
|
||||||
stop: Lieferung stoppen
|
stop: Lieferung stoppen
|
||||||
unavailable: Nicht verfügbar
|
unavailable: Nicht verfügbar
|
||||||
|
@ -659,8 +660,8 @@ de:
|
||||||
desc_html: Anzahl der lokal geposteten Beiträge, aktiven Nutzern und neuen Registrierungen in wöchentlichen Zusammenfassungen
|
desc_html: Anzahl der lokal geposteten Beiträge, aktiven Nutzern und neuen Registrierungen in wöchentlichen Zusammenfassungen
|
||||||
title: Veröffentliche gesamte Statistiken über Benutzeraktivitäten
|
title: Veröffentliche gesamte Statistiken über Benutzeraktivitäten
|
||||||
bootstrap_timeline_accounts:
|
bootstrap_timeline_accounts:
|
||||||
desc_html: Mehrere Profilnamen durch Kommata trennen. Funktioniert nur mit lokalen und nicht gesperrten Konten. Standardwert bei freigelassenem Feld sind alle lokalen Admins.
|
desc_html: Mehrere Profilnamen durch Kommata trennen. Diese Accounts werden immer in den Folgemempfehlungen angezeigt
|
||||||
title: Konten, denen Neu-Angemeldete automatisch folgen
|
title: Konten, die Neu-Angemeldete empfohlen bekommen sollen
|
||||||
contact_information:
|
contact_information:
|
||||||
email: Öffentliche E-Mail-Adresse
|
email: Öffentliche E-Mail-Adresse
|
||||||
username: Profilname für die Kontaktaufnahme
|
username: Profilname für die Kontaktaufnahme
|
||||||
|
@ -1233,8 +1234,8 @@ de:
|
||||||
body: Hier ist eine kurze Zusammenfassung der Nachrichten, die du seit deinem letzten Besuch am %{since} verpasst hast
|
body: Hier ist eine kurze Zusammenfassung der Nachrichten, die du seit deinem letzten Besuch am %{since} verpasst hast
|
||||||
mention: "%{name} hat dich erwähnt:"
|
mention: "%{name} hat dich erwähnt:"
|
||||||
new_followers_summary:
|
new_followers_summary:
|
||||||
one: Außerdem ist dir seit du weg warst ein weiteres Wesen gefolgt! Juhu!
|
one: Außerdem ist dir seit du weg warst ein weiteres Konto gefolgt! Juhu!
|
||||||
other: Außerdem sind dir seit du weg warst %{count} weitere Wesen gefolgt! Großartig!
|
other: Außerdem sind dir seit du weg warst %{count} weitere Konten gefolgt! Großartig!
|
||||||
subject:
|
subject:
|
||||||
one: "1 neue Mitteilung seit deinem letzten Besuch 🐘"
|
one: "1 neue Mitteilung seit deinem letzten Besuch 🐘"
|
||||||
other: "%{count} neue Mitteilungen seit deinem letzten Besuch 🐘"
|
other: "%{count} neue Mitteilungen seit deinem letzten Besuch 🐘"
|
||||||
|
|
|
@ -3,87 +3,87 @@ ca:
|
||||||
devise:
|
devise:
|
||||||
confirmations:
|
confirmations:
|
||||||
confirmed: La teva adreça de correu electrònic s'ha confirmat correctament.
|
confirmed: La teva adreça de correu electrònic s'ha confirmat correctament.
|
||||||
send_instructions: "En pocs minuts rebràs un correu electrònic amb instruccions sobre com confirmar l'adreça de correu. \nSi us plau verifica la teva carpeta de correu brossa si no has rebut aquest correu."
|
send_instructions: "En pocs minuts, rebràs un correu electrònic amb instruccions sobre com confirmar l'adreça de correu. \nSi us plau, verifica la teva carpeta de correu brossa si no l'has rebut."
|
||||||
send_paranoid_instructions: |-
|
send_paranoid_instructions: |-
|
||||||
Si l'adreça de correu electrònic existeix en la nostra base de dades, en pocs minuts rebràs un correu electrònic amb instruccions sobre com confirmar l'adreça de correu.
|
Si l'adreça de correu electrònic ja existeix a la nostra base de dades, rebràs un correu electrònic amb instruccions sobre com confirmar-la.
|
||||||
Si us plau verifica la teva carpeta de correu brossa si no has rebut aquest correu.
|
Si us plau, verifica la teva carpeta de correu brossa si no has rebut el correu.
|
||||||
failure:
|
failure:
|
||||||
already_authenticated: Ja estàs registrat.
|
already_authenticated: Ja estàs registrat.
|
||||||
inactive: El teu compte encara no s'ha activat.
|
inactive: El teu compte encara no s'ha activat.
|
||||||
invalid: "%{authentication_keys} o contrasenya no són vàlids."
|
invalid: "%{authentication_keys} o la contrasenya no són vàlids."
|
||||||
last_attempt: Tens un intent més, abans que es bloquegi el compte.
|
last_attempt: Tens un intent més abans que es bloquegi el teu compte.
|
||||||
locked: El compte s'ha bloquejat.
|
locked: El compte s'ha bloquejat.
|
||||||
not_found_in_database: "%{authentication_keys} o contrasenya no són vàlids."
|
not_found_in_database: "%{authentication_keys} o la contrasenya no són vàlids."
|
||||||
pending: El teu compte encara està en revisió.
|
pending: El teu compte encara està en revisió.
|
||||||
timeout: La sessió ha expirat. Inicia sessió una altra vegada per a continuar.
|
timeout: La sessió ha expirat. Torna a iniciar la sessió per continuar.
|
||||||
unauthenticated: Cal iniciar sessió o registrar-se abans de continuar.
|
unauthenticated: Cal iniciar sessió o registrar-se abans de continuar.
|
||||||
unconfirmed: Has de confirmar l'adreça de correu electrònic abans de continuar.
|
unconfirmed: Has de confirmar l'adreça de correu electrònic abans de continuar.
|
||||||
mailer:
|
mailer:
|
||||||
confirmation_instructions:
|
confirmation_instructions:
|
||||||
action: Verifica l'adreça de correu
|
action: Verifica l'adreça de correu
|
||||||
action_with_app: Confirma i torna a %{app}
|
action_with_app: Confirma i torna a %{app}
|
||||||
explanation: Has creat un compte a %{host} amb aquesta adreça de correu electrònic. Estàs a un sol clic de l'activació. Si no fos així, ignora aquest correu electrònic.
|
explanation: Has creat un compte a %{host} amb aquesta adreça de correu electrònic. Estàs a un sol clic d'activar-lo. Si no ho has fet tu, ignora aquest correu electrònic.
|
||||||
explanation_when_pending: Has sol·licitat una invitació a %{host} amb aquesta adreça de correu electrònic. Un cop confirmis la teva adreça de correu electrònic revisarem la teva sol·licitud. No es pot iniciar la sessió fins llavors. Si la teva sol·licitud és rebutjada les teves dades s’eliminaran, de manera que no s’exigirà cap altra acció. Si no has estat tu qui ha fet aquest sol·licitud si us plau ignora aquest correu electrònic.
|
explanation_when_pending: Has sol·licitat una invitació a %{host} amb aquesta adreça de correu electrònic. Un cop confirmis la teva adreça de correu electrònic, revisarem la teva sol·licitud. Pots iniciar la sessió per canviar els detalls o eliminar el teu compte, però no pots accedir a la majoria de les funcions fins que s'hagi aprovat. Si es rebutja la teva sol·licitud, les teves dades s’eliminaran, de manera que no se t’exigirà cap més acció. Si no has estat tu qui ha fet aquesta sol·licitud, ignora aquest correu electrònic, si us plau.
|
||||||
extra_html: Si us plau consulta també <a href="%{terms_path}"> les regles del servidor</a> i <a href="%{policy_path}"> les nostres condicions de servei</a>.
|
extra_html: Si us plau, consulta també a <a href="%{terms_path}"> les regles del servidor</a> i a <a href="%{policy_path}"> les nostres condicions de servei</a>.
|
||||||
subject: 'Mastodon: Instruccions de confirmació per a %{instance}'
|
subject: 'Mastodon: instruccions de confirmació per a %{instance}'
|
||||||
title: Verifica l'adreça de correu
|
title: Verifica l'adreça de correu
|
||||||
email_changed:
|
email_changed:
|
||||||
explanation: 'L''adreça de correu del teu compte s''està canviant a:'
|
explanation: 'L''adreça de correu del teu compte s''està canviant a:'
|
||||||
extra: Si no has canviat el teu correu electrònic és probable que algú hagi accedit al teu compte. Si us plau, canvia la contrasenya immediatament o posa't en contacte amb l'administrador del servidor si no pots accedir al teu compte.
|
extra: Si no has canviat el teu correu electrònic, és probable que algú hagi accedit al teu compte. Si us plau, canvia la contrasenya immediatament o posa't en contacte amb l'administrador del servidor si no pots accedir al teu compte.
|
||||||
subject: 'Mastodon: s''ha canviat l''adreça electrònica'
|
subject: 'Mastodon: s''ha canviat l''adreça electrònica'
|
||||||
title: Adreça de correu electrònic nova
|
title: Nova adreça de correu electrònic
|
||||||
password_change:
|
password_change:
|
||||||
explanation: S'ha canviat la contrasenya del teu compte.
|
explanation: S'ha canviat la contrasenya del teu compte.
|
||||||
extra: Si no has canviat la teva contrasenya, és probable que algú hagi accedit al teu compte. Si us plau, canvia la contrasenya immediatament o posa't en contacte amb l'administrador del servidor si no pots accedir al teu compte.
|
extra: Si no has canviat la teva contrasenya, és probable que algú hagi accedit al teu compte. Si us plau, canvia la contrasenya immediatament o posa't en contacte amb l'administrador del servidor si no pots accedir al teu compte.
|
||||||
subject: 'Mastodon: Contrasenya canviada'
|
subject: 'Mastodon: contrasenya canviada'
|
||||||
title: Contrasenya canviada
|
title: Contrasenya canviada
|
||||||
reconfirmation_instructions:
|
reconfirmation_instructions:
|
||||||
explanation: Confirma la nova adreça per canviar el teu correu electrònic.
|
explanation: Confirma la nova adreça per canviar el teu correu electrònic.
|
||||||
extra: Si no has iniciat aquest canvi, ignora aquest correu electrònic. L'adreça electrònica del compte de Mastodon no canviarà fins que accedeixis a l'enllaç de dalt.
|
extra: Si tu no has iniciat aquest canvi, ignora aquest correu electrònic. L'adreça de correu electrònic del compte de Mastodon no canviarà fins que no accedeixis a l'enllaç que hi ha a dalt.
|
||||||
subject: 'Mastodon: confirma l''adreça electrònica per a %{instance}'
|
subject: 'Mastodon: confirma l''adreça electrònica per a %{instance}'
|
||||||
title: Verifica l'adreça de correu electrònic
|
title: Verifica l'adreça de correu electrònic
|
||||||
reset_password_instructions:
|
reset_password_instructions:
|
||||||
action: Canviar contrasenya
|
action: Canvia la contrasenya
|
||||||
explanation: Has sol·licitat una contrasenya nova per al teu compte.
|
explanation: Has sol·licitat una contrasenya nova per al teu compte.
|
||||||
extra: Si no ho has sol·licitat, ignora aquest correu electrònic. La teva contrasenya no canviarà fins que accedeixis a l'enllaç de dalt i creis un de nou.
|
extra: Si no l'has sol·licitat, ignora aquest correu electrònic. La teva contrasenya no canviarà fins que no accedeixis a l'enllaç que hi ha a dalt i en creïs una de nova.
|
||||||
subject: 'Mastodon: Instruccions per a reiniciar contrasenya'
|
subject: 'Mastodon: instruccions per reiniciar la contrasenya'
|
||||||
title: Contrasenya restablerta
|
title: Contrasenya restablerta
|
||||||
two_factor_disabled:
|
two_factor_disabled:
|
||||||
explanation: L´autenticació de dos factors pel teu compte ha estat desactivat. L'inici de sessió és ara possible utilitzant només l'adreça de correu electrònic i la contrasenya.
|
explanation: L'autenticació de doble factor per al teu compte s'ha desactivat. Ara només pots iniciar la sessió fent servir la teva adreça de correu electrònic i la contrasenya.
|
||||||
subject: 'Mastodon: autenticació de dos factors desactivada'
|
subject: 'Mastodon: autenticació de doble factor desactivada'
|
||||||
title: 2FA desactivat
|
title: AF2 desactivat
|
||||||
two_factor_enabled:
|
two_factor_enabled:
|
||||||
explanation: L'autenticació de dos factors ha estat habilitada pel teu compte. Un token generat per l'aplicació d'emparellat TOTP serà requerit per a iniciar sessió.
|
explanation: L'autenticació de doble factor s'ha habilitat per al teu compte. Per iniciar la sessió, es requerirà un token generat per l'aplicació TOTP que hagis emparellat.
|
||||||
subject: 'Mastodon: autenticació de dos factors activada'
|
subject: 'Mastodon: autenticació de doble factor activada'
|
||||||
title: 2FA activat
|
title: AF2 activat
|
||||||
two_factor_recovery_codes_changed:
|
two_factor_recovery_codes_changed:
|
||||||
explanation: Els codis de recuperació anteriors han estat invalidats i s'han generat uns de nous.
|
explanation: Els codis de recuperació anteriors ja no són vàlids i se n'han generat de nous.
|
||||||
subject: 'Mastodon: codis de recuperació de Dos factors regenerats'
|
subject: 'Mastodon: codis de recuperació de doble factor regenerats'
|
||||||
title: 2FA codis de recuperació canviats
|
title: Codis de recuperació A2F canviats
|
||||||
unlock_instructions:
|
unlock_instructions:
|
||||||
subject: 'Mastodon: Instruccions de desbloqueig'
|
subject: 'Mastodon: instruccions per desbloquejar'
|
||||||
webauthn_credential:
|
webauthn_credential:
|
||||||
added:
|
added:
|
||||||
explanation: La següent clau de seguretat s'ha afegit al teu compte
|
explanation: S'ha afegit la següent clau de seguretat al vostre compte
|
||||||
subject: 'Mastodon: Nova clau de seguretat'
|
subject: 'Mastodon: nova clau de seguretat'
|
||||||
title: S'ha afegit una nova clau de seguretat
|
title: S'ha afegit una nova clau de seguretat
|
||||||
deleted:
|
deleted:
|
||||||
explanation: La següent clau de seguretat s'ha esborrat del teu compte
|
explanation: La següent clau de seguretat s'ha esborrat del teu compte
|
||||||
subject: 'Mastodon: clau de seguretat esborrada'
|
subject: 'Mastodon: clau de seguretat esborrada'
|
||||||
title: Una de les teves claus de seguretat ha estat esborrada
|
title: Una de les teves claus de seguretat ha estat esborrada
|
||||||
webauthn_disabled:
|
webauthn_disabled:
|
||||||
explanation: S'ha desactivat l'autenticació amb claus de seguretat per al teu compte. L'inici de sessió és ara possible emprant només el token generat per l'aplicació TOTP.
|
explanation: S'ha desactivat l'autenticació amb claus de seguretat per al teu compte. Ara només pots iniciar la sessió usant el token generat per l'aplicació TOTP.
|
||||||
subject: 'Mastodon: S''ha desactivat l''autenticació amb claus de seguretat'
|
subject: 'Mastodon: s''ha desactivat l''autenticació amb claus de seguretat'
|
||||||
title: Claus de seguretat desactivades
|
title: Claus de seguretat desactivades
|
||||||
webauthn_enabled:
|
webauthn_enabled:
|
||||||
explanation: S'ha activat l'autenticació amb claus de seguretat. La teva clau de seguretat por ser emprada per a iniciar sessió.
|
explanation: S'ha activat l'autenticació amb claus de seguretat. Ja pots usar la teva clau de seguretat per iniciar sessió.
|
||||||
subject: 'Mastodon: Autenticació amb clau de seguretat activada'
|
subject: 'Mastodon: autenticació amb clau de seguretat activada'
|
||||||
title: Claus de seguretat activades
|
title: Claus de seguretat activades
|
||||||
omniauth_callbacks:
|
omniauth_callbacks:
|
||||||
failure: No podem autenticar-te des de %{kind} degut a "%{reason}".
|
failure: No s'ha pogut autenticar des de %{kind} degut a "%{reason}".
|
||||||
success: Autenticat amb èxit des del compte %{kind}.
|
success: Autenticat correctament des del compte %{kind}.
|
||||||
passwords:
|
passwords:
|
||||||
no_token: No pots accedir a aquesta pàgina sense provenir des del correu de restabliment de la contrasenya. Si vens des del correu de restabliment de contrasenya, assegura't que estàs emprant l'adreça completa proporcionada.
|
no_token: Només pots accedir a aquesta pàgina a través de l'enllaç de restabliment de la contrasenya. Si vens d'un correu electrònic com aquest, assegura't que has introduït l'adreça completa proporcionada.
|
||||||
send_instructions: Si el teu correu electrònic existeix en la nostra base de dades, rebràs en pocs minuts un enllaç de restabliment de contrasenya en l'adreça de correu. Si us plau verifica la teva carpeta de correu brossa si no has rebut aquest correu.
|
send_instructions: Si el teu correu electrònic existeix en la nostra base de dades, rebràs en pocs minuts un enllaç de restabliment de contrasenya en l'adreça de correu. Si us plau verifica la teva carpeta de correu brossa si no has rebut aquest correu.
|
||||||
send_paranoid_instructions: Si el teu correu electrònic existeix en la nostra base de dades, rebràs un enllaç de restabliment de contrasenya en l'adreça de correu en pocs minuts. Si us plau verifica la carpeta de correu brossa si no reps aquest correu.
|
send_paranoid_instructions: Si el teu correu electrònic existeix en la nostra base de dades, rebràs un enllaç de restabliment de contrasenya en l'adreça de correu en pocs minuts. Si us plau verifica la carpeta de correu brossa si no reps aquest correu.
|
||||||
updated: La contrasenya s'ha canviat correctament. Ara ja estàs registrat.
|
updated: La contrasenya s'ha canviat correctament. Ara ja estàs registrat.
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
vi:
|
vi:
|
||||||
devise:
|
devise:
|
||||||
confirmations:
|
confirmations:
|
||||||
confirmed: Địa chỉ email của bạn đã được xác thực thành công.
|
confirmed: Địa chỉ email của bạn đã được xác minh thành công.
|
||||||
send_instructions: Bạn sẽ nhận được một email hướng dẫn cách xác thực địa chỉ email trong vài phút tới. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này.
|
send_instructions: Bạn sẽ nhận được một email hướng dẫn cách xác minh địa chỉ email trong vài phút tới. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này.
|
||||||
send_paranoid_instructions: Nếu địa chỉ email của bạn đã tồn tại trong cơ sở dữ liệu của chúng tôi, bạn sẽ nhận được một email hướng dẫn cách xác thực lại địa chỉ email. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này.
|
send_paranoid_instructions: Nếu địa chỉ email của bạn đã tồn tại trong cơ sở dữ liệu của chúng tôi, bạn sẽ nhận được một email hướng dẫn cách xác minh lại địa chỉ email. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này.
|
||||||
failure:
|
failure:
|
||||||
already_authenticated: Bạn đã đăng nhập rồi.
|
already_authenticated: Bạn đã đăng nhập rồi.
|
||||||
inactive: Tài khoản của bạn chưa được kich hoạt.
|
inactive: Tài khoản của bạn chưa được kich hoạt.
|
||||||
|
@ -15,16 +15,16 @@ vi:
|
||||||
pending: Tài khoản của bạn vẫn đang được xem xét.
|
pending: Tài khoản của bạn vẫn đang được xem xét.
|
||||||
timeout: Phiên của bạn đã hết hạn. Vui lòng đăng nhập lại để tiếp tục.
|
timeout: Phiên của bạn đã hết hạn. Vui lòng đăng nhập lại để tiếp tục.
|
||||||
unauthenticated: Bạn cần đăng nhập hoặc đăng ký trước khi tiếp tục.
|
unauthenticated: Bạn cần đăng nhập hoặc đăng ký trước khi tiếp tục.
|
||||||
unconfirmed: Bạn phải xác thực địa chỉ email trước khi tiếp tục.
|
unconfirmed: Bạn phải xác minh địa chỉ email trước khi tiếp tục.
|
||||||
mailer:
|
mailer:
|
||||||
confirmation_instructions:
|
confirmation_instructions:
|
||||||
action: Xác thực địa chỉ email
|
action: Xác minh địa chỉ email
|
||||||
action_with_app: Xác nhận và quay lại %{app}
|
action_with_app: Xác nhận và quay lại %{app}
|
||||||
explanation: Bạn đã tạo một tài khoản trên %{host} với địa chỉ email này. Chỉ cần một cú nhấp chuột nữa để kích hoạt nó. Nếu đây không phải là bạn, xin vui lòng bỏ qua email này.
|
explanation: Bạn đã tạo một tài khoản trên %{host} với địa chỉ email này. Chỉ cần một cú nhấp chuột nữa để kích hoạt nó. Nếu đây không phải là bạn, xin vui lòng bỏ qua email này.
|
||||||
explanation_when_pending: Bạn vừa đăng ký %{host} với địa chỉ email này. Chúng tôi chỉ xem xét đơn đăng ký sau khi bạn xác thực địa chỉ email. Bạn có thể đăng nhập để thay đổi chi tiết hoặc xóa tài khoản của mình, nhưng bạn không thể sử dụng đầy đủ tính năng cho đến khi tài khoản được xác thực. Nếu bạn bị từ chối, dữ liệu của bạn sẽ bị xóa, do đó bạn sẽ không cần phải làm gì thêm nữa. Nếu không phải do bạn đăng ký, xin vui lòng bỏ qua email này.
|
explanation_when_pending: Bạn vừa đăng ký %{host} với địa chỉ email này. Chúng tôi chỉ xem xét đơn đăng ký sau khi bạn xác minh địa chỉ email. Bạn có thể đăng nhập để thay đổi chi tiết hoặc xóa tài khoản của mình, nhưng bạn không thể sử dụng đầy đủ tính năng cho đến khi tài khoản được xác minh. Nếu bạn bị từ chối, dữ liệu của bạn sẽ bị xóa, do đó bạn sẽ không cần phải làm gì thêm nữa. Nếu không phải do bạn đăng ký, xin vui lòng bỏ qua email này.
|
||||||
extra_html: Xin đọc kỹ <a href="%{terms_path}">quy tắc máy chủ</a> và <a href="%{policy_path}">chính sách riêng tư</a> của chúng tôi.
|
extra_html: Xin đọc kỹ <a href="%{terms_path}">quy tắc máy chủ</a> và <a href="%{policy_path}">chính sách riêng tư</a> của chúng tôi.
|
||||||
subject: 'Mastodon: Xác thực email cho %{instance}'
|
subject: 'Mastodon: Xác minh email cho %{instance}'
|
||||||
title: Xác thực địa chỉ email
|
title: Xác minh địa chỉ email
|
||||||
email_changed:
|
email_changed:
|
||||||
explanation: 'Địa chỉ email cho tài khoản của bạn đang được thay đổi thành:'
|
explanation: 'Địa chỉ email cho tài khoản của bạn đang được thay đổi thành:'
|
||||||
extra: Nếu bạn không thay đổi email của mình, có khả năng ai đó đã truy cập được vào tài khoản của bạn. Hãy thay đổi mật khẩu ngay lập tức hoặc liên hệ với quản trị viên.
|
extra: Nếu bạn không thay đổi email của mình, có khả năng ai đó đã truy cập được vào tài khoản của bạn. Hãy thay đổi mật khẩu ngay lập tức hoặc liên hệ với quản trị viên.
|
||||||
|
@ -38,8 +38,8 @@ vi:
|
||||||
reconfirmation_instructions:
|
reconfirmation_instructions:
|
||||||
explanation: Xác nhận địa chỉ email mới của bạn.
|
explanation: Xác nhận địa chỉ email mới của bạn.
|
||||||
extra: Nếu thay đổi này không phải do bạn thực hiện, vui lòng bỏ qua email này. Địa chỉ email cho tài khoản Mastodon sẽ giữ nguyên cho đến khi bạn truy cập vào liên kết ở trên.
|
extra: Nếu thay đổi này không phải do bạn thực hiện, vui lòng bỏ qua email này. Địa chỉ email cho tài khoản Mastodon sẽ giữ nguyên cho đến khi bạn truy cập vào liên kết ở trên.
|
||||||
subject: 'Mastodon: Xác thực email cho %{instance}'
|
subject: 'Mastodon: Xác minh email cho %{instance}'
|
||||||
title: Xác thực địa chỉ email
|
title: Xác minh địa chỉ email
|
||||||
reset_password_instructions:
|
reset_password_instructions:
|
||||||
action: Đổi mật khẩu
|
action: Đổi mật khẩu
|
||||||
explanation: Bạn đã yêu cầu mật khẩu mới cho tài khoản của bạn.
|
explanation: Bạn đã yêu cầu mật khẩu mới cho tài khoản của bạn.
|
||||||
|
@ -47,13 +47,13 @@ vi:
|
||||||
subject: 'Mastodon: Hướng dẫn đổi lại mật khẩu'
|
subject: 'Mastodon: Hướng dẫn đổi lại mật khẩu'
|
||||||
title: Đổi lại mật khẩu
|
title: Đổi lại mật khẩu
|
||||||
two_factor_disabled:
|
two_factor_disabled:
|
||||||
explanation: Đã vô hiệu hóa xác thực hai bước cho tài khoản của bạn. Bây giờ chỉ có thể đăng nhập bằng địa chỉ email và mật khẩu.
|
explanation: Đã vô hiệu hóa xác minh 2 bước cho tài khoản của bạn. Bây giờ chỉ có thể đăng nhập bằng địa chỉ email và mật khẩu.
|
||||||
subject: 'Mastodon: Xác thực hai bước đã bị vô hiệu hóa'
|
subject: 'Mastodon: Xác minh 2 bước đã bị vô hiệu hóa'
|
||||||
title: Vô hiệu hóa xác thực hai bước
|
title: Vô hiệu hóa xác minh 2 bước
|
||||||
two_factor_enabled:
|
two_factor_enabled:
|
||||||
explanation: Tài khoản của bạn đã kích hoạt xác thực hai bước. Lần đăng nhập tới sẽ cần thêm mã đăng nhập được tạo bởi ứng dụng TOTP.
|
explanation: Tài khoản của bạn đã kích hoạt xác minh 2 bước. Lần đăng nhập tới sẽ cần thêm mã đăng nhập được tạo bởi ứng dụng TOTP.
|
||||||
subject: 'Mastodon: Kích hoạt xác thực hai yếu tố'
|
subject: 'Mastodon: Kích hoạt xác minh 2 bước'
|
||||||
title: Kích hoạt xác thực hai bước
|
title: Kích hoạt xác minh 2 bước
|
||||||
two_factor_recovery_codes_changed:
|
two_factor_recovery_codes_changed:
|
||||||
explanation: Các mã khôi phục trước đó đã bị vô hiệu hóa và thay bằng mã mới.
|
explanation: Các mã khôi phục trước đó đã bị vô hiệu hóa và thay bằng mã mới.
|
||||||
subject: 'Mastodon: Mã khôi phục xác thực hai yếu tố đã được tạo lại'
|
subject: 'Mastodon: Mã khôi phục xác thực hai yếu tố đã được tạo lại'
|
||||||
|
@ -75,13 +75,13 @@ vi:
|
||||||
title: Đã vô hiệu hóa khóa bảo mật
|
title: Đã vô hiệu hóa khóa bảo mật
|
||||||
webauthn_enabled:
|
webauthn_enabled:
|
||||||
explanation: Bạn vừa kích hoạt xác thực tài khoản bằng khóa bảo mật. Từ bây giờ, khóa bảo mật của bạn sẽ được dùng để đăng nhập.
|
explanation: Bạn vừa kích hoạt xác thực tài khoản bằng khóa bảo mật. Từ bây giờ, khóa bảo mật của bạn sẽ được dùng để đăng nhập.
|
||||||
subject: 'Mastodon: Kích hoạt xác thực bằng khóa bảo mật'
|
subject: 'Mastodon: Kích hoạt xác minh bằng khóa bảo mật'
|
||||||
title: Đã kích hoạt khóa bảo mật
|
title: Đã kích hoạt khóa bảo mật
|
||||||
omniauth_callbacks:
|
omniauth_callbacks:
|
||||||
failure: Không thể xác thực bạn từ %{kind} bởi vì "%{reason}".
|
failure: Không thể xác minh bạn từ %{kind} bởi vì "%{reason}".
|
||||||
success: Xác thực tài khoản %{kind} thành công.
|
success: Xác minh tài khoản %{kind} thành công.
|
||||||
passwords:
|
passwords:
|
||||||
no_token: Bạn chỉ có thể truy cập trang này khi nhận được email phục hồi mật khẩu. Nếu vẫn không được, vui lòng chắc chắn rằng bạn đã dùng chính xác URL được cung cấp.
|
no_token: Bạn chỉ có thể truy cập trang này khi nhận được email khôi phục mật khẩu. Nếu vẫn không được, vui lòng chắc chắn rằng bạn đã dùng chính xác URL được cung cấp.
|
||||||
send_instructions: Nếu địa chỉ email của bạn tồn tại trong cơ sở dữ liệu của chúng tôi, bạn sẽ nhận được liên kết khôi phục mật khẩu tại địa chỉ email của bạn sau vài phút. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này.
|
send_instructions: Nếu địa chỉ email của bạn tồn tại trong cơ sở dữ liệu của chúng tôi, bạn sẽ nhận được liên kết khôi phục mật khẩu tại địa chỉ email của bạn sau vài phút. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này.
|
||||||
send_paranoid_instructions: Nếu địa chỉ email của bạn tồn tại trong cơ sở dữ liệu của chúng tôi, bạn sẽ nhận được liên kết khôi phục mật khẩu tại địa chỉ email của bạn sau vài phút. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này.
|
send_paranoid_instructions: Nếu địa chỉ email của bạn tồn tại trong cơ sở dữ liệu của chúng tôi, bạn sẽ nhận được liên kết khôi phục mật khẩu tại địa chỉ email của bạn sau vài phút. Xin kiểm tra thư mục thư rác nếu như bạn không thấy email này.
|
||||||
updated: Mật khẩu của bạn đã được thay đổi thành công. Hiện tại bạn đã đăng nhập.
|
updated: Mật khẩu của bạn đã được thay đổi thành công. Hiện tại bạn đã đăng nhập.
|
||||||
|
@ -91,9 +91,9 @@ vi:
|
||||||
signed_up: Chúc mừng! Bạn đã đăng ký thành công.
|
signed_up: Chúc mừng! Bạn đã đăng ký thành công.
|
||||||
signed_up_but_inactive: Bạn đã đăng ký thành công. Tuy nhiên, bạn cần phải kích hoạt tài khoản mới có thể đăng nhập.
|
signed_up_but_inactive: Bạn đã đăng ký thành công. Tuy nhiên, bạn cần phải kích hoạt tài khoản mới có thể đăng nhập.
|
||||||
signed_up_but_locked: Bạn đã đăng ký thành công. Tuy nhiên, chúng tôi không thể đăng nhập cho bạn vì tài khoản của bạn bị khóa.
|
signed_up_but_locked: Bạn đã đăng ký thành công. Tuy nhiên, chúng tôi không thể đăng nhập cho bạn vì tài khoản của bạn bị khóa.
|
||||||
signed_up_but_pending: Một email xác thực đã được gửi đến địa chỉ email của bạn. Sau khi bạn nhấp vào liên kết, chúng tôi sẽ xem xét đơn đăng ký của bạn và thông báo nếu đơn được chấp thuận.
|
signed_up_but_pending: Một email xác minh đã được gửi đến địa chỉ email của bạn. Sau khi bạn nhấp vào liên kết, chúng tôi sẽ xem xét đơn đăng ký của bạn và thông báo nếu đơn được chấp thuận.
|
||||||
signed_up_but_unconfirmed: Một email xác thực đã được gửi đến địa chỉ email của bạn. Hãy nhấp vào liên kết trong email để kích hoạt tài khoản của bạn. Nếu không thấy, hãy kiểm tra mục thư rác.
|
signed_up_but_unconfirmed: Một email xác minh đã được gửi đến địa chỉ email của bạn. Hãy nhấp vào liên kết trong email để kích hoạt tài khoản của bạn. Nếu không thấy, hãy kiểm tra mục thư rác.
|
||||||
update_needs_confirmation: Bạn đã cập nhật tài khoản thành công, nhưng chúng tôi cần xác thực địa chỉ email mới của bạn. Vui lòng kiểm tra email và nhấp vào liên kết xác thực. Nếu bạn không thấy email, hãy kiểm tra trong thư rác.
|
update_needs_confirmation: Bạn đã cập nhật tài khoản thành công, nhưng chúng tôi cần xác minh địa chỉ email mới của bạn. Vui lòng kiểm tra email và nhấp vào liên kết xác minh. Nếu bạn không thấy email, hãy kiểm tra trong thư rác.
|
||||||
updated: Tài khoản của bạn đã được cập nhật thành công.
|
updated: Tài khoản của bạn đã được cập nhật thành công.
|
||||||
sessions:
|
sessions:
|
||||||
already_signed_out: Đã đăng xuất.
|
already_signed_out: Đã đăng xuất.
|
||||||
|
@ -105,8 +105,8 @@ vi:
|
||||||
unlocked: Tài khoản của bạn đã được mở khóa thành công. Vui lòng đăng nhập để tiếp tục.
|
unlocked: Tài khoản của bạn đã được mở khóa thành công. Vui lòng đăng nhập để tiếp tục.
|
||||||
errors:
|
errors:
|
||||||
messages:
|
messages:
|
||||||
already_confirmed: đã được xác thực, vui lòng đăng nhập lại
|
already_confirmed: đã được xác minh, vui lòng đăng nhập lại
|
||||||
confirmation_period_expired: cần phải xác thực trong vòng %{period}, vui lòng yêu cầu một cái mới
|
confirmation_period_expired: cần phải xác minh trong vòng %{period}, vui lòng yêu cầu lại
|
||||||
expired: đã hết hạn, vui lòng yêu cầu một cái mới
|
expired: đã hết hạn, vui lòng yêu cầu một cái mới
|
||||||
not_found: không tìm thấy
|
not_found: không tìm thấy
|
||||||
not_locked: không bị khóa
|
not_locked: không bị khóa
|
||||||
|
|
|
@ -25,46 +25,46 @@ ca:
|
||||||
edit: Edita
|
edit: Edita
|
||||||
submit: Envia
|
submit: Envia
|
||||||
confirmations:
|
confirmations:
|
||||||
destroy: Estàs segur?
|
destroy: N'estàs segur?
|
||||||
edit:
|
edit:
|
||||||
title: Edita l'aplicació
|
title: Edita l'aplicació
|
||||||
form:
|
form:
|
||||||
error: Ep! Comprova el formulari per a possibles errors
|
error: Ep! Comprova el formulari per a possibles errors
|
||||||
help:
|
help:
|
||||||
native_redirect_uri: Utilitza %{native_redirect_uri} per a proves locals
|
native_redirect_uri: Usa %{native_redirect_uri} per a proves locals
|
||||||
redirect_uri: Utilitza una línia per URI
|
redirect_uri: Usa una línia per URI
|
||||||
scopes: Separa els àmbits amb espais. Deixa-ho en blanc per a utilitzar els àmbits per defecte.
|
scopes: Separa els àmbits amb espais. Deixa-ho en blanc per usar els àmbits per defecte.
|
||||||
index:
|
index:
|
||||||
application: Aplicació
|
application: Aplicació
|
||||||
callback_url: URL de retorn
|
callback_url: URL de retorn
|
||||||
delete: Suprimeix
|
delete: Suprimeix
|
||||||
empty: No tens cap aplicació.
|
empty: No tens cap aplicació.
|
||||||
name: Nom
|
name: Nom
|
||||||
new: Aplicació nova
|
new: Nova aplicació
|
||||||
scopes: Àmbits
|
scopes: Àmbits
|
||||||
show: Mostra
|
show: Mostra
|
||||||
title: Les teves aplicacions
|
title: Les teves aplicacions
|
||||||
new:
|
new:
|
||||||
title: Aplicació nova
|
title: Nova aplicació
|
||||||
show:
|
show:
|
||||||
actions: Accions
|
actions: Accions
|
||||||
application_id: Id de l'aplicació
|
application_id: Id de l'aplicació
|
||||||
callback_urls: Callback URL
|
callback_urls: URL de retorn
|
||||||
scopes: Àmbits
|
scopes: Àmbits
|
||||||
secret: Secret
|
secret: Clau secreta de client
|
||||||
title: 'Aplicació: %{name}'
|
title: 'Aplicació: %{name}'
|
||||||
authorizations:
|
authorizations:
|
||||||
buttons:
|
buttons:
|
||||||
authorize: Autoritza
|
authorize: Autoritza
|
||||||
deny: Desautoritza
|
deny: Desautoritza
|
||||||
error:
|
error:
|
||||||
title: S'a produit un error
|
title: S'ha produït un error
|
||||||
new:
|
new:
|
||||||
prompt_html: "%{client_name} voldria permís per a accedir el teu compte. És una aplicació de tercers. <strong>Si no hi confies no hauries d'autoritzar-la.</strong>"
|
prompt_html: "%{client_name} vol permís per accedir el teu compte. És una aplicació de tercers. <strong>Si no hi confies, no hauries d'autoritzar-la.</strong>"
|
||||||
review_permissions: Revisa els permisos
|
review_permissions: Revisa els permisos
|
||||||
title: Cal autorizació
|
title: Cal autorizació
|
||||||
show:
|
show:
|
||||||
title: Copia aquest codi d'autorització i enganxa'l en l'aplicació.
|
title: Copia aquest codi d'autorització i enganxa'l a l'aplicació.
|
||||||
authorized_applications:
|
authorized_applications:
|
||||||
buttons:
|
buttons:
|
||||||
revoke: Revoca
|
revoke: Revoca
|
||||||
|
@ -72,9 +72,9 @@ ca:
|
||||||
revoke: N'estàs segur?
|
revoke: N'estàs segur?
|
||||||
index:
|
index:
|
||||||
authorized_at: Autoritzada el %{date}
|
authorized_at: Autoritzada el %{date}
|
||||||
description_html: Aquestes son les aplicacions que poden accedir al teu compte usant l'API. Si aquí hi ha aplicacions que no reconeixes o una aplicació es comporta malament, pots revocar el seu accés.
|
description_html: Aquestes són les aplicacions que poden accedir al teu compte usant l'API. Si hi ha aplicacions que no reconeixes o hi ha una aplicació que no funciona bé, pots revocar-ne l'accés.
|
||||||
last_used_at: Darrera utilització el %{date}
|
last_used_at: Usada per últim cop el %{date}
|
||||||
never_used: Mai usat
|
never_used: No s'ha usat mai
|
||||||
scopes: Permisos
|
scopes: Permisos
|
||||||
superapp: Interna
|
superapp: Interna
|
||||||
title: Les teves aplicacions autoritzades
|
title: Les teves aplicacions autoritzades
|
||||||
|
|
|
@ -127,7 +127,7 @@ ko:
|
||||||
bookmarks: 북마크
|
bookmarks: 북마크
|
||||||
conversations: 대화
|
conversations: 대화
|
||||||
crypto: 종단간 암호화
|
crypto: 종단간 암호화
|
||||||
favourites: 즐겨찾기
|
favourites: 좋아요
|
||||||
filters: 필터
|
filters: 필터
|
||||||
follow: 관계
|
follow: 관계
|
||||||
follows: 팔로우
|
follows: 팔로우
|
||||||
|
|
|
@ -82,14 +82,14 @@ vi:
|
||||||
messages:
|
messages:
|
||||||
access_denied: Chủ sở hữu tài nguyên hoặc máy chủ đã từ chối yêu cầu.
|
access_denied: Chủ sở hữu tài nguyên hoặc máy chủ đã từ chối yêu cầu.
|
||||||
credential_flow_not_configured: Resource Owner Password Credentials không thành công do Doorkeeper.configure.resource_owner_from_credentials không được định cấu hình.
|
credential_flow_not_configured: Resource Owner Password Credentials không thành công do Doorkeeper.configure.resource_owner_from_credentials không được định cấu hình.
|
||||||
invalid_client: Xác thực ứng dụng khách không thành công do máy khách mơ hồ, không bao gồm xác thực ứng dụng khách hoặc phương thức xác thực không được hỗ trợ.
|
invalid_client: Xác minh ứng dụng khách không thành công do máy khách mơ hồ, không bao gồm xác thực ứng dụng khách hoặc phương thức xác thực không được hỗ trợ.
|
||||||
invalid_grant: Yêu cầu không hợp lệ, hết hạn, bị gỡ hoặc không khớp với tài khoản đã cấp phép. Hoặc xung đột với ứng dụng khác.
|
invalid_grant: Yêu cầu không hợp lệ, hết hạn, bị gỡ hoặc không khớp với tài khoản đã cấp phép. Hoặc xung đột với ứng dụng khác.
|
||||||
invalid_redirect_uri: URL chuyển hướng không hợp lệ.
|
invalid_redirect_uri: URL chuyển hướng không hợp lệ.
|
||||||
invalid_request:
|
invalid_request:
|
||||||
missing_param: 'Thiếu tham số bắt buộc: %{value}.'
|
missing_param: 'Thiếu tham số bắt buộc: %{value}.'
|
||||||
request_not_authorized: Yêu cầu cần được cho phép trước. Tham số bắt buộc bị thiếu hoặc vô giá trị.
|
request_not_authorized: Yêu cầu cần được cho phép trước. Tham số bắt buộc bị thiếu hoặc vô giá trị.
|
||||||
unknown: Thiếu tham số bắt buộc. Có thể giá trị tham số không được hỗ trợ, hoặc không đúng định dạng.
|
unknown: Thiếu tham số bắt buộc. Có thể giá trị tham số không được hỗ trợ, hoặc không đúng định dạng.
|
||||||
invalid_resource_owner: Thông tin xác thực chủ sở hữu tài nguyên được cung cấp không hợp lệ hoặc không thể tìm thấy chủ sở hữu tài nguyên
|
invalid_resource_owner: Thông tin xác minh chủ sở hữu tài nguyên được cung cấp không hợp lệ hoặc không thể tìm thấy chủ sở hữu tài nguyên
|
||||||
invalid_scope: Quyền yêu cầu không hợp lệ, không có thật hoặc sai định dạng.
|
invalid_scope: Quyền yêu cầu không hợp lệ, không có thật hoặc sai định dạng.
|
||||||
invalid_token:
|
invalid_token:
|
||||||
expired: Mã thông báo truy cập đã hết hạn
|
expired: Mã thông báo truy cập đã hết hạn
|
||||||
|
|
|
@ -4,15 +4,15 @@ fr:
|
||||||
about_hashtag_html: Voici des messages publics tagués avec <strong>#%{hashtag}</strong>. Vous pouvez interagir avec si vous avez un compte n’importe où dans le fédiverse.
|
about_hashtag_html: Voici des messages publics tagués avec <strong>#%{hashtag}</strong>. Vous pouvez interagir avec si vous avez un compte n’importe où dans le fédiverse.
|
||||||
about_mastodon_html: 'Le réseau social de l''avenir : pas de publicité, pas de surveillance institutionnelle, conception éthique et décentralisation ! Gardez le contrôle de vos données avec Mastodon !'
|
about_mastodon_html: 'Le réseau social de l''avenir : pas de publicité, pas de surveillance institutionnelle, conception éthique et décentralisation ! Gardez le contrôle de vos données avec Mastodon !'
|
||||||
about_this: À propos
|
about_this: À propos
|
||||||
active_count_after: actif·ve·s
|
active_count_after: actifs
|
||||||
active_footnote: Nombre mensuel d'utilisateur·rice·s actif·ve·s (NMUA)
|
active_footnote: Nombre mensuel d'utilisateur·rice·s actif·ve·s (NMUA)
|
||||||
administered_by: 'Administré par :'
|
administered_by: 'Administré par :'
|
||||||
api: API
|
api: API
|
||||||
apps: Applications mobiles
|
apps: Applications mobiles
|
||||||
apps_platforms: Utilisez Mastodon depuis iOS, Android et d’autres plates-formes
|
apps_platforms: Utilisez Mastodon depuis iOS, Android et d’autres plates-formes
|
||||||
browse_directory: Parcourir l’annuaire des profils et filtrer par centres d’intérêts
|
browse_directory: Parcourir l’annuaire des profils et filtrer par centres d’intérêts
|
||||||
browse_local_posts: Parcourir un flux en direct de messages publics depuis ce serveur
|
browse_local_posts: Parcourir en direct un flux de messages publics depuis ce serveur
|
||||||
browse_public_posts: Parcourir un flux en direct de messages publics sur Mastodon
|
browse_public_posts: Parcourir en direct un flux de messages publics sur Mastodon
|
||||||
contact: Contact
|
contact: Contact
|
||||||
contact_missing: Non défini
|
contact_missing: Non défini
|
||||||
contact_unavailable: Non disponible
|
contact_unavailable: Non disponible
|
||||||
|
@ -31,13 +31,13 @@ fr:
|
||||||
privacy_policy: Politique de confidentialité
|
privacy_policy: Politique de confidentialité
|
||||||
rules: Règles du serveur
|
rules: Règles du serveur
|
||||||
rules_html: 'Voici un résumé des règles que vous devez suivre si vous voulez avoir un compte sur ce serveur de Mastodon :'
|
rules_html: 'Voici un résumé des règles que vous devez suivre si vous voulez avoir un compte sur ce serveur de Mastodon :'
|
||||||
see_whats_happening: Voir ce qui se passe
|
see_whats_happening: Quoi de neuf
|
||||||
server_stats: 'Statistiques du serveur :'
|
server_stats: 'Statistiques du serveur :'
|
||||||
source_code: Code source
|
source_code: Code source
|
||||||
status_count_after:
|
status_count_after:
|
||||||
one: message
|
one: message
|
||||||
other: messages
|
other: messages
|
||||||
status_count_before: Ayant publié
|
status_count_before: Qui a publié
|
||||||
tagline: Suivez vos ami·e·s et découvrez-en de nouveaux·elles
|
tagline: Suivez vos ami·e·s et découvrez-en de nouveaux·elles
|
||||||
terms: Conditions d’utilisation
|
terms: Conditions d’utilisation
|
||||||
unavailable_content: Serveurs modérés
|
unavailable_content: Serveurs modérés
|
||||||
|
@ -54,7 +54,7 @@ fr:
|
||||||
user_count_after:
|
user_count_after:
|
||||||
one: utilisateur
|
one: utilisateur
|
||||||
other: utilisateur·rice·s
|
other: utilisateur·rice·s
|
||||||
user_count_before: Abrite
|
user_count_before: Accueil de
|
||||||
what_is_mastodon: Qu’est-ce que Mastodon ?
|
what_is_mastodon: Qu’est-ce que Mastodon ?
|
||||||
accounts:
|
accounts:
|
||||||
choices_html: "%{name} recommande :"
|
choices_html: "%{name} recommande :"
|
||||||
|
|
|
@ -1,5 +1,54 @@
|
||||||
---
|
---
|
||||||
ga:
|
ga:
|
||||||
|
about:
|
||||||
|
api: API
|
||||||
|
privacy_policy: Polasaí príobháideachais
|
||||||
|
unavailable_content_description:
|
||||||
|
domain: Freastalaí
|
||||||
|
reason: Fáth
|
||||||
|
accounts:
|
||||||
|
posts_tab_heading: Postálacha
|
||||||
|
roles:
|
||||||
|
bot: Róbat
|
||||||
|
group: Grúpa
|
||||||
|
moderator: Modhnóir
|
||||||
|
unfollow: Ná lean
|
||||||
|
admin:
|
||||||
|
accounts:
|
||||||
|
are_you_sure: An bhfuil tú cinnte?
|
||||||
|
confirm: Deimhnigh
|
||||||
|
confirmed: Deimhnithe
|
||||||
|
confirming: Ag deimhniú
|
||||||
|
email: Ríomhphost
|
||||||
|
email_status: Stádas ríomhphoist
|
||||||
|
followers: Leantóirí
|
||||||
|
ip: IP
|
||||||
|
location:
|
||||||
|
all: Uile
|
||||||
|
public: Poiblí
|
||||||
|
reject: Diúltaigh
|
||||||
|
roles:
|
||||||
|
admin: Riarthóir
|
||||||
|
moderator: Modhnóir
|
||||||
|
staff: Foireann
|
||||||
|
user: Úsáideoir
|
||||||
|
search: Cuardaigh
|
||||||
|
statuses: Postálacha
|
||||||
|
title: Cuntais
|
||||||
|
announcements:
|
||||||
|
live: Beo
|
||||||
|
publish: Foilsigh
|
||||||
|
custom_emojis:
|
||||||
|
delete: Scrios
|
||||||
|
emoji: Emoji
|
||||||
|
list: Liosta
|
||||||
|
email_domain_blocks:
|
||||||
|
delete: Scrios
|
||||||
|
instances:
|
||||||
|
content_policies:
|
||||||
|
policy: Polasaí
|
||||||
|
delivery:
|
||||||
|
all: Uile
|
||||||
errors:
|
errors:
|
||||||
'400': The request you submitted was invalid or malformed.
|
'400': The request you submitted was invalid or malformed.
|
||||||
'403': You don't have permission to view this page.
|
'403': You don't have permission to view this page.
|
||||||
|
|
|
@ -541,6 +541,7 @@ gd:
|
||||||
delivery:
|
delivery:
|
||||||
all: Na h-uile
|
all: Na h-uile
|
||||||
clear: Falamhaich na mearachdan lìbhrigidh
|
clear: Falamhaich na mearachdan lìbhrigidh
|
||||||
|
failing: A’ fàilligeadh
|
||||||
restart: Ath-thòisich air an lìbhrigeadh
|
restart: Ath-thòisich air an lìbhrigeadh
|
||||||
stop: Cuir stad air an lìbhrigeadh
|
stop: Cuir stad air an lìbhrigeadh
|
||||||
unavailable: Chan eil e ri làimh
|
unavailable: Chan eil e ri làimh
|
||||||
|
@ -625,6 +626,7 @@ gd:
|
||||||
action_taken_by: Chaidh an gnìomh a ghabhail le
|
action_taken_by: Chaidh an gnìomh a ghabhail le
|
||||||
actions:
|
actions:
|
||||||
delete_description_html: Thèid na postaichean le gearan orra a sguabadh às agus rabhadh a chlàradh gus do chuideachadh ach am bi thu nas teinne le droch-ghiùlan on aon chunntas sam àm ri teachd.
|
delete_description_html: Thèid na postaichean le gearan orra a sguabadh às agus rabhadh a chlàradh gus do chuideachadh ach am bi thu nas teinne le droch-ghiùlan on aon chunntas sam àm ri teachd.
|
||||||
|
mark_as_sensitive_description_html: Thèid comharra an fhrionasachd a chur ris na meadhanan sna postaichean le gearan orra agus rabhadh a chlàradh gus do chuideachadh ach am bi thu nas teinne le droch-ghiùlan on aon chunntas sam àm ri teachd.
|
||||||
other_description_html: Seall barrachd roghainnean airson giùlan a’ chunntais a stiùireadh agus an conaltradh leis a’ chunntas a chaidh gearan a dhèanamh mu dhèidhinn a ghnàthachadh.
|
other_description_html: Seall barrachd roghainnean airson giùlan a’ chunntais a stiùireadh agus an conaltradh leis a’ chunntas a chaidh gearan a dhèanamh mu dhèidhinn a ghnàthachadh.
|
||||||
resolve_description_html: Cha dèid gnìomh sam bith a ghabhail an aghaidh a’ chunntais le gearan air agus thèid an gearan a dhùnadh gun rabhadh a chlàradh.
|
resolve_description_html: Cha dèid gnìomh sam bith a ghabhail an aghaidh a’ chunntais le gearan air agus thèid an gearan a dhùnadh gun rabhadh a chlàradh.
|
||||||
silence_description_html: Chan fhaic ach an fheadhainn a tha a’ leantainn oirre mu thràth no a lorgas a làimh i a’ phròifil seo agus cuingichidh seo uiread nan daoine a ruigeas i gu mòr. Gabhaidh seo a neo-dhèanamh uair sam bith.
|
silence_description_html: Chan fhaic ach an fheadhainn a tha a’ leantainn oirre mu thràth no a lorgas a làimh i a’ phròifil seo agus cuingichidh seo uiread nan daoine a ruigeas i gu mòr. Gabhaidh seo a neo-dhèanamh uair sam bith.
|
||||||
|
@ -1274,6 +1276,11 @@ gd:
|
||||||
one: Cuideachd, bhuannaich thu %{count} neach-leantainn ùr on àm a bha thu air falbh! Nach ma sin!
|
one: Cuideachd, bhuannaich thu %{count} neach-leantainn ùr on àm a bha thu air falbh! Nach ma sin!
|
||||||
other: Cuideachd, bhuannaich thu %{count} luchd-leantainn ùr on àm a bha thu air falbh! Nach ma sin!
|
other: Cuideachd, bhuannaich thu %{count} luchd-leantainn ùr on àm a bha thu air falbh! Nach ma sin!
|
||||||
two: Cuideachd, bhuannaich thu %{count} neach-leantainn ùr on àm a bha thu air falbh! Nach ma sin!
|
two: Cuideachd, bhuannaich thu %{count} neach-leantainn ùr on àm a bha thu air falbh! Nach ma sin!
|
||||||
|
subject:
|
||||||
|
few: "%{count} brathan ùra on tadhal mu dheireadh agad 🐘"
|
||||||
|
one: "%{count} bhrath ùr on tadhal mu dheireadh agad 🐘"
|
||||||
|
other: "%{count} brath ùr on tadhal mu dheireadh agad 🐘"
|
||||||
|
two: "%{count} bhrath ùr on tadhal mu dheireadh agad 🐘"
|
||||||
title: Fhad ’s a bha thu air falbh…
|
title: Fhad ’s a bha thu air falbh…
|
||||||
favourite:
|
favourite:
|
||||||
body: 'Is annsa le %{name} am post agad:'
|
body: 'Is annsa le %{name} am post agad:'
|
||||||
|
@ -1602,6 +1609,13 @@ gd:
|
||||||
explanation: Dh’iarr thu lethbhreac-glèidhidh slàn dhen chunntas Mastodon agad. Tha e deis ri luchdadh a-nuas a-nis!
|
explanation: Dh’iarr thu lethbhreac-glèidhidh slàn dhen chunntas Mastodon agad. Tha e deis ri luchdadh a-nuas a-nis!
|
||||||
subject: Tha an tasg-lann agad deis ri luchdadh a-nuas
|
subject: Tha an tasg-lann agad deis ri luchdadh a-nuas
|
||||||
title: Tasg-lann dhut
|
title: Tasg-lann dhut
|
||||||
|
suspicious_sign_in:
|
||||||
|
change_password: atharraich thu am facal-faire agad
|
||||||
|
details: 'Seo mion-fhiosrachadh mun chlàradh a-steach:'
|
||||||
|
explanation: Mhothaich sinn do chlàradh a-steach dhan chunntas agad o sheòladh IP ùr.
|
||||||
|
further_actions_html: Mur e thu fhèin a bh’ ann, mholamaid gun %{action} sa bhad agus gun cuir thu an dearbhadh dà-cheumnach an comas airson an cunntas agad a chumail tèarainte.
|
||||||
|
subject: Chaidh an cunntas agad inntrigeadh o sheòladh IP ùr
|
||||||
|
title: Clàradh a-steach ùr
|
||||||
warning:
|
warning:
|
||||||
appeal: Cuir ath-thagradh a-null
|
appeal: Cuir ath-thagradh a-null
|
||||||
appeal_description: Ma tha thu dhen bheachd gur e mearachd a th’ ann, ’s urrainn dhut ath-thagradh a chur a-null gun sgioba aig %{instance}.
|
appeal_description: Ma tha thu dhen bheachd gur e mearachd a th’ ann, ’s urrainn dhut ath-thagradh a chur a-null gun sgioba aig %{instance}.
|
||||||
|
|
|
@ -484,7 +484,7 @@ gl:
|
||||||
other: Se fallan as entregas ao dominio por <strong>%{count} días diferentes</strong>, non se farán máis intentos a menos que se reciba unha solicitude <em>desde</em> ese dominio.
|
other: Se fallan as entregas ao dominio por <strong>%{count} días diferentes</strong>, non se farán máis intentos a menos que se reciba unha solicitude <em>desde</em> ese dominio.
|
||||||
failure_threshold_reached: Acadouse o límite de fallos o %{date}.
|
failure_threshold_reached: Acadouse o límite de fallos o %{date}.
|
||||||
failures_recorded:
|
failures_recorded:
|
||||||
one: Intento fallido por %{count} día.
|
one: Intento fallido durante %{count} día.
|
||||||
other: Intentos fallidos durante %{count} días distintos.
|
other: Intentos fallidos durante %{count} días distintos.
|
||||||
no_failures_recorded: Non hai fallos rexistrados.
|
no_failures_recorded: Non hai fallos rexistrados.
|
||||||
title: Dispoñibilidade
|
title: Dispoñibilidade
|
||||||
|
@ -1508,7 +1508,7 @@ gl:
|
||||||
min_reblogs_hint: Non elimina ningunha das túas publicacións se foron promovidas máis deste número de veces. Deixa en branco para eliminar publicacións independentemente do seu número de promocións
|
min_reblogs_hint: Non elimina ningunha das túas publicacións se foron promovidas máis deste número de veces. Deixa en branco para eliminar publicacións independentemente do seu número de promocións
|
||||||
stream_entries:
|
stream_entries:
|
||||||
pinned: Publicación fixada
|
pinned: Publicación fixada
|
||||||
reblogged: promovido
|
reblogged: promoveu
|
||||||
sensitive_content: Contido sensible
|
sensitive_content: Contido sensible
|
||||||
tags:
|
tags:
|
||||||
does_not_match_previous_name: non concorda co nome anterior
|
does_not_match_previous_name: non concorda co nome anterior
|
||||||
|
|
|
@ -121,6 +121,8 @@ he:
|
||||||
reject_media_hint: מסירה קבצי מדיה השמורים מקומית ומונעת מהורדת קבצים נוספים בעתיד. לא רלוונטי להשעיות
|
reject_media_hint: מסירה קבצי מדיה השמורים מקומית ומונעת מהורדת קבצים נוספים בעתיד. לא רלוונטי להשעיות
|
||||||
undo: ביטול
|
undo: ביטול
|
||||||
instances:
|
instances:
|
||||||
|
delivery:
|
||||||
|
failing: נכשל
|
||||||
title: שרתים מוכרים
|
title: שרתים מוכרים
|
||||||
report_notes:
|
report_notes:
|
||||||
today_at: היום, ב%{time}
|
today_at: היום, ב%{time}
|
||||||
|
|
|
@ -799,12 +799,12 @@ ko:
|
||||||
statuses:
|
statuses:
|
||||||
allow: 게시물 허용
|
allow: 게시물 허용
|
||||||
allow_account: 작성자 허용
|
allow_account: 작성자 허용
|
||||||
description_html: 당신의 서버가 알기로 현재 많은 수의 공유와 즐겨찾기가 되고 있는 게시물들입니다. 새로운 사용자나 돌아오는 사용자들이 팔로우 할 사람들을 찾는 데 도움이 될 수 있습니다. 작성자를 승인하고, 작성자가 그들의 계정이 다른 계정에게 탐색되도록 설정하지 않는 한 게시물들은 공개적으로 표시되지 않습니다. 또한 각각의 게시물을 별개로 거절할 수도 있습니다.
|
description_html: 당신의 서버가 알기로 현재 많은 수의 공유와 좋아요가 되고 있는 게시물들입니다. 새로운 사용자나 돌아오는 사용자들이 팔로우 할 사람들을 찾는 데 도움이 될 수 있습니다. 작성자를 승인하고, 작성자가 그들의 계정이 다른 계정에게 탐색되도록 설정하지 않는 한 게시물들은 공개적으로 표시되지 않습니다. 또한 각각의 게시물을 별개로 거절할 수도 있습니다.
|
||||||
disallow: 게시물 불허
|
disallow: 게시물 불허
|
||||||
disallow_account: 작성자 불허
|
disallow_account: 작성자 불허
|
||||||
not_discoverable: 작성자가 발견되기를 원치 않습니다
|
not_discoverable: 작성자가 발견되기를 원치 않습니다
|
||||||
shared_by:
|
shared_by:
|
||||||
other: "%{friendly_count} 번 공유되고 즐겨찾기 되었습니다"
|
other: "%{friendly_count} 번 공유되고 마음에 들어했습니다"
|
||||||
title: 유행하는 게시물
|
title: 유행하는 게시물
|
||||||
tags:
|
tags:
|
||||||
current_score: 현재 %{score}점
|
current_score: 현재 %{score}점
|
||||||
|
@ -1222,9 +1222,9 @@ ko:
|
||||||
other: 마지막 방문 이후로 %{count} 건의 새로운 알림
|
other: 마지막 방문 이후로 %{count} 건의 새로운 알림
|
||||||
title: 당신이 없는 동안에...
|
title: 당신이 없는 동안에...
|
||||||
favourite:
|
favourite:
|
||||||
body: '당신의 게시물을 %{name} 님이 즐겨찾기에 등록했습니다:'
|
body: '당신의 게시물을 %{name} 님이 마음에 들어했습니다:'
|
||||||
subject: "%{name} 님이 내 게시물을 즐겨찾기에 등록했습니다"
|
subject: "%{name} 님이 내 게시물을 마음에 들어했습니다"
|
||||||
title: 새 즐겨찾기
|
title: 새 좋아요
|
||||||
follow:
|
follow:
|
||||||
body: "%{name} 님이 나를 팔로우 했습니다!"
|
body: "%{name} 님이 나를 팔로우 했습니다!"
|
||||||
subject: "%{name} 님이 나를 팔로우 했습니다"
|
subject: "%{name} 님이 나를 팔로우 했습니다"
|
||||||
|
@ -1322,8 +1322,8 @@ ko:
|
||||||
reason_html: "<strong>왜 이 과정이 필요하죠?</strong><code>%{instance}</code>는 당신이 가입한 서버가 아닐 것입니다, 당신의 홈 서버로 먼저 가야 합니다."
|
reason_html: "<strong>왜 이 과정이 필요하죠?</strong><code>%{instance}</code>는 당신이 가입한 서버가 아닐 것입니다, 당신의 홈 서버로 먼저 가야 합니다."
|
||||||
remote_interaction:
|
remote_interaction:
|
||||||
favourite:
|
favourite:
|
||||||
proceed: 즐겨찾기 진행
|
proceed: 좋아요 진행
|
||||||
prompt: '이 게시물을 즐겨찾기 하려고 합니다:'
|
prompt: '이 게시물을 좋아요 하려고 합니다:'
|
||||||
reblog:
|
reblog:
|
||||||
proceed: 부스트 진행
|
proceed: 부스트 진행
|
||||||
prompt: '이 게시물을 부스트 하려 합니다:'
|
prompt: '이 게시물을 부스트 하려 합니다:'
|
||||||
|
@ -1451,10 +1451,10 @@ ko:
|
||||||
enabled_hint: 아래의 예외 목록에 해당하지 않는다면, 명시된 기한 이후 당신의 게시물을 자동으로 삭제합니다
|
enabled_hint: 아래의 예외 목록에 해당하지 않는다면, 명시된 기한 이후 당신의 게시물을 자동으로 삭제합니다
|
||||||
exceptions: 예외
|
exceptions: 예외
|
||||||
explanation: 게시물 삭제는 많은 성능이 필요하기 때문에, 서버에서 바쁘지 않을 때 시간을 들여서 천천히 진행합니다. 이런 이유로, 당신의 게시물은 아마도 정해진 기간보다 좀 더 시간이 지난 이후에 삭제될 것입니다.
|
explanation: 게시물 삭제는 많은 성능이 필요하기 때문에, 서버에서 바쁘지 않을 때 시간을 들여서 천천히 진행합니다. 이런 이유로, 당신의 게시물은 아마도 정해진 기간보다 좀 더 시간이 지난 이후에 삭제될 것입니다.
|
||||||
ignore_favs: 즐겨찾기 무시
|
ignore_favs: 좋아요 무시
|
||||||
ignore_reblogs: 부스트 무시
|
ignore_reblogs: 부스트 무시
|
||||||
interaction_exceptions: 상호작용에 기반한 예외들
|
interaction_exceptions: 상호작용에 기반한 예외들
|
||||||
interaction_exceptions_explanation: 즐겨찾기나 부스트 수가 설정한 값을 넘은 후 다시 낮아진 경우에는 게시물이 삭제되는 것을 보장하지 못합니다.
|
interaction_exceptions_explanation: 좋아요나 부스트 수가 설정한 값을 넘은 후 다시 낮아진 경우에는 게시물이 삭제되는 것을 보장하지 못합니다.
|
||||||
keep_direct: 다이렉트 메시지 유지
|
keep_direct: 다이렉트 메시지 유지
|
||||||
keep_direct_hint: 다이렉트 메시지를 삭제하지 않습니다
|
keep_direct_hint: 다이렉트 메시지를 삭제하지 않습니다
|
||||||
keep_media: 미디어가 있는 게시물 유지
|
keep_media: 미디어가 있는 게시물 유지
|
||||||
|
@ -1465,8 +1465,8 @@ ko:
|
||||||
keep_polls_hint: 투표를 삭제하지 않습니다
|
keep_polls_hint: 투표를 삭제하지 않습니다
|
||||||
keep_self_bookmark: 북마크된 게시물 유지
|
keep_self_bookmark: 북마크된 게시물 유지
|
||||||
keep_self_bookmark_hint: 내 스스로 북마크한 본인의 게시물을 삭제하지 않습니다
|
keep_self_bookmark_hint: 내 스스로 북마크한 본인의 게시물을 삭제하지 않습니다
|
||||||
keep_self_fav: 즐겨찾기한 게시물 유지
|
keep_self_fav: 마음에 들어한 게시물 유지
|
||||||
keep_self_fav_hint: 내 스스로 즐겨찾기한 본인의 게시물을 삭제하지 않습니다
|
keep_self_fav_hint: 내 스스로 마음에 들어한 본인의 게시물을 삭제하지 않습니다
|
||||||
min_age:
|
min_age:
|
||||||
'1209600': 2 주
|
'1209600': 2 주
|
||||||
'15778476': 6 개월
|
'15778476': 6 개월
|
||||||
|
@ -1477,8 +1477,8 @@ ko:
|
||||||
'63113904': 2 년
|
'63113904': 2 년
|
||||||
'7889238': 3 개월
|
'7889238': 3 개월
|
||||||
min_age_label: 기한
|
min_age_label: 기한
|
||||||
min_favs: 해당 횟수 이상 즐겨찾기된 게시물 유지
|
min_favs: 해당 횟수 이상 좋아요된 게시물 유지
|
||||||
min_favs_hint: 이 횟수 이상의 즐겨찾기가 된 게시물은 삭제하지 않습니다. 즐겨찾기 수와 관계없이 게시물을 지우고 싶다면 공백으로 두세요
|
min_favs_hint: 이 횟수 이상의 좋아요가 된 게시물은 삭제하지 않습니다. 좋아요 수와 관계없이 게시물을 지우고 싶다면 공백으로 두세요
|
||||||
min_reblogs: 해당 횟수 이상 부스트된 게시물 유지
|
min_reblogs: 해당 횟수 이상 부스트된 게시물 유지
|
||||||
min_reblogs_hint: 이 횟수 이상의 부스트가 된 게시물은 삭제하지 않습니다. 부스트 수와 관계없이 게시물을 지우고 싶다면 공백으로 두세요
|
min_reblogs_hint: 이 횟수 이상의 부스트가 된 게시물은 삭제하지 않습니다. 부스트 수와 관계없이 게시물을 지우고 싶다면 공백으로 두세요
|
||||||
stream_entries:
|
stream_entries:
|
||||||
|
@ -1494,7 +1494,7 @@ ko:
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><em>기본 계정 정보</em>: 이 서버에 가입하실 때 사용자명, 이메일 주소, 패스워드 등을 입력 받게 됩니다. 추가적으로 표시되는 이름이나 자기소개, 프로필 이미지, 헤더 이미지 등의 프로필 정보를 입력하게 됩니다. 사용자명, 표시되는 이름, 자기소개, 프로필 이미지와 헤더 이미지는 언제나 공개적으로 게시됩니다.</li>
|
<li><em>기본 계정 정보</em>: 이 서버에 가입하실 때 사용자명, 이메일 주소, 패스워드 등을 입력 받게 됩니다. 추가적으로 표시되는 이름이나 자기소개, 프로필 이미지, 헤더 이미지 등의 프로필 정보를 입력하게 됩니다. 사용자명, 표시되는 이름, 자기소개, 프로필 이미지와 헤더 이미지는 언제나 공개적으로 게시됩니다.</li>
|
||||||
<li><em>게시물, 팔로잉, 기타 공개된 정보</em>: 당신이 팔로우 하는 사람들의 리스트는 공개됩니다. 당신을 팔로우 하는 사람들도 마찬가지입니다. 당신이 게시물을 작성하는 경우, 응용프로그램이 메시지를 받았을 때의 날짜와 시간이 기록 됩니다. 게시물은 그림이나 영상 등의 미디어를 포함할 수 있습니다. 퍼블릭과 미표시(unlisted) 게시물은 공개적으로 접근이 가능합니다. 프로필에 게시물을 고정하는 경우 마찬가지로 공개적으로 접근 가능한 정보가 됩니다. 당신의 게시물들은 당신의 팔로워들에게 전송 됩니다. 몇몇 경우 이것은 다른 서버에 전송되고 그곳에 사본이 저장 됩니다. 당신이 게시물을 삭제하는 경우 이 또한 당신의 팔로워들에게 전송 됩니다. 다른 게시물을 리블로깅 하거나 즐겨찾기 하는 경우 이는 언제나 공개적으로 제공 됩니다.</li>
|
<li><em>게시물, 팔로잉, 기타 공개된 정보</em>: 당신이 팔로우 하는 사람들의 리스트는 공개됩니다. 당신을 팔로우 하는 사람들도 마찬가지입니다. 당신이 게시물을 작성하는 경우, 응용프로그램이 메시지를 받았을 때의 날짜와 시간이 기록 됩니다. 게시물은 그림이나 영상 등의 미디어를 포함할 수 있습니다. 퍼블릭과 미표시(unlisted) 게시물은 공개적으로 접근이 가능합니다. 프로필에 게시물을 고정하는 경우 마찬가지로 공개적으로 접근 가능한 정보가 됩니다. 당신의 게시물들은 당신의 팔로워들에게 전송 됩니다. 몇몇 경우 이것은 다른 서버에 전송되고 그곳에 사본이 저장 됩니다. 당신이 게시물을 삭제하는 경우 이 또한 당신의 팔로워들에게 전송 됩니다. 다른 게시물을 리블로깅 하거나 좋아요 하는 경우 이는 언제나 공개적으로 제공 됩니다.</li>
|
||||||
<li><em>DM, 팔로워 공개 게시물</em>: 모든 게시물들은 서버에서 처리되고 저장됩니다. 팔로워 공개 게시물은 당신의 팔로워와 멘션 된 사람들에게 전달이 됩니다. 다이렉트 메시지는 멘션 된 사람들에게만 전송 됩니다. 몇몇 경우 이것은 다른 서버에 전송 되고 그곳에 사본이 저장됨을 의미합니다. 우리는 이 게시물들이 권한을 가진 사람들만 열람이 가능하도록 노력을 할 것이지만 다른 서버에서는 이것이 실패할 수도 있습니다. 그러므로 당신의 팔로워들이 속한 서버를 재확인하는 것이 중요합니다. 당신은 새 팔로워를 수동으로 승인하거나 거절하도록 설정을 변경할 수 있습니다. <em>해당 서버의 운영자는 서버가 받는 메시지를 열람할 수 있다는 것을 항상 염두해 두세요</em>, 그리고 수신자들은 스크린샷을 찍거나 복사하는 등의 방법으로 다시 공유할 수 있습니다. <em>위험한 정보를 마스토돈을 통해 공유하지 마세요.</em></li>
|
<li><em>DM, 팔로워 공개 게시물</em>: 모든 게시물들은 서버에서 처리되고 저장됩니다. 팔로워 공개 게시물은 당신의 팔로워와 멘션 된 사람들에게 전달이 됩니다. 다이렉트 메시지는 멘션 된 사람들에게만 전송 됩니다. 몇몇 경우 이것은 다른 서버에 전송 되고 그곳에 사본이 저장됨을 의미합니다. 우리는 이 게시물들이 권한을 가진 사람들만 열람이 가능하도록 노력을 할 것이지만 다른 서버에서는 이것이 실패할 수도 있습니다. 그러므로 당신의 팔로워들이 속한 서버를 재확인하는 것이 중요합니다. 당신은 새 팔로워를 수동으로 승인하거나 거절하도록 설정을 변경할 수 있습니다. <em>해당 서버의 운영자는 서버가 받는 메시지를 열람할 수 있다는 것을 항상 염두해 두세요</em>, 그리고 수신자들은 스크린샷을 찍거나 복사하는 등의 방법으로 다시 공유할 수 있습니다. <em>위험한 정보를 마스토돈을 통해 공유하지 마세요.</em></li>
|
||||||
<li><em>IP와 기타 메타데이터</em>: 당신이 로그인 하는 경우 IP 주소와 브라우저의 이름을 저장합니다. 모든 세션은 당신이 검토하고 취소할 수 있도록 설정에서 제공 됩니다. 마지막으로 사용 된 IP 주소는 최대 12개월 간 저장됩니다. 또한, 모든 요청에 대해 IP주소를 포함한 정보를 로그에 저장할 수 있습니다.</li>
|
<li><em>IP와 기타 메타데이터</em>: 당신이 로그인 하는 경우 IP 주소와 브라우저의 이름을 저장합니다. 모든 세션은 당신이 검토하고 취소할 수 있도록 설정에서 제공 됩니다. 마지막으로 사용 된 IP 주소는 최대 12개월 간 저장됩니다. 또한, 모든 요청에 대해 IP주소를 포함한 정보를 로그에 저장할 수 있습니다.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -1548,7 +1548,7 @@ ko:
|
||||||
|
|
||||||
<p>당신의 공개 게시물은 네트워크에 속한 다른 서버가 다운로드 할 수 있습니다. 당신의 팔로워나 수신자가 이 서버가 아닌 다른 곳에 존재하는 경우 당신의 공개, 팔로워 공개 게시물은 당신의 팔로워가 존재하는 서버로 전송되며, 다이렉트메시지는 수신자가 존재하는 서버로 전송 됩니다.</p>
|
<p>당신의 공개 게시물은 네트워크에 속한 다른 서버가 다운로드 할 수 있습니다. 당신의 팔로워나 수신자가 이 서버가 아닌 다른 곳에 존재하는 경우 당신의 공개, 팔로워 공개 게시물은 당신의 팔로워가 존재하는 서버로 전송되며, 다이렉트메시지는 수신자가 존재하는 서버로 전송 됩니다.</p>
|
||||||
|
|
||||||
<p>당신이 계정을 사용하기 위해 응용프로그램을 승인하는 경우 당신이 허용한 권한에 따라 응용프로그램은 당신의 공개 계정정보, 팔로잉 리스트, 팔로워 리스트, 게시물, 즐겨찾기 등에 접근이 가능해집니다. 응용프로그램은 절대로 당신의 이메일 주소나 패스워드에 접근할 수 없습니다.</p>
|
<p>당신이 계정을 사용하기 위해 응용프로그램을 승인하는 경우 당신이 허용한 권한에 따라 응용프로그램은 당신의 공개 계정정보, 팔로잉 리스트, 팔로워 리스트, 게시물, 좋아요 등에 접근이 가능해집니다. 응용프로그램은 절대로 당신의 이메일 주소나 패스워드에 접근할 수 없습니다.</p>
|
||||||
|
|
||||||
<hr class="spacer" />
|
<hr class="spacer" />
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ pt-BR:
|
||||||
Esta conta é um ator virtual usado para representar o próprio servidor e não qualquer usuário individual.
|
Esta conta é um ator virtual usado para representar o próprio servidor e não qualquer usuário individual.
|
||||||
É usado para propósitos de federação e não deve ser bloqueado a menos que queira bloquear toda a instância, o que no caso devia usar um bloqueio de domínio.
|
É usado para propósitos de federação e não deve ser bloqueado a menos que queira bloquear toda a instância, o que no caso devia usar um bloqueio de domínio.
|
||||||
learn_more: Saiba mais
|
learn_more: Saiba mais
|
||||||
|
logged_in_as_html: Você está atualmente logado como %{username}.
|
||||||
logout_before_registering: Já está logado.
|
logout_before_registering: Já está logado.
|
||||||
privacy_policy: Política de Privacidade
|
privacy_policy: Política de Privacidade
|
||||||
rules: Regras do servidor
|
rules: Regras do servidor
|
||||||
|
|
|
@ -517,6 +517,7 @@ pt-PT:
|
||||||
delivery:
|
delivery:
|
||||||
all: Todas
|
all: Todas
|
||||||
clear: Limpar erros de entrega
|
clear: Limpar erros de entrega
|
||||||
|
failing: A falhar
|
||||||
restart: Reiniciar entrega
|
restart: Reiniciar entrega
|
||||||
stop: Parar entrega
|
stop: Parar entrega
|
||||||
unavailable: Indisponível
|
unavailable: Indisponível
|
||||||
|
|
|
@ -3,62 +3,62 @@ ca:
|
||||||
simple_form:
|
simple_form:
|
||||||
hints:
|
hints:
|
||||||
account_alias:
|
account_alias:
|
||||||
acct: Especifica l'usuari@domini del compte des d'on et vols moure
|
acct: Especifica l'usuari@domini del compte des d'on et vols traslladar
|
||||||
account_migration:
|
account_migration:
|
||||||
acct: Especifica l'usuari@domini del compte al que et vols moure
|
acct: Especifica l'usuari@domini del compte al qual et vols traslladar
|
||||||
account_warning_preset:
|
account_warning_preset:
|
||||||
text: Pots utilitzar totes les sintaxi com ara URL, etiquetes i mencions
|
text: Pots usar totes les sintaxis, com ara URL, etiquetes i mencions
|
||||||
title: Opcional. No és visible per al destinatari
|
title: Opcional. No és visible per al destinatari
|
||||||
admin_account_action:
|
admin_account_action:
|
||||||
include_statuses: L'usuari veurà quines publicacions han causat l'acció de moderació o avís
|
include_statuses: L'usuari veurà quines publicacions han provocat que s'hagi moderat o avisat
|
||||||
send_email_notification: L'usuari rebrà una explicació del que ha passat amb el seu compte
|
send_email_notification: L'usuari rebrà una explicació del que ha passat amb el seu compte
|
||||||
text_html: Opcional. Pots utilitzar tota la sintaxi. Pots <a href="%{path}">afegir configuracions predefinides d'avís</a> per a estalviar temps
|
text_html: Opcional. A les publicacions, pots usar tota la sintaxi. Pots <a href="%{path}">afegir configuracions predefinides d'avís</a> per estalviar temps
|
||||||
type_html: Tria què fer amb <strong>%{acct}</strong>
|
type_html: Tria què fer amb <strong>%{acct}</strong>
|
||||||
types:
|
types:
|
||||||
disable: Evita que l'usuari faci ús del seu compte però no li esborra o amaga els seus continguts.
|
disable: Evita que l'usuari faci servir el seu compte, però no esborris ni amaguis el seu contingut.
|
||||||
none: Fes servir això per a enviar un avís al usuari sense desencadenar cap altre acció.
|
none: Fes servir això per a enviar un avís a l'usuari sense desencadenar cap altra acció.
|
||||||
sensitive: Obliga a marcar tots els fitxers multi mèdia adjunts com a sensibles.
|
sensitive: Obliga a marcar tots els fitxers multimèdia adjunts com a sensibles.
|
||||||
silence: Evitar que l'usuari sigui capaç de publicar amb visibilitat pública, amagar les seves publicacions i notificacions d'usuaris que no el segueixen.
|
silence: Evita que l'usuari pugui publicar amb visibilitat pública, amagar les seves publicacions i les notificacions d'usuaris que no el segueixin.
|
||||||
suspend: Evita qualsevol interacció de o a aquest compte i esborra els seus continguts. Reversible en un termini de 30 dies.
|
suspend: Evita qualsevol interacció des de o cap a aquest compte i esborra els seus continguts. Reversible en un termini de 30 dies.
|
||||||
warning_preset_id: Opcional. Encara pots afegir text personalitzat al final de la configuració predefinida
|
warning_preset_id: Opcional. Encara pots afegir text personalitzat al final de la configuració predefinida
|
||||||
announcement:
|
announcement:
|
||||||
all_day: Si es marca, només es mostraran les dates de l'interval de temps
|
all_day: Si es marca, només es mostraran les dates de l'interval de temps
|
||||||
ends_at: Opcional. En aquest moment, l’anunci deixarà automàticament d'estar publicat
|
ends_at: Opcional. En aquest moment, l'anunci no es publicarà automàticament
|
||||||
scheduled_at: Deixa-ho en blanc per a publicar l’anunci immediatament
|
scheduled_at: Deixa-ho en blanc per publicar l’anunci immediatament
|
||||||
starts_at: Opcional. En el cas que el teu anunci estigui vinculat a un interval de temps específic
|
starts_at: Opcional. En cas que el teu anunci estigui vinculat a un interval de temps específic
|
||||||
text: Pots utilitzar la sintaxi de publicacions. Tingues en compte l’espai que l’anunci ocuparà a la pantalla de l’usuari
|
text: Pots utilitzar la sintaxi de publicacions. Tingues en compte l’espai que l’anunci ocuparà a la pantalla de l’usuari
|
||||||
appeal:
|
appeal:
|
||||||
text: Només pots emetre una apel·lació per cada acció
|
text: Només pots emetre una apel·lació per cada acció
|
||||||
defaults:
|
defaults:
|
||||||
autofollow: Les persones que es registrin a través de la invitació et seguiran automàticament
|
autofollow: Les persones que es registrin a través de la invitació et seguiran automàticament
|
||||||
avatar: PNG, GIF o JPG. Màxim %{size}. S'escalarà a %{dimensions}px
|
avatar: PNG, GIF o JPG de com a màxim %{size}. S'escalarà a %{dimensions}px
|
||||||
bot: Aquest compte realitza principalment accions automatitzades i pot no estar controlat per cap persona
|
bot: Notifica que aquest compte realitza principalment accions automatitzades i que pot no estar controlat per cap persona
|
||||||
context: Un o diversos contextos on s'ha d'aplicar el filtre
|
context: Un o diversos contextos en què s'ha d'aplicar el filtre
|
||||||
current_password: Per motius de seguretat si us plau entra la contrasenya del compte actual
|
current_password: Per motius de seguretat, introdueix la contrasenya del compte actual
|
||||||
current_username: Per a confirmar, si us plau entra el nom d'usuari del compte actual
|
current_username: Per confirmar-ho, introdueix el nom d'usuari del compte actual
|
||||||
digest: Només s'envia després d'un llarg període d'inactivitat amb un resum de les mencions que has rebut en la teva absència
|
digest: Només s'envia després d'un llarg període d'inactivitat amb un resum de les mencions que has rebut en la teva absència
|
||||||
discoverable: Permet que el teu compte sigui descobert per estranys grácies a les sugerències, etiquetes i altres característiques
|
discoverable: Permet que el teu compte sigui descobert per desconeguts a través de recomanacions, etiquetes i altres característiques
|
||||||
email: Se t'enviarà un correu electrònic de confirmació
|
email: Se t'enviarà un correu electrònic de confirmació
|
||||||
fields: Pots tenir fins a 4 elements que es mostren com a taula al teu perfil
|
fields: Pots tenir fins a 4 elements que es mostren com a taula al teu perfil
|
||||||
header: PNG, GIF o JPG. Màxim %{size}. S'escalarà a %{dimensions}px
|
header: PNG, GIF o JPG de com a màxim %{size}. S'escalarà a %{dimensions}px
|
||||||
inbox_url: Copia l'URL des de la pàgina principal del relay que vols utilitzar
|
inbox_url: Copia l'URL de la pàgina principal del relay que vols utilitzar
|
||||||
irreversible: Les publicacions filtrades desapareixeran de manera irreversible, fins i tot si el filtre es retira més tard
|
irreversible: Les publicacions filtrades desapareixeran de manera irreversible, fins i tot si el filtre s'elimina més tard
|
||||||
locale: L'idioma de la interfície d’usuari, els correus i les notificacions push
|
locale: L'idioma de la interfície d’usuari, els correus i les notificacions push
|
||||||
locked: Requereix que aprovis manualment els seguidors
|
locked: Controla manualment qui et pot seguir i aprovar les peticions
|
||||||
password: Utilitza com a mínim 8 caràcters
|
password: Utilitza com a mínim 8 caràcters
|
||||||
phrase: Es combinarà independentment del format en el text o l'avís de contingut de la publicació
|
phrase: Es combinarà independentment del format en el text o l'avís de contingut de la publicació
|
||||||
scopes: A quines API es permetrà a l'aplicació accedir. Si selecciones un àmbit d'alt nivell, no cal que seleccionis un d'individual.
|
scopes: API permeses per accedir a l'aplicació. Si selecciones un àmbit de nivell superior, no cal que en seleccions un d'individual.
|
||||||
setting_aggregate_reblogs: No mostrar els nous impulsos de les publicacions que ja s'han impulsat recentment (només afecta els impulsos nous rebuts)
|
setting_aggregate_reblogs: No mostris els nous impulsos de les publicacions que ja s'han impulsat recentment (només afecta els nous impulsos rebuts)
|
||||||
setting_always_send_emails: Normalment, les notificacions per correu electrònic no s'enviaran si estàs fent servir activament Mastodon
|
setting_always_send_emails: Normalment, no s'enviarà cap notificació per correu electrònic mentre facis servir Mastodon
|
||||||
setting_default_sensitive: El contingut gràfic sensible està ocult per defecte i es pot revelar amb un clic
|
setting_default_sensitive: El contingut gràfic i sensible està ocult per defecte i es pot mostrar fent-hi clic
|
||||||
setting_display_media_default: Ocultar el contigut gràfic marcat com a sensible
|
setting_display_media_default: Ocultar el contigut gràfic marcat com a sensible
|
||||||
setting_display_media_hide_all: Oculta sempre tot el contingut multimèdia
|
setting_display_media_hide_all: Oculta sempre tot el contingut multimèdia
|
||||||
setting_display_media_show_all: Mostrar sempre el contingut gràfic marcat com a sensible
|
setting_display_media_show_all: Mostrar sempre el contingut gràfic
|
||||||
setting_hide_network: Qui tu segueixes i els que et segueixen a tu no es mostraran en el teu perfil
|
setting_hide_network: Qui segueixes i els que et segueixen no es mostraran en el teu perfil
|
||||||
setting_noindex: Afecta el teu perfil públic i les pàgines d'estat
|
setting_noindex: Afecta el teu perfil públic i les pàgines d'estat
|
||||||
setting_show_application: L'aplicació que fas servir per a publicar es mostrarà a la vista detallada de les publicacions
|
setting_show_application: L'aplicació que fas servir per publicar es mostrarà a la vista detallada de les publicacions
|
||||||
setting_use_blurhash: Els degradats es basen en els colors de les imatges ocultes, però enfosqueixen els detalls
|
setting_use_blurhash: Els degradats es basen en els colors de les imatges ocultes, però n'enfosqueixen els detalls
|
||||||
setting_use_pending_items: Amagar les actualitzacions de la línia de temps després d'un clic en comptes de desplaçar-se automàticament
|
setting_use_pending_items: Amaga les actualitzacions de la línia de temps després de fer un clic en lloc de desplaçar automàticament les publicacions
|
||||||
username: El teu nom d'usuari serà únic a %{domain}
|
username: El teu nom d'usuari serà únic a %{domain}
|
||||||
whole_word: Quan la paraula clau o la frase sigui només alfanumèrica, s'aplicarà si coincideix amb la paraula sencera
|
whole_word: Quan la paraula clau o la frase sigui només alfanumèrica, s'aplicarà si coincideix amb la paraula sencera
|
||||||
domain_allow:
|
domain_allow:
|
||||||
|
|
|
@ -173,6 +173,9 @@ cy:
|
||||||
mention: Anfon e-bost pan mae rhywun yn eich crybwyll
|
mention: Anfon e-bost pan mae rhywun yn eich crybwyll
|
||||||
pending_account: Anfon ebost pan mae cyfrif newydd angen adolygiad
|
pending_account: Anfon ebost pan mae cyfrif newydd angen adolygiad
|
||||||
reblog: Anfon e-bost pan mae rhywun yn bŵstio eich statws
|
reblog: Anfon e-bost pan mae rhywun yn bŵstio eich statws
|
||||||
|
report: Cyflwynwyd adroddiad newydd
|
||||||
|
rule:
|
||||||
|
text: Rheol
|
||||||
tag:
|
tag:
|
||||||
listable: Gadewch i'r hashnod hwn ymddangos mewn chwiliadau ac ar y cyfeiriadur proffil
|
listable: Gadewch i'r hashnod hwn ymddangos mewn chwiliadau ac ar y cyfeiriadur proffil
|
||||||
name: Hashnod
|
name: Hashnod
|
||||||
|
@ -181,5 +184,6 @@ cy:
|
||||||
'no': Na
|
'no': Na
|
||||||
recommended: Argymhellwyd
|
recommended: Argymhellwyd
|
||||||
required:
|
required:
|
||||||
|
mark: "*"
|
||||||
text: gofynnol
|
text: gofynnol
|
||||||
'yes': Ie
|
'yes': Ie
|
||||||
|
|
|
@ -49,6 +49,7 @@ gd:
|
||||||
phrase: Thèid a mhaidseadh gun aire air litrichean mòra ’s beaga no air rabhadh susbainte puist
|
phrase: Thèid a mhaidseadh gun aire air litrichean mòra ’s beaga no air rabhadh susbainte puist
|
||||||
scopes: Na APIan a dh’fhaodas an aplacaid inntrigeadh. Ma thaghas tu sgòp air ìre as àirde, cha leig thu leas sgòpaichean fa leth a thaghadh.
|
scopes: Na APIan a dh’fhaodas an aplacaid inntrigeadh. Ma thaghas tu sgòp air ìre as àirde, cha leig thu leas sgòpaichean fa leth a thaghadh.
|
||||||
setting_aggregate_reblogs: Na seall brosnachaidhean ùra do phostaichean a chaidh a bhrosnachadh o chionn goirid (cha doir seo buaidh ach air brosnachaidhean ùra o seo a-mach)
|
setting_aggregate_reblogs: Na seall brosnachaidhean ùra do phostaichean a chaidh a bhrosnachadh o chionn goirid (cha doir seo buaidh ach air brosnachaidhean ùra o seo a-mach)
|
||||||
|
setting_always_send_emails: Mar as àbhaist, cha dèid brathan puist-d a chur nuair a a bhios tu ri Mastodon gu cunbhalach
|
||||||
setting_default_sensitive: Thèid meadhanan frionasach fhalach a ghnàth is gabhaidh an nochdadh le briogadh orra
|
setting_default_sensitive: Thèid meadhanan frionasach fhalach a ghnàth is gabhaidh an nochdadh le briogadh orra
|
||||||
setting_display_media_default: Falaich meadhanan ris a bheil comharra gu bheil iad frionasach
|
setting_display_media_default: Falaich meadhanan ris a bheil comharra gu bheil iad frionasach
|
||||||
setting_display_media_hide_all: Falaich na meadhanan an-còmhnaidh
|
setting_display_media_hide_all: Falaich na meadhanan an-còmhnaidh
|
||||||
|
@ -151,6 +152,7 @@ gd:
|
||||||
phrase: Facal no abairt-luirg
|
phrase: Facal no abairt-luirg
|
||||||
setting_advanced_layout: Cuir an comas an eadar-aghaidh-lìn adhartach
|
setting_advanced_layout: Cuir an comas an eadar-aghaidh-lìn adhartach
|
||||||
setting_aggregate_reblogs: Buidhnich na brosnachaidhean air an loidhne-ama
|
setting_aggregate_reblogs: Buidhnich na brosnachaidhean air an loidhne-ama
|
||||||
|
setting_always_send_emails: Cuir brathan puist-d an-còmhnaidh
|
||||||
setting_auto_play_gif: Cluich GIFs beòthaichte gu fèin-obrachail
|
setting_auto_play_gif: Cluich GIFs beòthaichte gu fèin-obrachail
|
||||||
setting_boost_modal: Seall còmhradh dearbhaidh mus dèan thu brosnachadh
|
setting_boost_modal: Seall còmhradh dearbhaidh mus dèan thu brosnachadh
|
||||||
setting_crop_images: Beàrr na dealbhan sna postaichean gun leudachadh air 16x9
|
setting_crop_images: Beàrr na dealbhan sna postaichean gun leudachadh air 16x9
|
||||||
|
|
|
@ -204,7 +204,7 @@ ko:
|
||||||
notification_emails:
|
notification_emails:
|
||||||
appeal: 누군가가 중재자의 결정에 이의를 제기했을 때
|
appeal: 누군가가 중재자의 결정에 이의를 제기했을 때
|
||||||
digest: 요약 이메일 보내기
|
digest: 요약 이메일 보내기
|
||||||
favourite: 누군가 내 상태를 즐겨찾기로 등록했을 때
|
favourite: 누군가 내 상태를 마음에 들어했을 때
|
||||||
follow: 누군가 나를 팔로우 했을 때
|
follow: 누군가 나를 팔로우 했을 때
|
||||||
follow_request: 누군가 나를 팔로우 하길 원할 때
|
follow_request: 누군가 나를 팔로우 하길 원할 때
|
||||||
mention: 누군가 나를 언급했을 때
|
mention: 누군가 나를 언급했을 때
|
||||||
|
|
|
@ -5,14 +5,14 @@ vi:
|
||||||
account_alias:
|
account_alias:
|
||||||
acct: Nhập tên_người_dùng@máy chủ của tài khoản cũ
|
acct: Nhập tên_người_dùng@máy chủ của tài khoản cũ
|
||||||
account_migration:
|
account_migration:
|
||||||
acct: Nhập tên_người_dùng@máy chủ của tài khoản bạn muốn dời sang
|
acct: tên_người_dùng@máy chủ của tài khoản bạn muốn chuyển sang
|
||||||
account_warning_preset:
|
account_warning_preset:
|
||||||
text: Bạn có thể dùng URL, hashtag và nhắc đến
|
text: Bạn có thể dùng URL, hashtag và nhắc đến
|
||||||
title: Tùy chọn. Không cho người nhận xem
|
title: Tùy chọn. Không cho người nhận xem
|
||||||
admin_account_action:
|
admin_account_action:
|
||||||
include_statuses: Người dùng sẽ thấy các tút nào của họ bị kiểm duyệt
|
include_statuses: Người dùng sẽ thấy các tút nào của họ bị kiểm duyệt
|
||||||
send_email_notification: Người dùng sẽ nhận được lời giải thích về những gì xảy ra với tài khoản của họ
|
send_email_notification: Người dùng sẽ nhận được lời giải thích về những gì xảy ra với tài khoản của họ
|
||||||
text_html: Tùy chọn. Bạn nên dùng <a href="%{path}">cảnh cáo cài sẵn</a> để tiết kiệm thời gian
|
text_html: Tùy chọn. Bạn nên dùng <a href="%{path}">mẫu có sẵn</a> để tiết kiệm thời gian
|
||||||
type_html: Chọn làm gì với <strong>%{acct}</strong>
|
type_html: Chọn làm gì với <strong>%{acct}</strong>
|
||||||
types:
|
types:
|
||||||
disable: Tạm khóa đăng nhập tài khoản, nhưng không xóa hoặc ẩn tút.
|
disable: Tạm khóa đăng nhập tài khoản, nhưng không xóa hoặc ẩn tút.
|
||||||
|
@ -85,7 +85,7 @@ vi:
|
||||||
rule:
|
rule:
|
||||||
text: Mô tả một quy tắc bắt buộc trên máy chủ này. Nên để ngắn và đơn giản.
|
text: Mô tả một quy tắc bắt buộc trên máy chủ này. Nên để ngắn và đơn giản.
|
||||||
sessions:
|
sessions:
|
||||||
otp: 'Nhập mã xác thực hai bước được tạo bởi ứng dụng điện thoại của bạn hoặc dùng một trong các mã khôi phục của bạn:'
|
otp: 'Nhập mã xác minh 2 bước được tạo bởi ứng dụng điện thoại của bạn hoặc dùng một trong các mã khôi phục của bạn:'
|
||||||
webauthn: Nếu đây là USB key, hãy cắm vào và thử xoay chiều.
|
webauthn: Nếu đây là USB key, hãy cắm vào và thử xoay chiều.
|
||||||
tag:
|
tag:
|
||||||
name: Bạn có thể thay đổi cách viết hoa các chữ cái để giúp nó dễ đọc hơn
|
name: Bạn có thể thay đổi cách viết hoa các chữ cái để giúp nó dễ đọc hơn
|
||||||
|
@ -110,7 +110,7 @@ vi:
|
||||||
type: Hành động
|
type: Hành động
|
||||||
types:
|
types:
|
||||||
disable: Khóa
|
disable: Khóa
|
||||||
none: Cảnh cáo
|
none: Nhắc nhở
|
||||||
sensitive: Nhạy cảm
|
sensitive: Nhạy cảm
|
||||||
silence: Hạn chế
|
silence: Hạn chế
|
||||||
suspend: Vô hiệu hóa
|
suspend: Vô hiệu hóa
|
||||||
|
@ -147,7 +147,7 @@ vi:
|
||||||
max_uses: Số lần dùng tối đa
|
max_uses: Số lần dùng tối đa
|
||||||
new_password: Mật khẩu mới
|
new_password: Mật khẩu mới
|
||||||
note: Tiểu sử
|
note: Tiểu sử
|
||||||
otp_attempt: Xác thực hai bước
|
otp_attempt: Mã xác minh 2 bước
|
||||||
password: Mật khẩu
|
password: Mật khẩu
|
||||||
phrase: Từ khóa hoặc cụm từ
|
phrase: Từ khóa hoặc cụm từ
|
||||||
setting_advanced_layout: Bật bố cục nhiều cột
|
setting_advanced_layout: Bật bố cục nhiều cột
|
||||||
|
|
|
@ -63,9 +63,9 @@ vi:
|
||||||
instance_actor_flash: Tài khoản này được dùng để đại diện cho máy chủ và không phải là người thật. Đừng bao giờ vô hiệu hóa tài khoản này.
|
instance_actor_flash: Tài khoản này được dùng để đại diện cho máy chủ và không phải là người thật. Đừng bao giờ vô hiệu hóa tài khoản này.
|
||||||
joined: Đã tham gia %{date}
|
joined: Đã tham gia %{date}
|
||||||
last_active: online
|
last_active: online
|
||||||
link_verified_on: Liên kết này đã được xác thực quyền sở hữu vào %{date}
|
link_verified_on: Liên kết này đã được xác minh quyền sở hữu vào %{date}
|
||||||
media: Media
|
media: Media
|
||||||
moved_html: "%{name} đã đổi thành %{new_profile_link}:"
|
moved_html: "%{name} đã chuyển sang %{new_profile_link}:"
|
||||||
network_hidden: Dữ liệu đã bị ẩn
|
network_hidden: Dữ liệu đã bị ẩn
|
||||||
nothing_here: Trống trơn!
|
nothing_here: Trống trơn!
|
||||||
people_followed_by: Những người %{name} theo dõi
|
people_followed_by: Những người %{name} theo dõi
|
||||||
|
@ -106,7 +106,7 @@ vi:
|
||||||
submit: Thay đổi email
|
submit: Thay đổi email
|
||||||
title: Thay đổi email cho %{username}
|
title: Thay đổi email cho %{username}
|
||||||
confirm: Phê duyệt
|
confirm: Phê duyệt
|
||||||
confirmed: Đã xác thực
|
confirmed: Đã xác minh
|
||||||
confirming: Chờ xác nhận
|
confirming: Chờ xác nhận
|
||||||
custom: Tùy chỉnh
|
custom: Tùy chỉnh
|
||||||
delete: Xóa dữ liệu
|
delete: Xóa dữ liệu
|
||||||
|
@ -114,8 +114,8 @@ vi:
|
||||||
demote: Xóa vai trò
|
demote: Xóa vai trò
|
||||||
destroyed_msg: Dữ liệu %{username} sẽ được lên lịch xóa ngay bây giờ
|
destroyed_msg: Dữ liệu %{username} sẽ được lên lịch xóa ngay bây giờ
|
||||||
disable: Khóa
|
disable: Khóa
|
||||||
disable_sign_in_token_auth: Tắt xác thực bằng email
|
disable_sign_in_token_auth: Vô hiệu hóa xác minh bằng email
|
||||||
disable_two_factor_authentication: Vô hiệu hóa xác thực hai bước
|
disable_two_factor_authentication: Vô hiệu hóa xác minh 2 bước
|
||||||
disabled: Đã vô hiệu hóa
|
disabled: Đã vô hiệu hóa
|
||||||
display_name: Tên hiển thị
|
display_name: Tên hiển thị
|
||||||
domain: Máy chủ
|
domain: Máy chủ
|
||||||
|
@ -123,7 +123,7 @@ vi:
|
||||||
email: Email
|
email: Email
|
||||||
email_status: Trạng thái
|
email_status: Trạng thái
|
||||||
enable: Mở lại
|
enable: Mở lại
|
||||||
enable_sign_in_token_auth: Bật xác thực bằng email
|
enable_sign_in_token_auth: Bật xác minh bằng email
|
||||||
enabled: Đã duyệt
|
enabled: Đã duyệt
|
||||||
enabled_msg: Đã kích hoạt lại tài khoản %{username} thành công
|
enabled_msg: Đã kích hoạt lại tài khoản %{username} thành công
|
||||||
followers: Người theo dõi
|
followers: Người theo dõi
|
||||||
|
@ -152,7 +152,7 @@ vi:
|
||||||
title: Trạng thái
|
title: Trạng thái
|
||||||
moderation_notes: Nhật ký kiểm duyệt
|
moderation_notes: Nhật ký kiểm duyệt
|
||||||
most_recent_activity: Hoạt động lần cuối
|
most_recent_activity: Hoạt động lần cuối
|
||||||
most_recent_ip: IP gần đây nhất
|
most_recent_ip: IP gần nhất
|
||||||
no_account_selected: Không có tài khoản nào thay đổi vì không có tài khoản nào được chọn
|
no_account_selected: Không có tài khoản nào thay đổi vì không có tài khoản nào được chọn
|
||||||
no_limits_imposed: Bình thường
|
no_limits_imposed: Bình thường
|
||||||
not_subscribed: Chưa đăng ký
|
not_subscribed: Chưa đăng ký
|
||||||
|
@ -174,7 +174,7 @@ vi:
|
||||||
removed_avatar_msg: Đã xóa bỏ ảnh đại diện của %{username}
|
removed_avatar_msg: Đã xóa bỏ ảnh đại diện của %{username}
|
||||||
removed_header_msg: Đã xóa bỏ ảnh bìa của %{username}
|
removed_header_msg: Đã xóa bỏ ảnh bìa của %{username}
|
||||||
resend_confirmation:
|
resend_confirmation:
|
||||||
already_confirmed: Người dùng này đã được xác thực
|
already_confirmed: Người dùng này đã được xác minh
|
||||||
send: Gửi lại email xác nhận
|
send: Gửi lại email xác nhận
|
||||||
success: Email xác nhận đã gửi thành công!
|
success: Email xác nhận đã gửi thành công!
|
||||||
reset: Đặt lại
|
reset: Đặt lại
|
||||||
|
@ -210,7 +210,7 @@ vi:
|
||||||
title: Tài khoản
|
title: Tài khoản
|
||||||
unblock_email: Mở khóa địa chỉ email
|
unblock_email: Mở khóa địa chỉ email
|
||||||
unblocked_email_msg: Mở khóa thành công địa chỉ email của %{username}
|
unblocked_email_msg: Mở khóa thành công địa chỉ email của %{username}
|
||||||
unconfirmed_email: Email chưa được xác thực
|
unconfirmed_email: Email chưa được xác minh
|
||||||
undo_sensitized: Đánh dấu bình thường
|
undo_sensitized: Đánh dấu bình thường
|
||||||
undo_silenced: Bỏ hạn chế
|
undo_silenced: Bỏ hạn chế
|
||||||
undo_suspension: Bỏ vô hiệu hóa
|
undo_suspension: Bỏ vô hiệu hóa
|
||||||
|
@ -219,7 +219,7 @@ vi:
|
||||||
unsuspended_msg: Đã kích hoạt lại %{username} thành công
|
unsuspended_msg: Đã kích hoạt lại %{username} thành công
|
||||||
username: Tài khoản
|
username: Tài khoản
|
||||||
view_domain: Xem mô tả tài khoản này
|
view_domain: Xem mô tả tài khoản này
|
||||||
warn: Cảnh cáo
|
warn: Nhắc
|
||||||
web: Web
|
web: Web
|
||||||
whitelisted: Danh sách trắng
|
whitelisted: Danh sách trắng
|
||||||
action_logs:
|
action_logs:
|
||||||
|
@ -228,8 +228,8 @@ vi:
|
||||||
approve_user: Chấp nhận người dùng
|
approve_user: Chấp nhận người dùng
|
||||||
assigned_to_self_report: Tự xử lý báo cáo
|
assigned_to_self_report: Tự xử lý báo cáo
|
||||||
change_email_user: Đổi email người dùng
|
change_email_user: Đổi email người dùng
|
||||||
confirm_user: Xác thực người dùng
|
confirm_user: Xác minh người dùng
|
||||||
create_account_warning: Cảnh cáo người dùng
|
create_account_warning: Nhắc nhở người dùng
|
||||||
create_announcement: Tạo thông báo mới
|
create_announcement: Tạo thông báo mới
|
||||||
create_custom_emoji: Tạo emoji
|
create_custom_emoji: Tạo emoji
|
||||||
create_domain_allow: Cho phép máy chủ
|
create_domain_allow: Cho phép máy chủ
|
||||||
|
@ -249,10 +249,10 @@ vi:
|
||||||
destroy_unavailable_domain: Xóa máy chủ không khả dụng
|
destroy_unavailable_domain: Xóa máy chủ không khả dụng
|
||||||
disable_2fa_user: Vô hiệu hóa 2FA
|
disable_2fa_user: Vô hiệu hóa 2FA
|
||||||
disable_custom_emoji: Vô hiệu hóa emoji
|
disable_custom_emoji: Vô hiệu hóa emoji
|
||||||
disable_sign_in_token_auth_user: Tắt xác thực bằng email cho người dùng
|
disable_sign_in_token_auth_user: Vô hiệu hóa xác minh bằng email cho người dùng
|
||||||
disable_user: Vô hiệu hóa đăng nhập
|
disable_user: Vô hiệu hóa đăng nhập
|
||||||
enable_custom_emoji: Cho phép emoji
|
enable_custom_emoji: Cho phép emoji
|
||||||
enable_sign_in_token_auth_user: Bật xác thực bằng email cho người dùng
|
enable_sign_in_token_auth_user: Bật xác minh bằng email cho người dùng
|
||||||
enable_user: Bỏ vô hiệu hóa đăng nhập
|
enable_user: Bỏ vô hiệu hóa đăng nhập
|
||||||
memorialize_account: Đánh dấu tưởng niệm
|
memorialize_account: Đánh dấu tưởng niệm
|
||||||
promote_user: Chỉ định vai trò
|
promote_user: Chỉ định vai trò
|
||||||
|
@ -279,8 +279,8 @@ vi:
|
||||||
approve_user_html: "%{name} đã chấp nhận đăng ký từ %{target}"
|
approve_user_html: "%{name} đã chấp nhận đăng ký từ %{target}"
|
||||||
assigned_to_self_report_html: "%{name} tự xử lý báo cáo %{target}"
|
assigned_to_self_report_html: "%{name} tự xử lý báo cáo %{target}"
|
||||||
change_email_user_html: "%{name} đã thay đổi địa chỉ email của %{target}"
|
change_email_user_html: "%{name} đã thay đổi địa chỉ email của %{target}"
|
||||||
confirm_user_html: "%{name} đã xác thực địa chỉ email của %{target}"
|
confirm_user_html: "%{name} đã xác minh địa chỉ email của %{target}"
|
||||||
create_account_warning_html: "%{name} đã gửi cảnh cáo %{target}"
|
create_account_warning_html: "%{name} đã nhắc nhở %{target}"
|
||||||
create_announcement_html: "%{name} tạo thông báo mới %{target}"
|
create_announcement_html: "%{name} tạo thông báo mới %{target}"
|
||||||
create_custom_emoji_html: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}"
|
create_custom_emoji_html: "%{name} đã tải lên biểu tượng cảm xúc mới %{target}"
|
||||||
create_domain_allow_html: "%{name} kích hoạt liên hợp với %{target}"
|
create_domain_allow_html: "%{name} kích hoạt liên hợp với %{target}"
|
||||||
|
@ -298,12 +298,12 @@ vi:
|
||||||
destroy_ip_block_html: "%{name} bỏ chặn IP %{target}"
|
destroy_ip_block_html: "%{name} bỏ chặn IP %{target}"
|
||||||
destroy_status_html: "%{name} đã xóa tút của %{target}"
|
destroy_status_html: "%{name} đã xóa tút của %{target}"
|
||||||
destroy_unavailable_domain_html: "%{name} tiếp tục phân phối với máy chủ %{target}"
|
destroy_unavailable_domain_html: "%{name} tiếp tục phân phối với máy chủ %{target}"
|
||||||
disable_2fa_user_html: "%{name} đã vô hiệu hóa xác thực hai bước của %{target}"
|
disable_2fa_user_html: "%{name} đã vô hiệu hóa xác minh hai bước của %{target}"
|
||||||
disable_custom_emoji_html: "%{name} đã ẩn emoji %{target}"
|
disable_custom_emoji_html: "%{name} đã ẩn emoji %{target}"
|
||||||
disable_sign_in_token_auth_user_html: "%{name} tắt xác thực email của %{target}"
|
disable_sign_in_token_auth_user_html: "%{name} vô hiệu hóa xác minh email của %{target}"
|
||||||
disable_user_html: "%{name} vô hiệu hóa đăng nhập %{target}"
|
disable_user_html: "%{name} vô hiệu hóa đăng nhập %{target}"
|
||||||
enable_custom_emoji_html: "%{name} cho phép Emoji %{target}"
|
enable_custom_emoji_html: "%{name} cho phép Emoji %{target}"
|
||||||
enable_sign_in_token_auth_user_html: "%{name} bật xác thực email của %{target}"
|
enable_sign_in_token_auth_user_html: "%{name} bật xác minh email của %{target}"
|
||||||
enable_user_html: "%{name} bỏ vô hiệu hóa đăng nhập %{target}"
|
enable_user_html: "%{name} bỏ vô hiệu hóa đăng nhập %{target}"
|
||||||
memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm"
|
memorialize_account_html: "%{name} đã biến tài khoản %{target} thành một trang tưởng niệm"
|
||||||
promote_user_html: "%{name} chỉ định vai trò cho %{target}"
|
promote_user_html: "%{name} chỉ định vai trò cho %{target}"
|
||||||
|
@ -698,7 +698,7 @@ vi:
|
||||||
title: Chế độ đăng ký
|
title: Chế độ đăng ký
|
||||||
show_known_fediverse_at_about_page:
|
show_known_fediverse_at_about_page:
|
||||||
desc_html: Nếu tắt, bảng tin sẽ chỉ hiển thị nội dung do người dùng của máy chủ này tạo ra
|
desc_html: Nếu tắt, bảng tin sẽ chỉ hiển thị nội dung do người dùng của máy chủ này tạo ra
|
||||||
title: Bao gồm nội dung từ mạng liên hợp trên bảng tin không được xác thực
|
title: Bao gồm nội dung từ mạng liên hợp trên bảng tin không được cho phép
|
||||||
show_staff_badge:
|
show_staff_badge:
|
||||||
desc_html: Hiện huy hiệu đội ngũ trên trang người dùng
|
desc_html: Hiện huy hiệu đội ngũ trên trang người dùng
|
||||||
title: Hiện huy hiệu đội ngũ
|
title: Hiện huy hiệu đội ngũ
|
||||||
|
@ -719,8 +719,8 @@ vi:
|
||||||
desc_html: Bản xem trước thông qua OpenGraph và API. Khuyến nghị 1200x630px
|
desc_html: Bản xem trước thông qua OpenGraph và API. Khuyến nghị 1200x630px
|
||||||
title: Hình thu nhỏ của máy chủ
|
title: Hình thu nhỏ của máy chủ
|
||||||
timeline_preview:
|
timeline_preview:
|
||||||
desc_html: Hiển thị dòng thời gian công khai trên trang đích và cho phép API truy cập vào dòng thời gian công khai mà không cần xác thực
|
desc_html: Hiển thị dòng thời gian công khai trên trang đích và cho phép API truy cập vào dòng thời gian công khai mà không cần cho phép
|
||||||
title: Cho phép truy cập không xác thực vào dòng thời gian công cộng
|
title: Cho phép truy cập vào dòng thời gian công cộng không cần cho phép
|
||||||
title: Cài đặt trang web
|
title: Cài đặt trang web
|
||||||
trendable_by_default:
|
trendable_by_default:
|
||||||
desc_html: Ảnh hưởng đến các hashtag chưa được cho phép trước đây
|
desc_html: Ảnh hưởng đến các hashtag chưa được cho phép trước đây
|
||||||
|
@ -828,8 +828,8 @@ vi:
|
||||||
add_new: Thêm mới
|
add_new: Thêm mới
|
||||||
delete: Xóa bỏ
|
delete: Xóa bỏ
|
||||||
edit_preset: Sửa mẫu có sẵn
|
edit_preset: Sửa mẫu có sẵn
|
||||||
empty: Bạn chưa thêm mẫu có sẵn nào cả.
|
empty: Bạn chưa thêm mẫu nhắc nhở nào cả.
|
||||||
title: Quản lý mẫu cảnh cáo
|
title: Quản lý mẫu nhắc nhở
|
||||||
admin_mailer:
|
admin_mailer:
|
||||||
new_appeal:
|
new_appeal:
|
||||||
actions:
|
actions:
|
||||||
|
@ -910,11 +910,11 @@ vi:
|
||||||
prefix_invited_by_user: "@%{name} mời bạn tham gia máy chủ Mastodon này!"
|
prefix_invited_by_user: "@%{name} mời bạn tham gia máy chủ Mastodon này!"
|
||||||
prefix_sign_up: Tham gia Mastodon ngay hôm nay!
|
prefix_sign_up: Tham gia Mastodon ngay hôm nay!
|
||||||
suffix: Với tài khoản, bạn sẽ có thể theo dõi mọi người, đăng tút và nhắn tin với người dùng từ bất kỳ máy chủ Mastodon khác!
|
suffix: Với tài khoản, bạn sẽ có thể theo dõi mọi người, đăng tút và nhắn tin với người dùng từ bất kỳ máy chủ Mastodon khác!
|
||||||
didnt_get_confirmation: Gửi lại email xác thực?
|
didnt_get_confirmation: Gửi lại email xác minh?
|
||||||
dont_have_your_security_key: Bạn có khóa bảo mật chưa?
|
dont_have_your_security_key: Bạn có khóa bảo mật chưa?
|
||||||
forgot_password: Quên mật khẩu
|
forgot_password: Quên mật khẩu
|
||||||
invalid_reset_password_token: Mã đặt lại mật khẩu không hợp lệ hoặc hết hạn. Vui lòng yêu cầu một cái mới.
|
invalid_reset_password_token: Mã đặt lại mật khẩu không hợp lệ hoặc hết hạn. Vui lòng yêu cầu một cái mới.
|
||||||
link_to_otp: Nhập mã xác thực từ điện thoại hoặc mã phục hồi
|
link_to_otp: Nhập mã xác minh từ điện thoại hoặc mã khôi phục
|
||||||
link_to_webauth: Nhập khóa bảo mật từ thiết bị
|
link_to_webauth: Nhập khóa bảo mật từ thiết bị
|
||||||
log_in_with: Đăng nhập bằng
|
log_in_with: Đăng nhập bằng
|
||||||
login: Đăng nhập
|
login: Đăng nhập
|
||||||
|
@ -927,18 +927,18 @@ vi:
|
||||||
saml: SAML
|
saml: SAML
|
||||||
register: Đăng ký
|
register: Đăng ký
|
||||||
registration_closed: "%{instance} tạm ngưng đăng ký mới"
|
registration_closed: "%{instance} tạm ngưng đăng ký mới"
|
||||||
resend_confirmation: Gửi lại email xác thực
|
resend_confirmation: Gửi lại email xác minh
|
||||||
reset_password: Đặt lại mật khẩu
|
reset_password: Đặt lại mật khẩu
|
||||||
security: Bảo mật
|
security: Bảo mật
|
||||||
set_new_password: Đặt mật khẩu mới
|
set_new_password: Đặt mật khẩu mới
|
||||||
setup:
|
setup:
|
||||||
email_below_hint_html: Nếu địa chỉ email dưới đây không chính xác, bạn có thể thay đổi địa chỉ tại đây và nhận email xác nhận mới.
|
email_below_hint_html: Nếu địa chỉ email dưới đây không chính xác, bạn có thể thay đổi địa chỉ tại đây và nhận email xác nhận mới.
|
||||||
email_settings_hint_html: Email xác thực đã được gửi tới %{email}. Nếu địa chỉ email đó không chính xác, bạn có thể thay đổi nó trong cài đặt tài khoản.
|
email_settings_hint_html: Email xác minh đã được gửi tới %{email}. Nếu địa chỉ email đó không chính xác, bạn có thể thay đổi nó trong cài đặt tài khoản.
|
||||||
title: Thiết lập
|
title: Thiết lập
|
||||||
status:
|
status:
|
||||||
account_status: Trạng thái tài khoản
|
account_status: Trạng thái tài khoản
|
||||||
confirming: Đang chờ xác thực email.
|
confirming: Đang chờ xác minh email.
|
||||||
functional: Tài khoản của bạn đã được xác thực.
|
functional: Tài khoản của bạn đã được xác minh.
|
||||||
pending: Đơn đăng ký của bạn đang chờ phê duyệt. Điều này có thể mất một thời gian. Bạn sẽ nhận được email nếu đơn đăng ký của bạn được chấp thuận.
|
pending: Đơn đăng ký của bạn đang chờ phê duyệt. Điều này có thể mất một thời gian. Bạn sẽ nhận được email nếu đơn đăng ký của bạn được chấp thuận.
|
||||||
redirecting_to: Tài khoản của bạn không hoạt động vì hiện đang chuyển hướng đến %{acct}.
|
redirecting_to: Tài khoản của bạn không hoạt động vì hiện đang chuyển hướng đến %{acct}.
|
||||||
view_strikes: Xem những lần cảnh cáo cũ
|
view_strikes: Xem những lần cảnh cáo cũ
|
||||||
|
@ -969,7 +969,7 @@ vi:
|
||||||
date:
|
date:
|
||||||
formats:
|
formats:
|
||||||
default: "%-d %B, %Y"
|
default: "%-d %B, %Y"
|
||||||
with_month_name: "%-d tháng %-m, %Y"
|
with_month_name: "%-d %B, %Y"
|
||||||
datetime:
|
datetime:
|
||||||
distance_in_words:
|
distance_in_words:
|
||||||
about_x_hours: "%{count} giờ"
|
about_x_hours: "%{count} giờ"
|
||||||
|
@ -1026,8 +1026,8 @@ vi:
|
||||||
delete_statuses: Xóa tút
|
delete_statuses: Xóa tút
|
||||||
disable: Đóng băng tài khoản
|
disable: Đóng băng tài khoản
|
||||||
mark_statuses_as_sensitive: Đánh dấu tút là nhạy cảm
|
mark_statuses_as_sensitive: Đánh dấu tút là nhạy cảm
|
||||||
none: Cảnh cáo
|
none: Nhắc nhở
|
||||||
sensitive: Đánh dấu người dùng là nhạy cảm
|
sensitive: Đánh dấu tài khoản là nhạy cảm
|
||||||
silence: Hạn chế tài khoản
|
silence: Hạn chế tài khoản
|
||||||
suspend: Vô hiệu hóa tài khoản
|
suspend: Vô hiệu hóa tài khoản
|
||||||
your_appeal_approved: Khiếu nại của bạn được chấp nhận
|
your_appeal_approved: Khiếu nại của bạn được chấp nhận
|
||||||
|
@ -1153,11 +1153,11 @@ vi:
|
||||||
limit: Bạn đã đạt đến số lượng danh sách tối đa
|
limit: Bạn đã đạt đến số lượng danh sách tối đa
|
||||||
login_activities:
|
login_activities:
|
||||||
authentication_methods:
|
authentication_methods:
|
||||||
otp: xác thực 2 bước
|
otp: xác minh 2 bước
|
||||||
password: mật khẩu
|
password: mật khẩu
|
||||||
sign_in_token: mã an toàn email
|
sign_in_token: mã an toàn email
|
||||||
webauthn: khóa bảo mật
|
webauthn: khóa bảo mật
|
||||||
description_html: Nếu có lần đăng nhập đáng ngờ, hãy đổi ngay mật khẩu và bật xác thực hai bước.
|
description_html: Nếu có lần đăng nhập đáng ngờ, hãy đổi ngay mật khẩu và bật xác minh 2 bước.
|
||||||
empty: Không có lịch sử đăng nhập
|
empty: Không có lịch sử đăng nhập
|
||||||
failed_sign_in_html: Đăng nhập thất bại bằng %{method} từ %{ip} (%{browser})
|
failed_sign_in_html: Đăng nhập thất bại bằng %{method} từ %{ip} (%{browser})
|
||||||
successful_sign_in_html: Đăng nhập thành công bằng %{method} từ %{ip} (%{browser})
|
successful_sign_in_html: Đăng nhập thành công bằng %{method} từ %{ip} (%{browser})
|
||||||
|
@ -1168,7 +1168,7 @@ vi:
|
||||||
not_ready: Tập tin này vẫn chưa xử lý xong. Hãy thử lại sau!
|
not_ready: Tập tin này vẫn chưa xử lý xong. Hãy thử lại sau!
|
||||||
too_many: Không thể đính kèm hơn 4 tệp
|
too_many: Không thể đính kèm hơn 4 tệp
|
||||||
migrations:
|
migrations:
|
||||||
acct: Dời sang
|
acct: Chuyển sang
|
||||||
cancel: Hủy chuyển hướng
|
cancel: Hủy chuyển hướng
|
||||||
cancel_explanation: Hủy chuyển hướng sẽ kích hoạt lại tài khoản hiện tại của bạn, nhưng sẽ không chuyển được những người theo dõi ở tài khoản mới.
|
cancel_explanation: Hủy chuyển hướng sẽ kích hoạt lại tài khoản hiện tại của bạn, nhưng sẽ không chuyển được những người theo dõi ở tài khoản mới.
|
||||||
cancelled_msg: Đã hủy chuyển hướng xong.
|
cancelled_msg: Đã hủy chuyển hướng xong.
|
||||||
|
@ -1260,8 +1260,8 @@ vi:
|
||||||
thousand: K
|
thousand: K
|
||||||
trillion: T
|
trillion: T
|
||||||
otp_authentication:
|
otp_authentication:
|
||||||
code_hint: Nhập mã được tạo bởi ứng dụng xác thực của bạn để xác nhận
|
code_hint: Nhập mã được tạo bởi ứng dụng xác minh của bạn để xác nhận
|
||||||
description_html: Nếu kích hoạt <strong>xác thực hai bước</strong> thông qua ứng dụng, bạn sẽ đăng nhập bằng mã token được tạo bởi chính điện thoại của bạn.
|
description_html: Nếu kích hoạt <strong>xác minh 2 bước</strong> thông qua ứng dụng, bạn sẽ đăng nhập bằng mã token được tạo bởi chính điện thoại của bạn.
|
||||||
enable: Kích hoạt
|
enable: Kích hoạt
|
||||||
instructions_html: "<strong>Quét mã QR bằng Google Authenticator hoặc một ứng dụng TOTP tương tự trên điện thoại của bạn</strong>. Kể từ bây giờ, ứng dụng đó sẽ tạo những token để bạn đăng nhập."
|
instructions_html: "<strong>Quét mã QR bằng Google Authenticator hoặc một ứng dụng TOTP tương tự trên điện thoại của bạn</strong>. Kể từ bây giờ, ứng dụng đó sẽ tạo những token để bạn đăng nhập."
|
||||||
manual_instructions: 'Nếu bạn không thể quét mã QR, đây sẽ là dòng chữ gợi ý:'
|
manual_instructions: 'Nếu bạn không thể quét mã QR, đây sẽ là dòng chữ gợi ý:'
|
||||||
|
@ -1396,7 +1396,7 @@ vi:
|
||||||
relationships: Quan hệ
|
relationships: Quan hệ
|
||||||
statuses_cleanup: Tự động xóa tút cũ
|
statuses_cleanup: Tự động xóa tút cũ
|
||||||
strikes: Lần cảnh cáo
|
strikes: Lần cảnh cáo
|
||||||
two_factor_authentication: Xác thực hai bước
|
two_factor_authentication: Xác minh 2 bước
|
||||||
webauthn_authentication: Khóa bảo mật
|
webauthn_authentication: Khóa bảo mật
|
||||||
statuses:
|
statuses:
|
||||||
attached:
|
attached:
|
||||||
|
@ -1446,8 +1446,8 @@ vi:
|
||||||
enabled: Tự động xóa những tút cũ
|
enabled: Tự động xóa những tút cũ
|
||||||
enabled_hint: Tự động xóa các tút của bạn khi chúng tới thời điểm nhất định, trừ những trường hợp ngoại lệ bên dưới
|
enabled_hint: Tự động xóa các tút của bạn khi chúng tới thời điểm nhất định, trừ những trường hợp ngoại lệ bên dưới
|
||||||
exceptions: Ngoại lệ
|
exceptions: Ngoại lệ
|
||||||
explanation: Tút của bạn sẽ tăng dần theo năm tháng. Bạn nên xóa những tút cũ khi chúng đã đạt tới thời điểm nhất định.
|
explanation: Số lượng tút sẽ tăng dần theo năm tháng. Bạn nên xóa những tút cũ khi tới một thời điểm nhất định.
|
||||||
ignore_favs: Bỏ qua số luợt thích
|
ignore_favs: Bỏ qua số lượt thích
|
||||||
ignore_reblogs: Bỏ qua lượt đăng lại
|
ignore_reblogs: Bỏ qua lượt đăng lại
|
||||||
interaction_exceptions: Ngoại lệ dựa trên tương tác
|
interaction_exceptions: Ngoại lệ dựa trên tương tác
|
||||||
interaction_exceptions_explanation: Lưu ý rằng không có gì đảm bảo rằng các tút sẽ bị xóa nếu chúng tụt dưới ngưỡng mức yêu thích hoặc đăng lại, dù đã từng đạt.
|
interaction_exceptions_explanation: Lưu ý rằng không có gì đảm bảo rằng các tút sẽ bị xóa nếu chúng tụt dưới ngưỡng mức yêu thích hoặc đăng lại, dù đã từng đạt.
|
||||||
|
@ -1545,15 +1545,15 @@ vi:
|
||||||
two_factor_authentication:
|
two_factor_authentication:
|
||||||
add: Thêm
|
add: Thêm
|
||||||
disable: Vô hiệu hóa
|
disable: Vô hiệu hóa
|
||||||
disabled_success: Đã vô hiệu hóa xác thực hai bước
|
disabled_success: Đã vô hiệu hóa xác minh 2 bước
|
||||||
edit: Sửa
|
edit: Sửa
|
||||||
enabled: Đã kích hoạt xác thực hai bước
|
enabled: Đã kích hoạt xác minh 2 bước
|
||||||
enabled_success: Xác thực hai bước được kích hoạt thành công
|
enabled_success: Xác minh 2 bước được kích hoạt thành công
|
||||||
generate_recovery_codes: Tạo mã khôi phục
|
generate_recovery_codes: Tạo mã khôi phục
|
||||||
lost_recovery_codes: Mã khôi phục cho phép bạn lấy lại quyền truy cập vào tài khoản của mình nếu bạn mất điện thoại. Nếu bạn bị mất mã khôi phục, bạn có thể tạo lại chúng ở đây. Mã khôi phục cũ của bạn sẽ bị vô hiệu.
|
lost_recovery_codes: Mã khôi phục cho phép bạn lấy lại quyền truy cập vào tài khoản của mình nếu bạn mất điện thoại. Nếu bạn bị mất mã khôi phục, bạn có thể tạo lại chúng ở đây. Mã khôi phục cũ của bạn sẽ bị vô hiệu.
|
||||||
methods: Phương pháp xác thực
|
methods: Phương pháp xác minh
|
||||||
otp: Ứng dụng xác thực
|
otp: Ứng dụng xác minh
|
||||||
recovery_codes: Mã phục hồi dự phòng
|
recovery_codes: Mã khôi phục dự phòng
|
||||||
recovery_codes_regenerated: Mã khôi phục được phục hồi thành công
|
recovery_codes_regenerated: Mã khôi phục được phục hồi thành công
|
||||||
recovery_instructions_html: Nếu bạn bị mất điện thoại, hãy dùng một trong các mã khôi phục bên dưới để lấy lại quyền truy cập vào tài khoản của mình. <strong>Giữ mã khôi phục an toàn</strong>. Ví dụ, bạn có thể in chúng ra giấy.
|
recovery_instructions_html: Nếu bạn bị mất điện thoại, hãy dùng một trong các mã khôi phục bên dưới để lấy lại quyền truy cập vào tài khoản của mình. <strong>Giữ mã khôi phục an toàn</strong>. Ví dụ, bạn có thể in chúng ra giấy.
|
||||||
webauthn: Khóa bảo mật
|
webauthn: Khóa bảo mật
|
||||||
|
@ -1575,7 +1575,7 @@ vi:
|
||||||
change_password: đổi mật khẩu của bạn
|
change_password: đổi mật khẩu của bạn
|
||||||
details: 'Chi tiết thông tin đăng nhập:'
|
details: 'Chi tiết thông tin đăng nhập:'
|
||||||
explanation: Chúng tôi phát hiện lần đăng nhập bất thường tài khoản của bạn từ một địa chỉ IP mới.
|
explanation: Chúng tôi phát hiện lần đăng nhập bất thường tài khoản của bạn từ một địa chỉ IP mới.
|
||||||
further_actions_html: Nếu đó không phải là bạn, chúng tôi khuyến nghị %{action} lập tức và bật xác thực hai bước để giữ tài khoản được an toàn.
|
further_actions_html: Nếu đó không phải là bạn, chúng tôi khuyến nghị %{action} lập tức và bật xác minh hai bước để giữ tài khoản được an toàn.
|
||||||
subject: Đăng nhập tài khoản từ địa chỉ IP mới
|
subject: Đăng nhập tài khoản từ địa chỉ IP mới
|
||||||
title: Lần đăng nhập mới
|
title: Lần đăng nhập mới
|
||||||
warning:
|
warning:
|
||||||
|
@ -1597,7 +1597,7 @@ vi:
|
||||||
delete_statuses: Những tút %{acct} của bạn đã bị xóa bỏ
|
delete_statuses: Những tút %{acct} của bạn đã bị xóa bỏ
|
||||||
disable: Tài khoản %{acct} của bạn đã bị vô hiệu hóa
|
disable: Tài khoản %{acct} của bạn đã bị vô hiệu hóa
|
||||||
mark_statuses_as_sensitive: Tút của bạn trên %{acct} bị đánh dấu nhạy cảm
|
mark_statuses_as_sensitive: Tút của bạn trên %{acct} bị đánh dấu nhạy cảm
|
||||||
none: Cảnh báo cho %{acct}
|
none: Nhắc nhở tới %{acct}
|
||||||
sensitive: Tút của bạn trên %{acct} sẽ bị đánh dấu nhạy cảm kể từ bây giờ
|
sensitive: Tút của bạn trên %{acct} sẽ bị đánh dấu nhạy cảm kể từ bây giờ
|
||||||
silence: Tài khoản %{acct} của bạn đã bị hạn chế
|
silence: Tài khoản %{acct} của bạn đã bị hạn chế
|
||||||
suspend: Tài khoản %{acct} của bạn đã bị vô hiệu hóa
|
suspend: Tài khoản %{acct} của bạn đã bị vô hiệu hóa
|
||||||
|
@ -1605,7 +1605,7 @@ vi:
|
||||||
delete_statuses: Xóa tút
|
delete_statuses: Xóa tút
|
||||||
disable: Tài khoản bị đóng băng
|
disable: Tài khoản bị đóng băng
|
||||||
mark_statuses_as_sensitive: Tút đã bị đánh dấu nhạy cảm
|
mark_statuses_as_sensitive: Tút đã bị đánh dấu nhạy cảm
|
||||||
none: Cảnh báo
|
none: Nhắc nhở
|
||||||
sensitive: Tài khoản đã bị đánh dấu nhạy cảm
|
sensitive: Tài khoản đã bị đánh dấu nhạy cảm
|
||||||
silence: Tài khoản bị hạn chế
|
silence: Tài khoản bị hạn chế
|
||||||
suspend: Tài khoản bị vô hiệu hóa
|
suspend: Tài khoản bị vô hiệu hóa
|
||||||
|
@ -1628,7 +1628,7 @@ vi:
|
||||||
title: Xin chào %{name}!
|
title: Xin chào %{name}!
|
||||||
users:
|
users:
|
||||||
follow_limit_reached: Bạn chỉ có thể theo dõi tối đa %{limit} người
|
follow_limit_reached: Bạn chỉ có thể theo dõi tối đa %{limit} người
|
||||||
invalid_otp_token: Mã xác thực hai bước không hợp lệ
|
invalid_otp_token: Mã xác minh 2 bước không hợp lệ
|
||||||
otp_lost_help_html: Nếu bạn mất quyền truy cập vào cả hai, bạn có thể đăng nhập bằng %{email}
|
otp_lost_help_html: Nếu bạn mất quyền truy cập vào cả hai, bạn có thể đăng nhập bằng %{email}
|
||||||
seamless_external_login: Bạn đã đăng nhập thông qua một dịch vụ bên ngoài, vì vậy mật khẩu và email không khả dụng.
|
seamless_external_login: Bạn đã đăng nhập thông qua một dịch vụ bên ngoài, vì vậy mật khẩu và email không khả dụng.
|
||||||
signed_in_as: 'Đăng nhập với tư cách là:'
|
signed_in_as: 'Đăng nhập với tư cách là:'
|
||||||
|
@ -1650,5 +1650,5 @@ vi:
|
||||||
nickname_hint: Nhập tên mới cho khóa bảo mật của bạn
|
nickname_hint: Nhập tên mới cho khóa bảo mật của bạn
|
||||||
not_enabled: Bạn chưa kích hoạt WebAuthn
|
not_enabled: Bạn chưa kích hoạt WebAuthn
|
||||||
not_supported: Trình duyệt của bạn không hỗ trợ khóa bảo mật
|
not_supported: Trình duyệt của bạn không hỗ trợ khóa bảo mật
|
||||||
otp_required: Để dùng khóa bảo mật, trước tiên hãy kích hoạt xác thực hai bước.
|
otp_required: Để dùng khóa bảo mật, trước tiên hãy kích hoạt xác minh 2 bước.
|
||||||
registered_on: Đăng ký vào %{date}
|
registered_on: Đăng ký vào %{date}
|
||||||
|
|
|
@ -26,7 +26,7 @@ zh-CN:
|
||||||
|
|
||||||
'
|
'
|
||||||
learn_more: 了解详情
|
learn_more: 了解详情
|
||||||
logged_in_as_html: 你当前是以 %{username} 登录的。
|
logged_in_as_html: 您当前以 %{username} 登录。
|
||||||
logout_before_registering: 您已登录。
|
logout_before_registering: 您已登录。
|
||||||
privacy_policy: 隐私政策
|
privacy_policy: 隐私政策
|
||||||
rules: 服务器规则
|
rules: 服务器规则
|
||||||
|
@ -46,7 +46,7 @@ zh-CN:
|
||||||
rejecting_media: 来自这些服务器的媒体文件将不会被处理或存储,缩略图也不会显示,需要手动点击打开原始文件。
|
rejecting_media: 来自这些服务器的媒体文件将不会被处理或存储,缩略图也不会显示,需要手动点击打开原始文件。
|
||||||
rejecting_media_title: 被过滤的媒体文件
|
rejecting_media_title: 被过滤的媒体文件
|
||||||
silenced: 来自这些服务器上的帖子将不会出现在公共时间轴和会话中,通知功能也不会提醒这些用户的动态;只有你关注了这些用户,才会收到用户互动的通知消息。
|
silenced: 来自这些服务器上的帖子将不会出现在公共时间轴和会话中,通知功能也不会提醒这些用户的动态;只有你关注了这些用户,才会收到用户互动的通知消息。
|
||||||
silenced_title: 已隐藏的服务器
|
silenced_title: 已限制的服务器
|
||||||
suspended: 这些服务器的数据将不会被处理、存储或者交换,本站也将无法和来自这些服务器的用户互动或者交流。
|
suspended: 这些服务器的数据将不会被处理、存储或者交换,本站也将无法和来自这些服务器的用户互动或者交流。
|
||||||
suspended_title: 已被封禁的服务器
|
suspended_title: 已被封禁的服务器
|
||||||
unavailable_content_html: 通常来说,在 Mastodon 上,你可以浏览联邦宇宙中任何一台服务器上的内容,并且和上面的用户互动。但是某些站点上不排除会有例外。
|
unavailable_content_html: 通常来说,在 Mastodon 上,你可以浏览联邦宇宙中任何一台服务器上的内容,并且和上面的用户互动。但是某些站点上不排除会有例外。
|
||||||
|
@ -505,6 +505,7 @@ zh-CN:
|
||||||
delivery:
|
delivery:
|
||||||
all: 全部
|
all: 全部
|
||||||
clear: 清理投递错误
|
clear: 清理投递错误
|
||||||
|
failing: 发送失败
|
||||||
restart: 重新投递
|
restart: 重新投递
|
||||||
stop: 停止投递
|
stop: 停止投递
|
||||||
unavailable: 不可用
|
unavailable: 不可用
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
class AddIndexStatusesOnAccountId < ActiveRecord::Migration[6.1]
|
||||||
|
disable_ddl_transaction!
|
||||||
|
|
||||||
|
def change
|
||||||
|
add_index :statuses, [:account_id], name: :index_statuses_on_account_id, algorithm: :concurrently
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
class AddIndexStatusesPinsOnStatusId < ActiveRecord::Migration[6.1]
|
||||||
|
disable_ddl_transaction!
|
||||||
|
|
||||||
|
def change
|
||||||
|
add_index :status_pins, [:status_id], name: :index_status_pins_on_status_id, algorithm: :concurrently
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
class AddIndexReportsOnAssignedAccountId < ActiveRecord::Migration[6.1]
|
||||||
|
disable_ddl_transaction!
|
||||||
|
|
||||||
|
def change
|
||||||
|
add_index :reports, [:assigned_account_id], name: :index_reports_on_assigned_account_id, algorithm: :concurrently, where: 'assigned_account_id IS NOT NULL'
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
class AddIndexReportsOnActionTakenByAccountId < ActiveRecord::Migration[6.1]
|
||||||
|
disable_ddl_transaction!
|
||||||
|
|
||||||
|
def change
|
||||||
|
add_index :reports, [:action_taken_by_account_id], name: :index_reports_on_action_taken_by_account_id, algorithm: :concurrently, where: 'action_taken_by_account_id IS NOT NULL'
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2022_03_16_233212) do
|
ActiveRecord::Schema.define(version: 2022_04_28_114902) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
@ -784,6 +784,8 @@ ActiveRecord::Schema.define(version: 2022_03_16_233212) do
|
||||||
t.datetime "action_taken_at"
|
t.datetime "action_taken_at"
|
||||||
t.bigint "rule_ids", array: true
|
t.bigint "rule_ids", array: true
|
||||||
t.index ["account_id"], name: "index_reports_on_account_id"
|
t.index ["account_id"], name: "index_reports_on_account_id"
|
||||||
|
t.index ["action_taken_by_account_id"], name: "index_reports_on_action_taken_by_account_id", where: "(action_taken_by_account_id IS NOT NULL)"
|
||||||
|
t.index ["assigned_account_id"], name: "index_reports_on_assigned_account_id", where: "(assigned_account_id IS NOT NULL)"
|
||||||
t.index ["target_account_id"], name: "index_reports_on_target_account_id"
|
t.index ["target_account_id"], name: "index_reports_on_target_account_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -861,6 +863,7 @@ ActiveRecord::Schema.define(version: 2022_03_16_233212) do
|
||||||
t.datetime "created_at", default: -> { "now()" }, null: false
|
t.datetime "created_at", default: -> { "now()" }, null: false
|
||||||
t.datetime "updated_at", default: -> { "now()" }, null: false
|
t.datetime "updated_at", default: -> { "now()" }, null: false
|
||||||
t.index ["account_id", "status_id"], name: "index_status_pins_on_account_id_and_status_id", unique: true
|
t.index ["account_id", "status_id"], name: "index_status_pins_on_account_id_and_status_id", unique: true
|
||||||
|
t.index ["status_id"], name: "index_status_pins_on_status_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "status_stats", force: :cascade do |t|
|
create_table "status_stats", force: :cascade do |t|
|
||||||
|
@ -899,6 +902,7 @@ ActiveRecord::Schema.define(version: 2022_03_16_233212) do
|
||||||
t.boolean "trendable"
|
t.boolean "trendable"
|
||||||
t.bigint "ordered_media_attachment_ids", array: true
|
t.bigint "ordered_media_attachment_ids", array: true
|
||||||
t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20190820", order: { id: :desc }, where: "(deleted_at IS NULL)"
|
t.index ["account_id", "id", "visibility", "updated_at"], name: "index_statuses_20190820", order: { id: :desc }, where: "(deleted_at IS NULL)"
|
||||||
|
t.index ["account_id"], name: "index_statuses_on_account_id"
|
||||||
t.index ["deleted_at"], name: "index_statuses_on_deleted_at", where: "(deleted_at IS NOT NULL)"
|
t.index ["deleted_at"], name: "index_statuses_on_deleted_at", where: "(deleted_at IS NOT NULL)"
|
||||||
t.index ["id", "account_id"], name: "index_statuses_local_20190824", order: { id: :desc }, where: "((local OR (uri IS NULL)) AND (deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))"
|
t.index ["id", "account_id"], name: "index_statuses_local_20190824", order: { id: :desc }, where: "((local OR (uri IS NULL)) AND (deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))"
|
||||||
t.index ["id", "account_id"], name: "index_statuses_public_20200119", order: { id: :desc }, where: "((deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))"
|
t.index ["id", "account_id"], name: "index_statuses_public_20200119", order: { id: :desc }, where: "((deleted_at IS NULL) AND (visibility = 0) AND (reblog_of_id IS NULL) AND ((NOT reply) OR (in_reply_to_account_id = account_id)))"
|
||||||
|
@ -1239,4 +1243,5 @@ ActiveRecord::Schema.define(version: 2022_03_16_233212) do
|
||||||
ORDER BY (sum(t0.rank)) DESC;
|
ORDER BY (sum(t0.rank)) DESC;
|
||||||
SQL
|
SQL
|
||||||
add_index "follow_recommendations", ["account_id"], name: "index_follow_recommendations_on_account_id", unique: true
|
add_index "follow_recommendations", ["account_id"], name: "index_follow_recommendations_on_account_id", unique: true
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -7,6 +7,7 @@ require_relative 'cli_helper'
|
||||||
module Mastodon
|
module Mastodon
|
||||||
class FeedsCLI < Thor
|
class FeedsCLI < Thor
|
||||||
include CLIHelper
|
include CLIHelper
|
||||||
|
include Redisable
|
||||||
|
|
||||||
def self.exit_on_failure?
|
def self.exit_on_failure?
|
||||||
true
|
true
|
||||||
|
@ -51,10 +52,10 @@ module Mastodon
|
||||||
|
|
||||||
desc 'clear', 'Remove all home and list feeds from Redis'
|
desc 'clear', 'Remove all home and list feeds from Redis'
|
||||||
def clear
|
def clear
|
||||||
keys = Redis.current.keys('feed:*')
|
keys = redis.keys('feed:*')
|
||||||
|
|
||||||
Redis.current.pipelined do
|
redis.pipelined do
|
||||||
keys.each { |key| Redis.current.del(key) }
|
keys.each { |key| redis.del(key) }
|
||||||
end
|
end
|
||||||
|
|
||||||
say('OK', :green)
|
say('OK', :green)
|
||||||
|
|
30
lib/mastodon/rack_middleware.rb
Normal file
30
lib/mastodon/rack_middleware.rb
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class Mastodon::RackMiddleware
|
||||||
|
def initialize(app)
|
||||||
|
@app = app
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(env)
|
||||||
|
@app.call(env)
|
||||||
|
ensure
|
||||||
|
clean_up_sockets!
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def clean_up_sockets!
|
||||||
|
clean_up_redis_socket!
|
||||||
|
clean_up_statsd_socket!
|
||||||
|
end
|
||||||
|
|
||||||
|
def clean_up_redis_socket!
|
||||||
|
Thread.current[:redis]&.close
|
||||||
|
Thread.current[:redis] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def clean_up_statsd_socket!
|
||||||
|
Thread.current[:statsd_socket]&.close
|
||||||
|
Thread.current[:statsd_socket] = nil
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,13 +11,15 @@ def setup_redis_env_url(prefix = nil, defaults = true)
|
||||||
port = ENV.fetch(prefix + 'REDIS_PORT') { 6379 if defaults }
|
port = ENV.fetch(prefix + 'REDIS_PORT') { 6379 if defaults }
|
||||||
db = ENV.fetch(prefix + 'REDIS_DB') { 0 if defaults }
|
db = ENV.fetch(prefix + 'REDIS_DB') { 0 if defaults }
|
||||||
|
|
||||||
ENV[prefix + 'REDIS_URL'] = if [password, host, port, db].all?(&:nil?)
|
ENV[prefix + 'REDIS_URL'] = begin
|
||||||
|
if [password, host, port, db].all?(&:nil?)
|
||||||
ENV['REDIS_URL']
|
ENV['REDIS_URL']
|
||||||
else
|
else
|
||||||
Addressable::URI.parse("redis://#{host}:#{port}/#{db}").tap do |uri|
|
Addressable::URI.parse("redis://#{host}:#{port}/#{db}").tap do |uri|
|
||||||
uri.password = password if password.present?
|
uri.password = password if password.present?
|
||||||
end.normalize.to_str
|
end.normalize.to_str
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
setup_redis_env_url
|
setup_redis_env_url
|
||||||
|
@ -33,6 +35,8 @@ REDIS_CACHE_PARAMS = {
|
||||||
url: ENV['CACHE_REDIS_URL'],
|
url: ENV['CACHE_REDIS_URL'],
|
||||||
expires_in: 10.minutes,
|
expires_in: 10.minutes,
|
||||||
namespace: cache_namespace,
|
namespace: cache_namespace,
|
||||||
|
pool_size: Sidekiq.server? ? Sidekiq.options[:concurrency] : Integer(ENV['MAX_THREADS'] || 5),
|
||||||
|
pool_timeout: 5,
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
REDIS_SIDEKIQ_PARAMS = {
|
REDIS_SIDEKIQ_PARAMS = {
|
||||||
|
@ -40,3 +44,7 @@ REDIS_SIDEKIQ_PARAMS = {
|
||||||
url: ENV['SIDEKIQ_REDIS_URL'],
|
url: ENV['SIDEKIQ_REDIS_URL'],
|
||||||
namespace: sidekiq_namespace,
|
namespace: sidekiq_namespace,
|
||||||
}.freeze
|
}.freeze
|
||||||
|
|
||||||
|
if Rails.env.test?
|
||||||
|
ENV['REDIS_NAMESPACE'] = "mastodon_test#{ENV['TEST_ENV_NUMBER']}"
|
||||||
|
end
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class SidekiqErrorHandler
|
class Mastodon::SidekiqMiddleware
|
||||||
BACKTRACE_LIMIT = 3
|
BACKTRACE_LIMIT = 3
|
||||||
|
|
||||||
def call(*)
|
def call(*)
|
||||||
|
@ -10,9 +10,7 @@ class SidekiqErrorHandler
|
||||||
rescue => e
|
rescue => e
|
||||||
limit_backtrace_and_raise(e)
|
limit_backtrace_and_raise(e)
|
||||||
ensure
|
ensure
|
||||||
socket = Thread.current[:statsd_socket]
|
clean_up_sockets!
|
||||||
socket&.close
|
|
||||||
Thread.current[:statsd_socket] = nil
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -21,4 +19,19 @@ class SidekiqErrorHandler
|
||||||
exception.set_backtrace(exception.backtrace.first(BACKTRACE_LIMIT))
|
exception.set_backtrace(exception.backtrace.first(BACKTRACE_LIMIT))
|
||||||
raise exception
|
raise exception
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def clean_up_sockets!
|
||||||
|
clean_up_redis_socket!
|
||||||
|
clean_up_statsd_socket!
|
||||||
|
end
|
||||||
|
|
||||||
|
def clean_up_redis_socket!
|
||||||
|
Thread.current[:redis]&.close
|
||||||
|
Thread.current[:redis] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
def clean_up_statsd_socket!
|
||||||
|
Thread.current[:statsd_socket]&.close
|
||||||
|
Thread.current[:statsd_socket] = nil
|
||||||
|
end
|
||||||
end
|
end
|
|
@ -65,22 +65,22 @@ describe ApplicationController, type: :controller do
|
||||||
get :show
|
get :show
|
||||||
|
|
||||||
expect_updated_sign_in_at(user)
|
expect_updated_sign_in_at(user)
|
||||||
expect(Redis.current.get("account:#{user.account_id}:regeneration")).to eq 'true'
|
expect(redis.get("account:#{user.account_id}:regeneration")).to eq 'true'
|
||||||
expect(RegenerationWorker).to have_received(:perform_async)
|
expect(RegenerationWorker).to have_received(:perform_async)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets the regeneration marker to expire' do
|
it 'sets the regeneration marker to expire' do
|
||||||
allow(RegenerationWorker).to receive(:perform_async)
|
allow(RegenerationWorker).to receive(:perform_async)
|
||||||
get :show
|
get :show
|
||||||
expect(Redis.current.ttl("account:#{user.account_id}:regeneration")).to be >= 0
|
expect(redis.ttl("account:#{user.account_id}:regeneration")).to be >= 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'regenerates feed when sign in is older than two weeks' do
|
it 'regenerates feed when sign in is older than two weeks' do
|
||||||
get :show
|
get :show
|
||||||
|
|
||||||
expect_updated_sign_in_at(user)
|
expect_updated_sign_in_at(user)
|
||||||
expect(Redis.current.zcard(FeedManager.instance.key(:home, user.account_id))).to eq 3
|
expect(redis.zcard(FeedManager.instance.key(:home, user.account_id))).to eq 3
|
||||||
expect(Redis.current.get("account:#{user.account_id}:regeneration")).to be_nil
|
expect(redis.get("account:#{user.account_id}:regeneration")).to be_nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -84,9 +84,9 @@ RSpec.describe ActivityPub::Activity::Move do
|
||||||
|
|
||||||
context 'when a Move has been recently processed' do
|
context 'when a Move has been recently processed' do
|
||||||
around do |example|
|
around do |example|
|
||||||
Redis.current.set("move_in_progress:#{old_account.id}", true, nx: true, ex: 7.days.seconds)
|
redis.set("move_in_progress:#{old_account.id}", true, nx: true, ex: 7.days.seconds)
|
||||||
example.run
|
example.run
|
||||||
Redis.current.del("move_in_progress:#{old_account.id}")
|
redis.del("move_in_progress:#{old_account.id}")
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not set moved account on old account' do
|
it 'does not set moved account on old account' do
|
||||||
|
|
|
@ -22,7 +22,7 @@ describe DeliveryFailureTracker do
|
||||||
|
|
||||||
describe '#track_failure!' do
|
describe '#track_failure!' do
|
||||||
it 'marks URL as unavailable after 7 days of being called' do
|
it 'marks URL as unavailable after 7 days of being called' do
|
||||||
6.times { |i| Redis.current.sadd('exhausted_deliveries:example.com', i) }
|
6.times { |i| redis.sadd('exhausted_deliveries:example.com', i) }
|
||||||
subject.track_failure!
|
subject.track_failure!
|
||||||
|
|
||||||
expect(subject.days).to eq 7
|
expect(subject.days).to eq 7
|
||||||
|
|
|
@ -202,11 +202,11 @@ RSpec.describe FeedManager do
|
||||||
account = Fabricate(:account)
|
account = Fabricate(:account)
|
||||||
status = Fabricate(:status)
|
status = Fabricate(:status)
|
||||||
members = FeedManager::MAX_ITEMS.times.map { |count| [count, count] }
|
members = FeedManager::MAX_ITEMS.times.map { |count| [count, count] }
|
||||||
Redis.current.zadd("feed:home:#{account.id}", members)
|
redis.zadd("feed:home:#{account.id}", members)
|
||||||
|
|
||||||
FeedManager.instance.push_to_home(account, status)
|
FeedManager.instance.push_to_home(account, status)
|
||||||
|
|
||||||
expect(Redis.current.zcard("feed:home:#{account.id}")).to eq FeedManager::MAX_ITEMS
|
expect(redis.zcard("feed:home:#{account.id}")).to eq FeedManager::MAX_ITEMS
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'reblogs' do
|
context 'reblogs' do
|
||||||
|
@ -431,7 +431,7 @@ RSpec.describe FeedManager do
|
||||||
|
|
||||||
FeedManager.instance.merge_into_home(account, reblog.account)
|
FeedManager.instance.merge_into_home(account, reblog.account)
|
||||||
|
|
||||||
expect(Redis.current.zscore("feed:home:0", reblog.id)).to eq nil
|
expect(redis.zscore("feed:home:0", reblog.id)).to eq nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -447,13 +447,13 @@ RSpec.describe FeedManager do
|
||||||
FeedManager.instance.push_to_home(receiver, status)
|
FeedManager.instance.push_to_home(receiver, status)
|
||||||
|
|
||||||
# The reblogging status should show up under normal conditions.
|
# The reblogging status should show up under normal conditions.
|
||||||
expect(Redis.current.zrange("feed:home:#{receiver.id}", 0, -1)).to include(status.id.to_s)
|
expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to include(status.id.to_s)
|
||||||
|
|
||||||
FeedManager.instance.unpush_from_home(receiver, status)
|
FeedManager.instance.unpush_from_home(receiver, status)
|
||||||
|
|
||||||
# Restore original status
|
# Restore original status
|
||||||
expect(Redis.current.zrange("feed:home:#{receiver.id}", 0, -1)).to_not include(status.id.to_s)
|
expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to_not include(status.id.to_s)
|
||||||
expect(Redis.current.zrange("feed:home:#{receiver.id}", 0, -1)).to include(reblogged.id.to_s)
|
expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to include(reblogged.id.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'removes a reblogged status if it was only reblogged once' do
|
it 'removes a reblogged status if it was only reblogged once' do
|
||||||
|
@ -463,11 +463,11 @@ RSpec.describe FeedManager do
|
||||||
FeedManager.instance.push_to_home(receiver, status)
|
FeedManager.instance.push_to_home(receiver, status)
|
||||||
|
|
||||||
# The reblogging status should show up under normal conditions.
|
# The reblogging status should show up under normal conditions.
|
||||||
expect(Redis.current.zrange("feed:home:#{receiver.id}", 0, -1)).to eq [status.id.to_s]
|
expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to eq [status.id.to_s]
|
||||||
|
|
||||||
FeedManager.instance.unpush_from_home(receiver, status)
|
FeedManager.instance.unpush_from_home(receiver, status)
|
||||||
|
|
||||||
expect(Redis.current.zrange("feed:home:#{receiver.id}", 0, -1)).to be_empty
|
expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to be_empty
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'leaves a multiply-reblogged status if another reblog was in feed' do
|
it 'leaves a multiply-reblogged status if another reblog was in feed' do
|
||||||
|
@ -479,13 +479,13 @@ RSpec.describe FeedManager do
|
||||||
end
|
end
|
||||||
|
|
||||||
# The reblogging status should show up under normal conditions.
|
# The reblogging status should show up under normal conditions.
|
||||||
expect(Redis.current.zrange("feed:home:#{receiver.id}", 0, -1)).to eq [reblogs.first.id.to_s]
|
expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to eq [reblogs.first.id.to_s]
|
||||||
|
|
||||||
reblogs[0...-1].each do |reblog|
|
reblogs[0...-1].each do |reblog|
|
||||||
FeedManager.instance.unpush_from_home(receiver, reblog)
|
FeedManager.instance.unpush_from_home(receiver, reblog)
|
||||||
end
|
end
|
||||||
|
|
||||||
expect(Redis.current.zrange("feed:home:#{receiver.id}", 0, -1)).to eq [reblogs.last.id.to_s]
|
expect(redis.zrange("feed:home:#{receiver.id}", 0, -1)).to eq [reblogs.last.id.to_s]
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sends push updates' do
|
it 'sends push updates' do
|
||||||
|
@ -493,11 +493,11 @@ RSpec.describe FeedManager do
|
||||||
|
|
||||||
FeedManager.instance.push_to_home(receiver, status)
|
FeedManager.instance.push_to_home(receiver, status)
|
||||||
|
|
||||||
allow(Redis.current).to receive_messages(publish: nil)
|
allow(redis).to receive_messages(publish: nil)
|
||||||
FeedManager.instance.unpush_from_home(receiver, status)
|
FeedManager.instance.unpush_from_home(receiver, status)
|
||||||
|
|
||||||
deletion = Oj.dump(event: :delete, payload: status.id.to_s)
|
deletion = Oj.dump(event: :delete, payload: status.id.to_s)
|
||||||
expect(Redis.current).to have_received(:publish).with("timeline:#{receiver.id}", deletion)
|
expect(redis).to have_received(:publish).with("timeline:#{receiver.id}", deletion)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -515,14 +515,14 @@ RSpec.describe FeedManager do
|
||||||
|
|
||||||
before do
|
before do
|
||||||
[status_1, status_3, status_5, status_6, status_7].each do |status|
|
[status_1, status_3, status_5, status_6, status_7].each do |status|
|
||||||
Redis.current.zadd("feed:home:#{account.id}", status.id, status.id)
|
redis.zadd("feed:home:#{account.id}", status.id, status.id)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'correctly cleans the home timeline' do
|
it 'correctly cleans the home timeline' do
|
||||||
FeedManager.instance.clear_from_home(account, target_account)
|
FeedManager.instance.clear_from_home(account, target_account)
|
||||||
|
|
||||||
expect(Redis.current.zrange("feed:home:#{account.id}", 0, -1)).to eq [status_1.id.to_s, status_7.id.to_s]
|
expect(redis.zrange("feed:home:#{account.id}", 0, -1)).to eq [status_1.id.to_s, status_7.id.to_s]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,7 +15,7 @@ RSpec.describe HomeFeed, type: :model do
|
||||||
|
|
||||||
context 'when feed is generated' do
|
context 'when feed is generated' do
|
||||||
before do
|
before do
|
||||||
Redis.current.zadd(
|
redis.zadd(
|
||||||
FeedManager.instance.key(:home, account.id),
|
FeedManager.instance.key(:home, account.id),
|
||||||
[[4, 4], [3, 3], [2, 2], [1, 1]]
|
[[4, 4], [3, 3], [2, 2], [1, 1]]
|
||||||
)
|
)
|
||||||
|
@ -31,7 +31,7 @@ RSpec.describe HomeFeed, type: :model do
|
||||||
|
|
||||||
context 'when feed is being generated' do
|
context 'when feed is being generated' do
|
||||||
before do
|
before do
|
||||||
Redis.current.set("account:#{account.id}:regeneration", true)
|
redis.set("account:#{account.id}:regeneration", true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns nothing' do
|
it 'returns nothing' do
|
||||||
|
|
|
@ -13,7 +13,6 @@ Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
|
||||||
|
|
||||||
ActiveRecord::Migration.maintain_test_schema!
|
ActiveRecord::Migration.maintain_test_schema!
|
||||||
WebMock.disable_net_connect!(allow: Chewy.settings[:host])
|
WebMock.disable_net_connect!(allow: Chewy.settings[:host])
|
||||||
Redis.current = Redis::Namespace.new("mastodon_test#{ENV['TEST_ENV_NUMBER']}", redis: Redis.current)
|
|
||||||
Sidekiq::Testing.inline!
|
Sidekiq::Testing.inline!
|
||||||
Sidekiq.logger = nil
|
Sidekiq.logger = nil
|
||||||
|
|
||||||
|
@ -44,6 +43,7 @@ RSpec.configure do |config|
|
||||||
config.include Devise::Test::ControllerHelpers, type: :view
|
config.include Devise::Test::ControllerHelpers, type: :view
|
||||||
config.include Paperclip::Shoulda::Matchers
|
config.include Paperclip::Shoulda::Matchers
|
||||||
config.include ActiveSupport::Testing::TimeHelpers
|
config.include ActiveSupport::Testing::TimeHelpers
|
||||||
|
config.include Redisable
|
||||||
|
|
||||||
config.before :each, type: :feature do
|
config.before :each, type: :feature do
|
||||||
https = ENV['LOCAL_HTTPS'] == 'true'
|
https = ENV['LOCAL_HTTPS'] == 'true'
|
||||||
|
@ -60,7 +60,7 @@ RSpec.configure do |config|
|
||||||
|
|
||||||
config.after :each do
|
config.after :each do
|
||||||
Rails.cache.clear
|
Rails.cache.clear
|
||||||
Redis.current.del(Redis.current.keys)
|
redis.del(redis.keys)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ RSpec.describe AfterBlockService, type: :service do
|
||||||
let(:home_timeline_key) { FeedManager.instance.key(:home, account.id) }
|
let(:home_timeline_key) { FeedManager.instance.key(:home, account.id) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
Redis.current.del(home_timeline_key)
|
redis.del(home_timeline_key)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "clears account's statuses" do
|
it "clears account's statuses" do
|
||||||
|
@ -23,7 +23,7 @@ RSpec.describe AfterBlockService, type: :service do
|
||||||
FeedManager.instance.push_to_home(account, other_account_reblog)
|
FeedManager.instance.push_to_home(account, other_account_reblog)
|
||||||
|
|
||||||
expect { subject }.to change {
|
expect { subject }.to change {
|
||||||
Redis.current.zrange(home_timeline_key, 0, -1)
|
redis.zrange(home_timeline_key, 0, -1)
|
||||||
}.from([status.id.to_s, other_account_status.id.to_s, other_account_reblog.id.to_s]).to([other_account_status.id.to_s])
|
}.from([status.id.to_s, other_account_status.id.to_s, other_account_reblog.id.to_s]).to([other_account_status.id.to_s])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -33,7 +33,7 @@ RSpec.describe AfterBlockService, type: :service do
|
||||||
let(:list_timeline_key) { FeedManager.instance.key(:list, list.id) }
|
let(:list_timeline_key) { FeedManager.instance.key(:list, list.id) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
Redis.current.del(list_timeline_key)
|
redis.del(list_timeline_key)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "clears account's statuses" do
|
it "clears account's statuses" do
|
||||||
|
@ -42,7 +42,7 @@ RSpec.describe AfterBlockService, type: :service do
|
||||||
FeedManager.instance.push_to_list(list, other_account_reblog)
|
FeedManager.instance.push_to_list(list, other_account_reblog)
|
||||||
|
|
||||||
expect { subject }.to change {
|
expect { subject }.to change {
|
||||||
Redis.current.zrange(list_timeline_key, 0, -1)
|
redis.zrange(list_timeline_key, 0, -1)
|
||||||
}.from([status.id.to_s, other_account_status.id.to_s, other_account_reblog.id.to_s]).to([other_account_status.id.to_s])
|
}.from([status.id.to_s, other_account_status.id.to_s, other_account_reblog.id.to_s]).to([other_account_status.id.to_s])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,7 +12,7 @@ RSpec.describe BatchedRemoveStatusService, type: :service do
|
||||||
let(:status2) { PostStatusService.new.call(alice, text: 'Another status') }
|
let(:status2) { PostStatusService.new.call(alice, text: 'Another status') }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
allow(Redis.current).to receive_messages(publish: nil)
|
allow(redis).to receive_messages(publish: nil)
|
||||||
|
|
||||||
stub_request(:post, 'http://example.com/inbox').to_return(status: 200)
|
stub_request(:post, 'http://example.com/inbox').to_return(status: 200)
|
||||||
|
|
||||||
|
@ -40,11 +40,11 @@ RSpec.describe BatchedRemoveStatusService, type: :service do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'notifies streaming API of followers' do
|
it 'notifies streaming API of followers' do
|
||||||
expect(Redis.current).to have_received(:publish).with("timeline:#{jeff.id}", any_args).at_least(:once)
|
expect(redis).to have_received(:publish).with("timeline:#{jeff.id}", any_args).at_least(:once)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'notifies streaming API of public timeline' do
|
it 'notifies streaming API of public timeline' do
|
||||||
expect(Redis.current).to have_received(:publish).with('timeline:public', any_args).at_least(:once)
|
expect(redis).to have_received(:publish).with('timeline:public', any_args).at_least(:once)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sends delete activity to followers' do
|
it 'sends delete activity to followers' do
|
||||||
|
|
|
@ -18,7 +18,7 @@ RSpec.describe FanOutOnWriteService, type: :service do
|
||||||
ProcessMentionsService.new.call(status)
|
ProcessMentionsService.new.call(status)
|
||||||
ProcessHashtagsService.new.call(status)
|
ProcessHashtagsService.new.call(status)
|
||||||
|
|
||||||
allow(Redis.current).to receive(:publish)
|
allow(redis).to receive(:publish)
|
||||||
|
|
||||||
subject.call(status)
|
subject.call(status)
|
||||||
end
|
end
|
||||||
|
@ -40,13 +40,13 @@ RSpec.describe FanOutOnWriteService, type: :service do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is broadcast to the hashtag stream' do
|
it 'is broadcast to the hashtag stream' do
|
||||||
expect(Redis.current).to have_received(:publish).with('timeline:hashtag:hoge', anything)
|
expect(redis).to have_received(:publish).with('timeline:hashtag:hoge', anything)
|
||||||
expect(Redis.current).to have_received(:publish).with('timeline:hashtag:hoge:local', anything)
|
expect(redis).to have_received(:publish).with('timeline:hashtag:hoge:local', anything)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is broadcast to the public stream' do
|
it 'is broadcast to the public stream' do
|
||||||
expect(Redis.current).to have_received(:publish).with('timeline:public', anything)
|
expect(redis).to have_received(:publish).with('timeline:public', anything)
|
||||||
expect(Redis.current).to have_received(:publish).with('timeline:public:local', anything)
|
expect(redis).to have_received(:publish).with('timeline:public:local', anything)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -66,8 +66,8 @@ RSpec.describe FanOutOnWriteService, type: :service do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is not broadcast publicly' do
|
it 'is not broadcast publicly' do
|
||||||
expect(Redis.current).to_not have_received(:publish).with('timeline:hashtag:hoge', anything)
|
expect(redis).to_not have_received(:publish).with('timeline:hashtag:hoge', anything)
|
||||||
expect(Redis.current).to_not have_received(:publish).with('timeline:public', anything)
|
expect(redis).to_not have_received(:publish).with('timeline:public', anything)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -84,8 +84,8 @@ RSpec.describe FanOutOnWriteService, type: :service do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is not broadcast publicly' do
|
it 'is not broadcast publicly' do
|
||||||
expect(Redis.current).to_not have_received(:publish).with('timeline:hashtag:hoge', anything)
|
expect(redis).to_not have_received(:publish).with('timeline:hashtag:hoge', anything)
|
||||||
expect(Redis.current).to_not have_received(:publish).with('timeline:public', anything)
|
expect(redis).to_not have_received(:publish).with('timeline:public', anything)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -105,8 +105,8 @@ RSpec.describe FanOutOnWriteService, type: :service do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'is not broadcast publicly' do
|
it 'is not broadcast publicly' do
|
||||||
expect(Redis.current).to_not have_received(:publish).with('timeline:hashtag:hoge', anything)
|
expect(redis).to_not have_received(:publish).with('timeline:hashtag:hoge', anything)
|
||||||
expect(Redis.current).to_not have_received(:publish).with('timeline:public', anything)
|
expect(redis).to_not have_received(:publish).with('timeline:public', anything)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,7 +12,7 @@ RSpec.describe MuteService, type: :service do
|
||||||
let(:home_timeline_key) { FeedManager.instance.key(:home, account.id) }
|
let(:home_timeline_key) { FeedManager.instance.key(:home, account.id) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
Redis.current.del(home_timeline_key)
|
redis.del(home_timeline_key)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "clears account's statuses" do
|
it "clears account's statuses" do
|
||||||
|
@ -20,7 +20,7 @@ RSpec.describe MuteService, type: :service do
|
||||||
FeedManager.instance.push_to_home(account, other_account_status)
|
FeedManager.instance.push_to_home(account, other_account_status)
|
||||||
|
|
||||||
expect { subject }.to change {
|
expect { subject }.to change {
|
||||||
Redis.current.zrange(home_timeline_key, 0, -1)
|
redis.zrange(home_timeline_key, 0, -1)
|
||||||
}.from([status.id.to_s, other_account_status.id.to_s]).to([other_account_status.id.to_s])
|
}.from([status.id.to_s, other_account_status.id.to_s]).to([other_account_status.id.to_s])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,7 +13,7 @@ RSpec.describe PrecomputeFeedService, type: :service do
|
||||||
|
|
||||||
subject.call(account)
|
subject.call(account)
|
||||||
|
|
||||||
expect(Redis.current.zscore(FeedManager.instance.key(:home, account.id), status.id)).to be_within(0.1).of(status.id.to_f)
|
expect(redis.zscore(FeedManager.instance.key(:home, account.id), status.id)).to be_within(0.1).of(status.id.to_f)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not raise an error even if it could not find any status' do
|
it 'does not raise an error even if it could not find any status' do
|
||||||
|
@ -30,7 +30,7 @@ RSpec.describe PrecomputeFeedService, type: :service do
|
||||||
|
|
||||||
subject.call(account)
|
subject.call(account)
|
||||||
|
|
||||||
expect(Redis.current.zscore(FeedManager.instance.key(:home, account.id), reblog.id)).to eq nil
|
expect(redis.zscore(FeedManager.instance.key(:home, account.id), reblog.id)).to eq nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,14 +8,28 @@ describe ResolveURLService, type: :service do
|
||||||
describe '#call' do
|
describe '#call' do
|
||||||
it 'returns nil when there is no resource url' do
|
it 'returns nil when there is no resource url' do
|
||||||
url = 'http://example.com/missing-resource'
|
url = 'http://example.com/missing-resource'
|
||||||
|
known_account = Fabricate(:account, uri: url)
|
||||||
service = double
|
service = double
|
||||||
|
|
||||||
allow(FetchResourceService).to receive(:new).and_return service
|
allow(FetchResourceService).to receive(:new).and_return service
|
||||||
|
allow(service).to receive(:response_code).and_return(404)
|
||||||
allow(service).to receive(:call).with(url).and_return(nil)
|
allow(service).to receive(:call).with(url).and_return(nil)
|
||||||
|
|
||||||
expect(subject.call(url)).to be_nil
|
expect(subject.call(url)).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'returns known account on temporary error' do
|
||||||
|
url = 'http://example.com/missing-resource'
|
||||||
|
known_account = Fabricate(:account, uri: url)
|
||||||
|
service = double
|
||||||
|
|
||||||
|
allow(FetchResourceService).to receive(:new).and_return service
|
||||||
|
allow(service).to receive(:response_code).and_return(500)
|
||||||
|
allow(service).to receive(:call).with(url).and_return(nil)
|
||||||
|
|
||||||
|
expect(subject.call(url)).to eq known_account
|
||||||
|
end
|
||||||
|
|
||||||
context 'searching for a remote private status' do
|
context 'searching for a remote private status' do
|
||||||
let(:account) { Fabricate(:account) }
|
let(:account) { Fabricate(:account) }
|
||||||
let(:poster) { Fabricate(:account, domain: 'example.com') }
|
let(:poster) { Fabricate(:account, domain: 'example.com') }
|
||||||
|
|
|
@ -7,17 +7,17 @@ describe Scheduler::FeedCleanupScheduler do
|
||||||
let!(:inactive_user) { Fabricate(:user, current_sign_in_at: 22.days.ago) }
|
let!(:inactive_user) { Fabricate(:user, current_sign_in_at: 22.days.ago) }
|
||||||
|
|
||||||
it 'clears feeds of inactives' do
|
it 'clears feeds of inactives' do
|
||||||
Redis.current.zadd(feed_key_for(inactive_user), 1, 1)
|
redis.zadd(feed_key_for(inactive_user), 1, 1)
|
||||||
Redis.current.zadd(feed_key_for(active_user), 1, 1)
|
redis.zadd(feed_key_for(active_user), 1, 1)
|
||||||
Redis.current.zadd(feed_key_for(inactive_user, 'reblogs'), 2, 2)
|
redis.zadd(feed_key_for(inactive_user, 'reblogs'), 2, 2)
|
||||||
Redis.current.sadd(feed_key_for(inactive_user, 'reblogs:2'), 3)
|
redis.sadd(feed_key_for(inactive_user, 'reblogs:2'), 3)
|
||||||
|
|
||||||
subject.perform
|
subject.perform
|
||||||
|
|
||||||
expect(Redis.current.zcard(feed_key_for(inactive_user))).to eq 0
|
expect(redis.zcard(feed_key_for(inactive_user))).to eq 0
|
||||||
expect(Redis.current.zcard(feed_key_for(active_user))).to eq 1
|
expect(redis.zcard(feed_key_for(active_user))).to eq 1
|
||||||
expect(Redis.current.exists?(feed_key_for(inactive_user, 'reblogs'))).to be false
|
expect(redis.exists?(feed_key_for(inactive_user, 'reblogs'))).to be false
|
||||||
expect(Redis.current.exists?(feed_key_for(inactive_user, 'reblogs:2'))).to be false
|
expect(redis.exists?(feed_key_for(inactive_user, 'reblogs:2'))).to be false
|
||||||
end
|
end
|
||||||
|
|
||||||
def feed_key_for(user, subtype = nil)
|
def feed_key_for(user, subtype = nil)
|
||||||
|
|
Loading…
Reference in a new issue